From 8e947e5bd64d5db2f60a528889abc0b6907fbdfd Mon Sep 17 00:00:00 2001 From: LoveSy <631499712@qq.com> Date: Thu, 9 Feb 2023 20:07:08 +0800 Subject: [PATCH] Support non-integer API level (#317) * Support non-integer API level * update lib * Add test * No need to install platforms. Mostly application will use different SDK platform. * Update lib --- __tests__/input-validator.test.ts | 8 ++++++++ lib/input-validator.js | 2 ++ lib/main.js | 5 ++--- lib/sdk-installer.js | 2 +- src/emulator-manager.ts | 2 +- src/input-validator.ts | 1 + src/main.ts | 5 ++--- src/sdk-installer.ts | 4 ++-- 8 files changed, 19 insertions(+), 10 deletions(-) diff --git a/__tests__/input-validator.test.ts b/__tests__/input-validator.test.ts index ba7e20eb..59201f41 100644 --- a/__tests__/input-validator.test.ts +++ b/__tests__/input-validator.test.ts @@ -32,6 +32,14 @@ describe('api-level validator tests', () => { validator.checkApiLevel('29'); }; expect(func2).not.toThrow(); + const func3 = () => { + validator.checkApiLevel('UpsideDownCake-ext5'); + }; + expect(func3).not.toThrow(); + const func4 = () => { + validator.checkApiLevel('TiramisuPrivacySandbox'); + }; + expect(func4).not.toThrow(); }); }); diff --git a/lib/input-validator.js b/lib/input-validator.js index 95959a5a..78393584 100644 --- a/lib/input-validator.js +++ b/lib/input-validator.js @@ -6,6 +6,8 @@ exports.VALID_TARGETS = ['default', 'google_apis', 'aosp_atd', 'google_atd', 'go exports.VALID_ARCHS = ['x86', 'x86_64', 'arm64-v8a']; exports.VALID_CHANNELS = ['stable', 'beta', 'dev', 'canary']; function checkApiLevel(apiLevel) { + if (apiLevel.startsWith('UpsideDownCake') || apiLevel === 'TiramisuPrivacySandbox') + return; if (isNaN(Number(apiLevel)) || !Number.isInteger(Number(apiLevel))) { throw new Error(`Unexpected API level: '${apiLevel}'.`); } diff --git a/lib/main.js b/lib/main.js index a4fd8d3f..99ce8da9 100644 --- a/lib/main.js +++ b/lib/main.js @@ -61,9 +61,8 @@ function run() { } } // API level of the platform and system image - const apiLevelInput = core.getInput('api-level', { required: true }); - (0, input_validator_1.checkApiLevel)(apiLevelInput); - const apiLevel = Number(apiLevelInput); + const apiLevel = core.getInput('api-level', { required: true }); + (0, input_validator_1.checkApiLevel)(apiLevel); console.log(`API level: ${apiLevel}`); // target of the system image const targetInput = core.getInput('target'); diff --git a/lib/sdk-installer.js b/lib/sdk-installer.js index a224329f..781ec61a 100644 --- a/lib/sdk-installer.js +++ b/lib/sdk-installer.js @@ -68,7 +68,7 @@ function installAndroidSdk(apiLevel, target, arch, channelId, emulatorBuild, ndk // accept all Android SDK licenses yield exec.exec(`sh -c \\"yes | sdkmanager --licenses > /dev/null"`); console.log('Installing latest build tools, platform tools, and platform.'); - yield exec.exec(`sh -c \\"sdkmanager --install 'build-tools;${BUILD_TOOLS_VERSION}' platform-tools 'platforms;android-${apiLevel}' > /dev/null"`); + yield exec.exec(`sh -c \\"sdkmanager --install 'build-tools;${BUILD_TOOLS_VERSION}' platform-tools > /dev/null"`); console.log('Installing latest emulator.'); yield exec.exec(`sh -c \\"sdkmanager --install emulator --channel=${channelId} > /dev/null"`); if (emulatorBuild) { diff --git a/src/emulator-manager.ts b/src/emulator-manager.ts index 4c348fbc..b596249a 100644 --- a/src/emulator-manager.ts +++ b/src/emulator-manager.ts @@ -7,7 +7,7 @@ const EMULATOR_BOOT_TIMEOUT_SECONDS = 600; * Creates and launches a new AVD instance with the specified configurations. */ export async function launchEmulator( - apiLevel: number, + apiLevel: string, target: string, arch: string, profile: string, diff --git a/src/input-validator.ts b/src/input-validator.ts index 7cf1e1b0..e52d7923 100644 --- a/src/input-validator.ts +++ b/src/input-validator.ts @@ -4,6 +4,7 @@ export const VALID_ARCHS: Array = ['x86', 'x86_64', 'arm64-v8a']; export const VALID_CHANNELS: Array = ['stable', 'beta', 'dev', 'canary']; export function checkApiLevel(apiLevel: string): void { + if (apiLevel.startsWith('UpsideDownCake') || apiLevel === 'TiramisuPrivacySandbox') return; if (isNaN(Number(apiLevel)) || !Number.isInteger(Number(apiLevel))) { throw new Error(`Unexpected API level: '${apiLevel}'.`); } diff --git a/src/main.ts b/src/main.ts index 48827a91..4cb0424c 100644 --- a/src/main.ts +++ b/src/main.ts @@ -40,9 +40,8 @@ async function run() { } // API level of the platform and system image - const apiLevelInput = core.getInput('api-level', { required: true }); - checkApiLevel(apiLevelInput); - const apiLevel = Number(apiLevelInput); + const apiLevel = core.getInput('api-level', { required: true }); + checkApiLevel(apiLevel); console.log(`API level: ${apiLevel}`); // target of the system image diff --git a/src/sdk-installer.ts b/src/sdk-installer.ts index a421f2ff..4383c6bf 100644 --- a/src/sdk-installer.ts +++ b/src/sdk-installer.ts @@ -12,7 +12,7 @@ const CMDLINE_TOOLS_URL_LINUX = 'https://dl.google.com/android/repository/comman * Installs & updates the Android SDK for the macOS platform, including SDK platform for the chosen API level, latest build tools, platform tools, Android Emulator, * and the system image for the chosen API level, CPU arch, and target. */ -export async function installAndroidSdk(apiLevel: number, target: string, arch: string, channelId: number, emulatorBuild?: string, ndkVersion?: string, cmakeVersion?: string): Promise { +export async function installAndroidSdk(apiLevel: string, target: string, arch: string, channelId: number, emulatorBuild?: string, ndkVersion?: string, cmakeVersion?: string): Promise { try { console.log(`::group::Install Android SDK`); const isOnMac = process.platform === 'darwin'; @@ -41,7 +41,7 @@ export async function installAndroidSdk(apiLevel: number, target: string, arch: console.log('Installing latest build tools, platform tools, and platform.'); - await exec.exec(`sh -c \\"sdkmanager --install 'build-tools;${BUILD_TOOLS_VERSION}' platform-tools 'platforms;android-${apiLevel}' > /dev/null"`); + await exec.exec(`sh -c \\"sdkmanager --install 'build-tools;${BUILD_TOOLS_VERSION}' platform-tools > /dev/null"`); console.log('Installing latest emulator.'); await exec.exec(`sh -c \\"sdkmanager --install emulator --channel=${channelId} > /dev/null"`);