{"record":{"id":"3086c779de3ca034","repo":"dotnet/maui","slug":"java-home-environment-variable-isn-t-set-set-it-t","errorCode":null,"errorMessage":"JAVA_HOME environment variable isn't set. Set it to your JDK installation (e.g. \"C:\\Program Files (x86)\\Android\\openjdk\\jdk-17.0.8.101-hotspot\\bin\").","messagePattern":"JAVA_HOME environment variable isn't set\\. Set it to your JDK installation \\(e\\.g\\. \"C:\\\\Program Files \\(x86\\)\\\\Android\\\\openjdk\\\\jdk-17\\.0\\.8\\.101-hotspot\\\\bin\"\\)\\.","errorType":"exception","errorClass":"Exception","httpStatus":null,"severity":"error","filePath":"eng/devices/android.cake","lineNumber":16,"sourceCode":"#addin nuget:?package=Cake.Android.Adb&version=3.2.0\n#addin nuget:?package=Cake.Android.AvdManager&version=2.2.0\n#load \"./uitests-shared.cake\"\n\nconst int DefaultApiLevel = 30;\n\nconst int EmulatorStartProcessTimeoutSeconds = 1 * 60;\nconst int EmulatorBootTimeoutSeconds = 10 * 60;\nconst int EmulatorKillTimeoutSeconds = 1 * 60;\nconst int AdbCommandTimeoutSeconds = 30;\n\nInformation(\"Local Dotnet: {0}\", localDotnet);\n\nif (EnvironmentVariable(\"JAVA_HOME\") == null)\n{\n\tthrow new Exception(\"JAVA_HOME environment variable isn't set. Set it to your JDK installation (e.g. \\\"C:\\\\Program Files (x86)\\\\Android\\\\openjdk\\\\jdk-17.0.8.101-hotspot\\\\bin\\\").\");\n}\n\nstring DEFAULT_ANDROID_PROJECT = \"../../src/Controls/tests/TestCases.Android.Tests/Controls.TestCases.Android.Tests.csproj\";\nvar projectPath = Argument(\"project\", EnvironmentVariable(\"ANDROID_TEST_PROJECT\") ?? DEFAULT_ANDROID_PROJECT);\nvar testDevice = Argument(\"device\", EnvironmentVariable(\"ANDROID_TEST_DEVICE\") ?? $\"android-emulator-64_{DefaultApiLevel}\");\nvar targetFramework = Argument(\"tfm\", EnvironmentVariable(\"TARGET_FRAMEWORK\") ?? $\"{DotnetVersion}-android\");\nvar binlogArg = Argument(\"binlog\", EnvironmentVariable(\"ANDROID_TEST_BINLOG\") ?? \"\");\nvar testApp = Argument(\"app\", EnvironmentVariable(\"ANDROID_TEST_APP\") ?? \"\");\nvar testAppProjectPath = Argument(\"appproject\", EnvironmentVariable(\"ANDROID_TEST_APP_PROJECT\") ?? DEFAULT_APP_PROJECT);\nvar testAppPackageName = Argument(\"package\", EnvironmentVariable(\"ANDROID_TEST_APP_PACKAGE_NAME\") ?? \"\");\nvar testAppInstrumentation = Argument(\"instrumentation\", EnvironmentVariable(\"ANDROID_TEST_APP_INSTRUMENTATION\") ?? \"\");\nvar testResultsPath = Argument(\"results\", EnvironmentVariable(\"ANDROID_TEST_RESULTS\") ?? GetTestResultsDirectory()?.FullPath);\nvar deviceCleanupEnabled = Argument(\"cleanup\", true);\nvar useCoreClr = Argument(\"coreclr\", false);\n\n// Device details\nvar deviceSkin = Argument(\"skin\", EnvironmentVariable(\"ANDROID_TEST_SKIN\") ?? \"Nexus 5X\");\nvar androidAvd = \"\";","sourceCodeStart":1,"sourceCodeEnd":34,"githubUrl":"https://github.com/dotnet/maui/blob/f377ff1c5ee04d334d8a925f50c83a6b7afddf03/eng/devices/android.cake#L1-L34","documentation":"Thrown at the top of android.cake when EnvironmentVariable(\"JAVA_HOME\") is null. The Android toolchain (adb, emulator, gradle, the SDK build-tools) requires a JDK, located via JAVA_HOME, so the script aborts immediately before configuring any Android test variables.","triggerScenarios":"The JAVA_HOME environment variable is not set in the process environment at the time android.cake loads.","commonSituations":"A CI agent without a JDK env var; a local shell that didn't source the profile exporting JAVA_HOME; JAVA_HOME set in a different case or name; the JDK was installed by Android Studio but the env var wasn't configured separately.","solutions":["Set JAVA_HOME to a JDK 17+ installation root (e.g. the OpenJDK bundled with Android Studio) and ensure %JAVA_HOME%/bin is on PATH.","Export it in your shell profile and CI environment variables so it persists across sessions.","Verify with `java -version` and `echo $JAVA_HOME` in the same shell that runs cake.","On Windows, set it as a System environment variable, not just a User session variable, for service-based CI."],"exampleFix":"# before\n# (JAVA_HOME unset)\n# after\nexport JAVA_HOME=\"/usr/lib/jvm/java-17-openjdk\"\nexport PATH=\"$JAVA_HOME/bin:$PATH\"","handlingStrategy":"validation","validationCode":"if (string.IsNullOrEmpty(EnvironmentVariable(\"JAVA_HOME\"))) {\n    var candidate = IsRunningOnWindows() ? @\"C:\\Program Files\\Android\\Android Studio\\jbr\" : \"/usr/lib/jvm/java-17-openjdk\";\n    if (DirectoryExists(candidate)) Environment.SetEnvironmentVariable(\"JAVA_HOME\", candidate);\n    else throw new Exception(\"JAVA_HOME not set and no JDK found.\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Set JAVA_HOME in shell profiles and CI env for all platforms.","Pin a supported JDK version (17+) documented by the MAUI repo.","Verify `java -version` in the same shell that runs cake."],"tags":["android","java","java-home","environment","dependency","jdk"],"backgroundTag":null,"analyzedSha":"f377ff1c5ee04d334d8a925f50c83a6b7afddf03","analyzedAt":"2026-08-13T14:26:18.069Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}