Skip to content

Commit 1b511f9

Browse files
tondatjonpryor
authored andcommitted
[Xamarin.Android.Tools.AndroidSdk] Prefer OpenJDK path on Windows (#31)
Context: https://paper.dropbox.com/doc/OpenJDK-and-You--AH1yWKdVXgno~uXYfmcUAZTwAg-NoECAe2XkBQeoxFfGL6ea On Windows, as part of the Visual Studio installer, we can install a Microsoft-maintained OpenJDK. (This is done principally because Google's Android SDK tooling still requires JDK 1.8, and Oracle will be making it more difficult to download and install JDK 1.8 at a future point in time. We have deemed it easier to maintain and install our own OpenJDK 1.8 build so that Google's Android SDK tooling can continue to run.) Microsoft's OpenJDK install has priority when determining a default JDK for developers.
1 parent fc1a883 commit 1b511f9

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkWindows.cs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,19 @@ protected override IEnumerable<string> GetAllAvailableAndroidSdks ()
103103
}
104104

105105
protected override string GetJavaSdkPath ()
106+
{
107+
var preferredJdkPath = GetPreferredJdkPath ();
108+
if (!string.IsNullOrEmpty (preferredJdkPath))
109+
return preferredJdkPath;
110+
111+
var openJdkPath = GetOpenJdkPath ();
112+
if (!string.IsNullOrEmpty (openJdkPath))
113+
return openJdkPath;
114+
115+
return GetOracleJdkPath ();
116+
}
117+
118+
private string GetPreferredJdkPath ()
106119
{
107120
// check the user specified path
108121
var roots = new[] { RegistryEx.CurrentUser, RegistryEx.LocalMachine };
@@ -114,6 +127,26 @@ protected override string GetJavaSdkPath ()
114127
return RegistryEx.GetValueString (root, regKey, MDREG_JAVA_SDK, wow);
115128
}
116129

130+
return null;
131+
}
132+
133+
private string GetOpenJdkPath ()
134+
{
135+
var root = RegistryEx.LocalMachine;
136+
var wows = new[] { RegistryEx.Wow64.Key32, RegistryEx.Wow64.Key64 };
137+
var subKey = @"SOFTWARE\Microsoft\VisualStudio\Android";
138+
var valueName = "JavaHome";
139+
140+
foreach (var wow in wows) {
141+
if (CheckRegistryKeyForExecutable (root, subKey, valueName, wow, "bin", JarSigner))
142+
return RegistryEx.GetValueString (root, subKey, valueName, wow);
143+
}
144+
145+
return null;
146+
}
147+
148+
private string GetOracleJdkPath ()
149+
{
117150
string subkey = @"SOFTWARE\JavaSoft\Java Development Kit";
118151

119152
Logger (TraceLevel.Info, "Looking for Java 6 SDK...");

0 commit comments

Comments
 (0)