@@ -30,8 +30,16 @@ public class AndroidSdk : IBuildTool
3030 public const string AndroidHomeEnvironmentVariableKey = "ANDROID_HOME" ;
3131
3232 private const string AndroidNdkHomeEnvironmentVariableKey = "ANDROID_NDK_HOME" ;
33+
34+ /// <summary>
35+ /// The environment variable key we use when overriding existing Unity editor preferences.
36+ /// We use UNITY_JAVA_HOME instead of JAVA_HOME because Unity will override JAVA_HOME to match it's editor preferences.
37+ /// </summary>
38+ private const string JavaHomeEnvironmentVariableKey = "UNITY_JAVA_HOME" ;
3339 private const string AndroidSdkRootEditorPrefsKey = "AndroidSdkRoot" ;
3440 private const string AndroidNdkRootEditorPrefsKey = "AndroidNdkRoot" ;
41+ private const string JdkPathEditorPrefsKey = "JdkPath" ;
42+ private const string JdkUseEmbeddedEditorPrefsKey = "JdkUseEmbedded" ;
3543
3644 private string _androidSdkRoot ;
3745
@@ -81,7 +89,7 @@ public virtual string RootPath
8189 }
8290
8391 /// <summary>
84- /// Override the AndroidSdkRoot/AndroidNdkRoot EditorPrefs with corresponding environment variables.
92+ /// Override the AndroidSdkRoot/AndroidNdkRoot/JdkPath EditorPrefs with corresponding environment variables.
8593 /// This is especially helpful for automated builds where the preferences may not be set.
8694 /// </summary>
8795 public static void OverrideEditorPreferences ( )
@@ -95,16 +103,28 @@ public static void OverrideEditorPreferences()
95103 OverrideEditorPreference ( AndroidNdkHomeEnvironmentVariableKey ,
96104 ( ) => UnityEditor . Android . AndroidExternalToolsSettings . ndkRootPath ,
97105 v => { UnityEditor . Android . AndroidExternalToolsSettings . ndkRootPath = v ; } ) ;
106+ OverrideEditorPreference ( JavaHomeEnvironmentVariableKey ,
107+ ( ) => UnityEditor . Android . AndroidExternalToolsSettings . jdkRootPath ,
108+ v => { UnityEditor . Android . AndroidExternalToolsSettings . jdkRootPath = v ; } ) ;
98109#else
99110 OverrideEditorPreference ( AndroidHomeEnvironmentVariableKey ,
100111 ( ) => EditorPrefs . GetString ( AndroidSdkRootEditorPrefsKey ) ,
101112 v => { EditorPrefs . SetString ( AndroidSdkRootEditorPrefsKey , v ) ; } ) ;
102113 OverrideEditorPreference ( AndroidNdkHomeEnvironmentVariableKey ,
103114 ( ) => EditorPrefs . GetString ( AndroidNdkRootEditorPrefsKey ) ,
104115 v => { EditorPrefs . SetString ( AndroidNdkRootEditorPrefsKey , v ) ; } ) ;
116+
117+ OverrideEditorPreference ( JavaHomeEnvironmentVariableKey ,
118+ ( ) => EditorPrefs . GetString ( JdkPathEditorPrefsKey ) ,
119+ v => { EditorPrefs . SetString ( JdkPathEditorPrefsKey , v ) ; } ) ;
120+
121+ // Older versions of Unity have an additional boolean preference that must be disabled.
122+ // Otherwise, Unity will use the JDK installed with the editor instead of the path we set in EditorPrefs.
123+ EditorPrefs . SetInt ( JdkUseEmbeddedEditorPrefsKey , 0 ) ;
105124#endif
106125 }
107126
127+ // TODO(b/189958664): Move this to a helper class and move the JDK portion of OverrideEditorPreferences into JavaUtils.
108128 private static void OverrideEditorPreference (
109129 string environmentVariableKey , Func < string > getPreference , Action < string > setPreference )
110130 {
0 commit comments