{"record":{"id":"a73901c51b357f3d","repo":"apache/cordova-android","slug":"please-install-the-android-sdk-platform-platforms","errorCode":null,"errorMessage":"Please install the Android SDK Platform \"platforms;${desired_api_level}\"","messagePattern":"Please install the Android SDK Platform \"platforms;(.+?)\"","errorType":"validation","errorClass":"CordovaError","httpStatus":null,"severity":"error","filePath":"lib/check_reqs.js","lineNumber":264,"sourceCode":"                process.env.PATH += path.delimiter + cmdLineToolsBin;\n            }\n        }\n        return hasAndroidHome;\n    });\n};\n\nmodule.exports.check_android_target = function (projectRoot) {\n    // valid_target can look like:\n    //   android-19\n    //   android-L\n    //   Google Inc.:Google APIs:20\n    //   Google Inc.:Glass Development Kit Preview:20\n    const desired_api_level = module.exports.get_target(projectRoot);\n    return android_sdk.list_targets().then(function (targets) {\n        if (targets.indexOf(desired_api_level) >= 0) {\n            return targets;\n        }\n        throw new CordovaError(`Please install the Android SDK Platform \"platforms;${desired_api_level}\"`);\n    });\n};\n\n// Returns a promise.\nmodule.exports.run = function () {\n    console.log('Checking Java JDK and Android SDK versions');\n    console.log('ANDROID_HOME=' + process.env.ANDROID_HOME + ' (recommended setting)');\n    console.log('ANDROID_SDK_ROOT=' + process.env.ANDROID_SDK_ROOT + ' (DEPRECATED)');\n\n    return Promise.all([this.check_java(), this.check_android()]).then(function (values) {\n        console.log('Using Android SDK: ' + (process.env.ANDROID_HOME || process.env.ANDROID_SDK_ROOT));\n\n        if (!values[1]) {\n            throw new CordovaError('Requirements check failed for Android SDK! Android SDK was not detected.');\n        }\n    });\n};\n","sourceCodeStart":246,"sourceCodeEnd":282,"githubUrl":"https://github.com/apache/cordova-android/blob/7c1e190064e349ffa4bbc6ac37b77cd773e4dbd3/lib/check_reqs.js#L246-L282","documentation":"check_android_target compares the project's compile target string (module.exports.get_target - read from platforms/android/project.properties 'target=', e.g. android-34) against the list returned by android_sdk.list_targets(). Thrown when the exact target string is not among installed SDK platforms; the message names the missing platform package.","triggerScenarios":"`cordova requirements android`, or a build that runs the target check, when the project targets android-34 but the SDK only has older platforms installed - typical after raising android-targetSdkVersion/config.xml target or cloning the project onto a fresh machine/CI image.","commonSituations":"New developer machine or CI image missing that platform; a plugin raising the required target; project.properties regenerated with a newer default target after a platform update.","solutions":["Install the exact platform from the message: `sdkmanager \"platforms;android-34\"` (or tick it in Android Studio SDK Manager).","Accept licenses if prompted: `sdkmanager --licenses`.","If the platform is intentionally unavailable (old build), lower the target in project.properties/config.xml to an installed one."],"exampleFix":"# before\n$ cordova requirements android\nPlease install the Android SDK Platform \"platforms;android-34\"\n\n# after\n$ sdkmanager \"platforms;android-34\"\n$ cordova requirements android","handlingStrategy":"validation","validationCode":"const target = getTarget(); // value of target= in platforms/android/project.properties, e.g. android-34\nconst installed = (await android_sdk.list_targets());\nif (!installed.includes(target)) {\n  throw new Error(`Run: sdkmanager \"platforms;${target}\"`);\n}","typeGuard":"const isInstalledTarget = (targets, target) => Array.isArray(targets) && targets.indexOf(target) >= 0;","tryCatchPattern":"try {\n  await check_reqs.check_android_target(projectRoot);\n} catch (e) {\n  if (/Please install the Android SDK Platform/.test(e.message)) {\n    const platform = /\"platforms;([^\"]+)\"/.exec(e.message)[1];\n    await execa('sdkmanager', [`platforms;${platform}`]); // auto-provision, then retry\n    return check_reqs.check_android_target(projectRoot);\n  }\n  throw e;\n}","preventionTips":["Commit a setup script that runs sdkmanager for the project's target platform in CI.","Run `sdkmanager --licenses` once per CI image so installs never block on prompts.","Keep the project target aligned with what your team's SDK images actually contain."],"tags":["android-sdk","sdk-platform","api-level","requirements-check"],"backgroundTag":"sdk-platform-not-installed","analyzedSha":"7c1e190064e349ffa4bbc6ac37b77cd773e4dbd3","analyzedAt":"2026-08-22T04:57:58.868Z","schemaVersion":2},"datasetVersion":"2026-08-22T09:17:25.309Z"}