{"record":{"id":"5058528334fc750f","repo":"apache/cordova-android","slug":"failed-to-find-android-home-environment-variable-505852","errorCode":null,"errorMessage":"Failed to find 'ANDROID_HOME' environment variable. Try setting it manually.\nDetected 'avdmanager' command at ${parentDir} but does not appear to be within an Android SDK installation.\nTry reinstall Android SDK or update your PATH to include valid path to SDK","messagePattern":"Failed to find 'ANDROID_HOME' environment variable\\. Try setting it manually\\.\nDetected 'avdmanager' command at (.+?) but does not appear to be within an Android SDK installation\\.\nTry reinstall Android SDK or update your PATH to include valid path to SDK","errorType":"validation","errorClass":"CordovaError","httpStatus":null,"severity":"error","filePath":"lib/check_reqs.js","lineNumber":225,"sourceCode":"            let parentDir, grandParentDir;\n            if (adbInPath) {\n                parentDir = path.dirname(adbInPath);\n                grandParentDir = path.dirname(parentDir);\n                if (path.basename(parentDir) === 'platform-tools') {\n                    maybeSetAndroidHome(grandParentDir);\n                } else {\n                    throw new CordovaError('Failed to find \\'ANDROID_HOME\\' environment variable. Try setting it manually.\\n' +\n                        'Detected \\'adb\\' command at ' + parentDir + ' but no \\'platform-tools\\' directory found near.\\n' +\n                        'Try reinstall Android SDK or update your PATH to include valid path to SDK' + path.sep + 'platform-tools directory.');\n                }\n            }\n            if (avdmanagerInPath) {\n                let sdkPath = null;\n                if (/cmdline-tools/.test(avdmanagerInPath)) {\n                    sdkPath = path.resolve(avdmanagerInPath, '../../../..');\n                    maybeSetAndroidHome(sdkPath);\n                } else {\n                    throw new CordovaError('Failed to find \\'ANDROID_HOME\\' environment variable. Try setting it manually.\\n' +\n                        'Detected \\'avdmanager\\' command at ' + parentDir + ' but does not appear to be within an Android SDK installation.\\n' +\n                        'Try reinstall Android SDK or update your PATH to include valid path to SDK');\n                }\n            }\n        }\n        if (!process.env.ANDROID_HOME) {\n            throw new CordovaError('Failed to find \\'ANDROID_HOME\\' environment variable. Try setting it manually.\\n' +\n                'Failed to find \\'android\\' command in your \\'PATH\\'. Try update your \\'PATH\\' to include path to valid SDK directory.');\n        }\n        if (!fs.existsSync(process.env.ANDROID_HOME)) {\n            throw new CordovaError('\\'ANDROID_HOME\\' environment variable is set to non-existent path: ' + process.env.ANDROID_HOME +\n                '\\nTry update it manually to point to valid SDK directory.');\n        }\n        // Next let's make sure relevant parts of the SDK tooling is in our PATH\n        if (hasAndroidHome && !adbInPath) {\n            process.env.PATH += path.delimiter + path.join(process.env.ANDROID_HOME, 'platform-tools');\n        }\n        if (hasAndroidHome && !avdmanagerInPath) {","sourceCodeStart":207,"sourceCodeEnd":243,"githubUrl":"https://github.com/apache/cordova-android/blob/7c1e190064e349ffa4bbc6ac37b77cd773e4dbd3/lib/check_reqs.js#L207-L243","documentation":"SDK-detection branch when ANDROID_HOME is unset but avdmanager is on PATH: the SDK root is accepted only if avdmanager's path contains a 'cmdline-tools' segment (layout <sdk>/cmdline-tools/<ver>/bin, resolved with ../../../..). Thrown when avdmanager comes from somewhere else, e.g. the deprecated tools/ package of an old SDK layout.","triggerScenarios":"`cordova requirements android` / build with avdmanager under $ANDROID_HOME/tools/bin (pre-2019 SDK layout) or a copied/shimmed binary, while ANDROID_HOME/ANDROID_SDK_ROOT are unset.","commonSituations":"Legacy machines or CI images still carrying the old AndroidSDK 'tools' package; PATH entries added years ago pointing at tools/bin; SDK installed via old tarball.","solutions":["Install modern command-line tools: `sdkmanager \"cmdline-tools;latest\"` (or Android Studio > SDK Manager > SDK Tools).","Export ANDROID_HOME explicitly so inference is not needed.","Update PATH to $ANDROID_HOME/cmdline-tools/latest/bin and remove the legacy tools/bin entry."],"exampleFix":"# before\nexport PATH=\"$HOME/sdk/tools/bin:$PATH\"\n\n# after\nexport ANDROID_HOME=\"$HOME/Android/Sdk\"\nexport PATH=\"$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$PATH\"","handlingStrategy":"validation","validationCode":"const avdmanager = process.env.PATH.split(path.delimiter)\n  .map(d => path.join(d, 'avdmanager'))\n  .find(p => fs.existsSync(p));\n\nif (avdmanager && !/cmdline-tools/.test(avdmanager) && !process.env.ANDROID_HOME) {\n  throw new Error('avdmanager is from a legacy SDK layout - set ANDROID_HOME and install cmdline-tools;latest');\n}","typeGuard":null,"tryCatchPattern":"try {\n  await check_reqs.check_android();\n} catch (e) {\n  if (/avdmanager/.test(e.message)) {\n    // guide: sdkmanager \"cmdline-tools;latest\" + export ANDROID_HOME\n  }\n  throw e;\n}","preventionTips":["Keep SDK tooling on the modern layout: <sdk>/cmdline-tools/latest/bin plus <sdk>/platform-tools on PATH.","Remove legacy tools/bin PATH entries when upgrading old SDK installs.","Prefer setting ANDROID_HOME explicitly over relying on PATH inference."],"tags":["android-sdk","avdmanager","cmdline-tools","environment-variable","legacy-sdk"],"backgroundTag":"missing-env-var","analyzedSha":"7c1e190064e349ffa4bbc6ac37b77cd773e4dbd3","analyzedAt":"2026-08-22T04:57:58.868Z","schemaVersion":2},"datasetVersion":"2026-08-22T09:17:25.309Z"}