We have a couple of build machines running Windows 11 and Unity 2022.3.54f1 for one of our Unity projects, and one of our new installs refuses to build all Android players due to the NDK not being found.
Our build command:
C:\Program Files\Unity\Hub\Editor\2022.3.54f1\Editor\Unity.exe -batchmode -projectPath ./ -buildTarget Android -executeMethod GameBuilder.PerformAndroidBuild -logFile - -quit
The build script (with stuff like application identifiers, store data and similar removed):
public static void PerformAndroidBuild()
{
BuildPlayerOptions buildPlayerOptions = new BuildPlayerOptions();
// add all scenes
buildPlayerOptions.scenes = new string[EditorBuildSettings.scenes.Length];
for (int i = 0; i < EditorBuildSettings.scenes.Length; i++)
buildPlayerOptions.scenes[i] = EditorBuildSettings.scenes[i].path;
buildPlayerOptions.locationPathName = $"Builds/Android/BoV-{Application.version}.apk";
buildPlayerOptions.target = BuildTarget.Android;
buildPlayerOptions.options = BuildOptions.None;
string keystorePass = Environment.GetEnvironmentVariable("KEYSTORE_PASS");
string keyaliasPass = Environment.GetEnvironmentVariable("KEYALIAS_PASS");
// Set signing credentials
PlayerSettings.Android.keystoreName = "redacted";
PlayerSettings.Android.keystorePass = keystorePass;
PlayerSettings.Android.keyaliasName = "redacted";
PlayerSettings.Android.keyaliasPass = keyaliasPass;
BuildReport report = BuildPipeline.BuildPlayer(buildPlayerOptions);
BuildSummary summary = report.summary;
if (summary.result == BuildResult.Succeeded)
Debug.Log("Build succeeded: " + summary.totalSize + " bytes");
else if (summary.result == BuildResult.Failed)
Debug.Log("Build failed");
}
The error logs:
10:12:05 Android PostProcess task "Detecting Android SDK" took 2123.1438 ms
10:12:05 DisplayProgressbar: Detect Android NDK
10:12:05 Uploading Crash Report
10:12:05 UnityException: Android NDK not found
10:12:05 Android NDK not found or invalid. Please, fix it in Edit / Unity -> Preferences -> External Tools
10:12:05 UnityEditor.BuildPipeline:BuildPlayerInternalNoCheck(String[], String, String, BuildTargetGroup, BuildTarget, Int32, BuildOptions, String[], Boolean)
10:12:05 UnityEditor.BuildPipeline:BuildPlayerInternal(String[], String, String, BuildTargetGroup, BuildTarget, Int32, BuildOptions, String[])
10:12:05 UnityEditor.BuildPipeline:BuildPlayer(String[], String, String, BuildTargetGroup, BuildTarget, Int32, BuildOptions, String[])
10:12:05 UnityEditor.BuildPipeline:BuildPlayer(BuildPlayerOptions)
10:12:05 GameBuilder:PerformAndroidBuild(AppStore) (at Assets\Editor\GameBuilder.cs:69)
10:12:05 GameBuilder:PerformAndroidGooglePlayBuild() (at Assets\Editor\GameBuilder.cs:13)
Going to Preferences -> External Tools as written in the error message, there are no warnings or similar about the NDK.
Things we have tried:
Building from the editor on the machine works, and this exact setup works on all our other machines. What could we be missing?
Turns out that running the build command in an administrator environment works. I'm not sure if that is the intended solution since building from the editor works without administrator privileges, but running the terminal as administrator worked for us.