diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 5967620c6..8d120b4ef 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -19,11 +19,11 @@ jobs:
     strategy:
       matrix:
         include:
-          - os: ubuntu-latest
+          - os: ubuntu-22.04
             api-level: 23
             target: default
             arch: x86
-          - os: ubuntu-latest
+          - os: ubuntu-24.04
             api-level: 24
             target: playstore
             arch: x86
@@ -31,11 +31,11 @@ jobs:
             api-level: 31
             target: default
             arch: x86_64
-          - os: ubuntu-latest
+          - os: ubuntu-24.04
             api-level: 34
             target: aosp_atd
             arch: x86_64
-          - os: ubuntu-latest
+          - os: ubuntu-24.04
             api-level: 35
             target: google_apis
             arch: x86_64
diff --git a/lib/sdk-installer.js b/lib/sdk-installer.js
index feb6eb266..fe7f51385 100644
--- a/lib/sdk-installer.js
+++ b/lib/sdk-installer.js
@@ -52,11 +52,6 @@ function installAndroidSdk(apiLevel, target, arch, channelId, emulatorBuild, ndk
             console.log(`::group::Install Android SDK`);
             const isOnMac = process.platform === 'darwin';
             const isArm = process.arch === 'arm64';
-            if (!isOnMac) {
-                yield exec.exec(`sh -c \\"sudo chown $USER:$USER ${process.env.ANDROID_HOME}/platform-tools -R`);
-                yield exec.exec(`sh -c \\"sudo chown $USER:$USER ${process.env.ANDROID_HOME}/cmdline-tools/latest -R`);
-                yield exec.exec(`sh -c \\"sudo chown $USER:$USER ${process.env.ANDROID_HOME}/build-tools/${BUILD_TOOLS_VERSION} -R`);
-            }
             const cmdlineToolsPath = `${process.env.ANDROID_HOME}/cmdline-tools`;
             if (!fs.existsSync(cmdlineToolsPath)) {
                 console.log('Installing new cmdline-tools.');
@@ -68,6 +63,7 @@ function installAndroidSdk(apiLevel, target, arch, channelId, emulatorBuild, ndk
             // add paths for commandline-tools and platform-tools
             core.addPath(`${cmdlineToolsPath}/latest:${cmdlineToolsPath}/latest/bin:${process.env.ANDROID_HOME}/platform-tools`);
             // set standard AVD path
+            yield io.mkdirP(`${process.env.HOME}/.android/avd`);
             core.exportVariable('ANDROID_AVD_HOME', `${process.env.HOME}/.android/avd`);
             // accept all Android SDK licenses
             yield exec.exec(`sh -c \\"yes | sdkmanager --licenses > /dev/null"`);
diff --git a/src/sdk-installer.ts b/src/sdk-installer.ts
index 5c7a0f2c7..f87028a6f 100644
--- a/src/sdk-installer.ts
+++ b/src/sdk-installer.ts
@@ -19,12 +19,6 @@ export async function installAndroidSdk(apiLevel: string, target: string, arch:
     const isOnMac = process.platform === 'darwin';
     const isArm = process.arch === 'arm64';
 
-    if (!isOnMac) {
-      await exec.exec(`sh -c \\"sudo chown $USER:$USER ${process.env.ANDROID_HOME}/platform-tools -R`);
-      await exec.exec(`sh -c \\"sudo chown $USER:$USER ${process.env.ANDROID_HOME}/cmdline-tools/latest -R`);
-      await exec.exec(`sh -c \\"sudo chown $USER:$USER ${process.env.ANDROID_HOME}/build-tools/${BUILD_TOOLS_VERSION} -R`);
-    }
-
     const cmdlineToolsPath = `${process.env.ANDROID_HOME}/cmdline-tools`;
     if (!fs.existsSync(cmdlineToolsPath)) {
       console.log('Installing new cmdline-tools.');
@@ -38,6 +32,7 @@ export async function installAndroidSdk(apiLevel: string, target: string, arch:
     core.addPath(`${cmdlineToolsPath}/latest:${cmdlineToolsPath}/latest/bin:${process.env.ANDROID_HOME}/platform-tools`);
 
     // set standard AVD path
+    await io.mkdirP(`${process.env.HOME}/.android/avd`);
     core.exportVariable('ANDROID_AVD_HOME', `${process.env.HOME}/.android/avd`);
 
     // accept all Android SDK licenses