Skip to content

Commit 6cd854c

Browse files
grendellojonpryorjonathanpeppersjpobstpjcollins
committed
[ci] Preliminary JDK11 Support (#4567)
Context: https://issuetracker.google.com/issues/150189789 Context: https://developer.android.com/preview/features#signature-scheme-v4 Context: https://developer.android.com/preview/features#incremental Preliminary JDK 11 support. The Android SDK Build-tools r30.0.0-rc4 package currently requires JDK 11 in order to use `apksigner.jar`: Task "AndroidApkSigner" Task Parameter:ApkSignerJar=C:\Users\dlab14\android-toolchain\sdk\build-tools\30.0.0-rc4\lib\apksigner.jar … Task Parameter:ToolPath=C:\Program Files\Android\jdk\microsoft_dist_openjdk_1.8.0.25\bin Task Parameter:ManifestFile=obj\Release\android\AndroidManifest.xml C:\Program Files\Android\jdk\microsoft_dist_openjdk_1.8.0.25\bin\java.exe -jar C:\Users\dlab14\android-toolchain\sdk\build-tools\30.0.0-rc4\lib\apksigner.jar sign --ks "C:\Users\dlab14\AppData\Local\Xamarin\Mono for Android\debug.keystore" --ks-pass pass:android --ks-key-alias androiddebugkey --key-pass pass:android --min-sdk-version 21 --max-sdk-version 29 "C:\A\vs2019xam00000Y-1\_work\1\s\bin\TestRelease\temp\BuildAotApplication AndÜmläüts_x86_64_True_True\bin\Release\UnnamedProject.UnnamedProject-Signed.apk" java.lang.UnsupportedClassVersionError: com/android/apksigner/ApkSignerTool has been compiled by a more recent version of the Java Runtime (class file version 53.0), this version of the Java Runtime only recognizes class file versions up to 52.0 at java.lang.ClassLoader.defineClass1(Native Method) … …\Xamarin.Android.Common.targets(2559,2): error MSB6006: "java.exe" exited with code 1. This could be triggered by using the Android SDK Manager to install Build-tools r30.0.0-rc4, then overriding the `$(AndroidSdkBuildToolsVersion)` MSBuild property in `App.csproj`: <PropertyGroup> <AndroidSdkBuildToolsVersion>30.0.0-rc4</AndroidSdkBuildToolsVersion> </PropertyGroup> Many previous commits have added support for JDK 11, e.g. d99facb, dcee2c8, 4742d50, 89f3dc1, and 895b7bc (among many others). Additionally, c8ab455 updated the build environment so that *both* JetBrains OpenJDK 1.8 and 11 were installed, though 1.8 was still used. Now it's time to "flip the build environment," and use JDK 11 to build the product, installers, and run (most) unit tests: * Update `azure-pipelines.yaml` and `azure-pipelines-oss.yaml` so that JDK 11 is used to build everything. * Update `xaprepare` so that when `$(JavaSdkDirectory)` isn't overridden, JDK 11 is used by default. * Override the `JI_JAVA_HOME` environment variable when preparing `external/Java.Interop` so that it uses the desired JDK. * Update the default `$(LatestSupportedJavaVersion)` value to 11.0.4, the version of the JDK we install. * Update the `<ValidateJavaVersions/>` task so that JDK 11 is required when `$(AndroidSdkBuildToolsVersion)` is >= r30. This will cause an XA0032 error if JDK 1.8 is used to build a project when `$(AndroidSdkBuildToolsVersion)` is >= r30. * `apksigner` from Build-tools r30 creates a new `.idsig` file next to the `.apk`. This is to enable a new `adb install --incremental` feature. Add the `.idsig` file to `@(FileWrites)`. * Update various unit test `.csproj` files to consistently `<Import/>` the `Configuration.props` file and use properties within it for default values. This in particular allowed building e.g. `samples/HelloWorld` to implicitly use JDK 11. * Increase "expected" times in `tests/msbuild-times-reference/MSBuildDeviceIntegration.csv` as JDK 11 appears to be slower than JDK 1.8 (🙁). * *Disable* support for `@(JavaSourceJar)` when JDK 11 is used. JDK 11 changes the HTML generated by the `javadoc` command, and we need to update our HTML parser to handle it. In the interest of expediency, disable this for now. The Android Designer integration tests continue to use JDK 1.8, as the Designer doesn't currently build under JDK 11. TODO: * Fix `@(JavaSourceJar)` support: #4789 * Allow Android Designer to work with JDK 11, run Designer integration tests using JDK 11. * Figure out how to not accidentally bitrot JDK 1.8 support. Co-authored-by: Jonathan Pryor <jonpryor@vt.edu> Co-authored-by: Jonathan Peppers <jonathan.peppers@microsoft.com> Co-authored-by: Jonathan Pobst <jonathan.pobst@microsoft.com> Co-authored-by: Peter Collins <pecolli@microsoft.com>
1 parent 4175950 commit 6cd854c

File tree

25 files changed

+219
-62
lines changed

25 files changed

+219
-62
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
### Preliminary JDK 11 Support
2+
3+
Xamarin.Android can now use JDK 11 to build libraries and applications.
4+
5+
JDK 11 is required in order to use Android SDK Build-tools r30,
6+
currently a release candidate. Future versions of the Android SDK
7+
*may* require JDK 11 for more scenarios. JDK 11 *is not required*
8+
at this point in time.
9+
10+
Project authors can try switching to JDK 11 now to prepare
11+
potential future JDK 11 requirements.
12+
13+
To do so:
14+
15+
1. Install JDK 11, for example
16+
[JetBrains Runtime](https://confluence.jetbrains.com/display/JBR/JetBrains+Runtime)
17+
18+
2. Tell Xamarin.Android to use JDK 11. This can be done within
19+
[Visual Studio](https://docs.microsoft.com/en-us/xamarin/android/troubleshooting/questions/update-jdk?tabs=windows),
20+
or can be done by setting the the `$(JavaSdkDirectory)` MSBuild
21+
property to refer to the root of the JDK installation from (1).
22+
23+
#### Known Issues
24+
25+
When JDK 11 is used, the `@(JavaSourceJar)` Build action is not supported,
26+
and binding projects will not parse Javadoc to determine parameter names.
27+
This may result in different parameter names for existing bindings projects.
28+
Authors of bindings projects affected by this change are recommended to
29+
continue to use JDK 8 to build the bindings projects until this issue is
30+
resolved.
31+
32+
The fix is being tracked as: https://github.com/xamarin/xamarin-android/issues/4789

build-tools/automation/azure-pipelines-oss.yaml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ pr:
1717
# Predefined variables: https://docs.microsoft.com/en-us/azure/devops/pipelines/build/variables?view=azure-devops&tabs=yaml
1818
# https://dev.azure.com/xamarin/public/_apps/hub/ms.vss-ciworkflow.build-ci-hub?_a=edit-build-definition&id=48&view=Tab_Variables
1919
variables:
20-
XA.Jdk.Folder: jdk-1.8
20+
XA.Jdk8.Folder: jdk-1.8
21+
XA.Jdk11.Folder: jdk-11
2122
XA.Build.MacOSSPool: VSEng-Xamarin-RedmondMacMojaveBuildPool-Android-OSS
2223
XA.Build.LinuxOSSPool: Xamarin-Android-Ubuntu-Public
2324

@@ -158,7 +159,7 @@ stages:
158159
- script: echo "##vso[task.setvariable variable=HOME]$(Agent.HomeDirectory)"
159160
displayName: set HOME to agent directory
160161

161-
- script: echo "##vso[task.setvariable variable=PATH]$PATH:$(Agent.HomeDirectory)/android-toolchain/$(XA.Jdk.Folder)/bin"
162+
- script: echo "##vso[task.setvariable variable=PATH]$PATH:$(Agent.HomeDirectory)/android-toolchain/$(XA.Jdk11.Folder)/bin"
162163
displayName: append jdk tools to PATH
163164

164165
- script: make jenkins V=1 PREPARE_CI_PR=1 PREPARE_AUTOPROVISION=1 CONFIGURATION=$(XA.Build.Configuration)

build-tools/automation/azure-pipelines.yaml

Lines changed: 43 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ resources:
4444

4545
# Global variables
4646
variables:
47-
XA.Jdk.Folder: jdk-1.8
47+
XA.Jdk8.Folder: jdk-1.8
48+
XA.Jdk11.Folder: jdk-11
4849
NuGetArtifactName: nupkgs
4950
InstallerArtifactName: installers
5051
TestAssembliesArtifactName: test-assemblies
@@ -97,8 +98,8 @@ stages:
9798
- checkout: self
9899
submodules: recursive
99100

100-
- script: echo "##vso[task.setvariable variable=JAVA_HOME]$HOME/Library/Android/$(XA.Jdk.Folder)"
101-
displayName: set JAVA_HOME
101+
- script: echo "##vso[task.setvariable variable=JI_JAVA_HOME]$HOME/Library/Android/$(XA.Jdk11.Folder)"
102+
displayName: set JI_JAVA_HOME
102103

103104
- task: UseDotNet@2
104105
displayName: install .NET Core $(DotNetCorePreviewVersion)
@@ -241,6 +242,10 @@ stages:
241242
inputs:
242243
version: $(DotNetCorePreviewVersion)
243244

245+
- script: |
246+
echo ##vso[task.setvariable variable=JI_JAVA_HOME]%USERPROFILE%\android-toolchain\$(XA.Jdk11.Folder)
247+
displayName: set JI_JAVA_HOME
248+
244249
- task: UseDotNet@2
245250
displayName: install .NET Core $(DotNetCoreVersion)
246251
inputs:
@@ -900,7 +905,7 @@ stages:
900905
if (("$branchName" -ne "master") -and ("$branchName" -notlike "d16*")) {
901906
$branchName = "master"
902907
}
903-
Set-Location -Path $(System.DefaultWorkingDirectory)
908+
Set-Location -Path $(System.DefaultWorkingDirectory)/designer
904909
git checkout $branchName
905910
git submodule update -q --init --recursive
906911
displayName: Clone and update designer
@@ -909,19 +914,31 @@ stages:
909914
displayName: provision designer dependencies
910915
inputs:
911916
github_token: $(GitHub.Token)
912-
provisioning_script: $(System.DefaultWorkingDirectory)/bot-provisioning/dependencies.csx
917+
provisioning_script: $(System.DefaultWorkingDirectory)/designer/bot-provisioning/dependencies.csx
913918
provisioning_extra_args: -remove Xamarin.Android -vv DEVDIV_PKGS_NUGET_TOKEN=$(DevDiv.NuGet.Token) SECTOOLS_PKGS_NUGET_TOKEN=$(SecTools.NuGet.Token)
914919

915-
- template: yaml-templates/run-installer.yaml
920+
- template: yaml-templates/setup-test-environment.yaml
921+
parameters:
922+
xaSourcePath: $(System.DefaultWorkingDirectory)/xamarin-android
923+
924+
- script: echo "##vso[task.setvariable variable=JavaSdkDirectory]$HOME/Library/Android/$(XA.Jdk8.Folder)"
925+
displayName: set JavaSdkDirectory
926+
927+
- script: echo "##vso[task.setvariable variable=JI_JAVA_HOME]$HOME/Library/Android/$(XA.Jdk8.Folder)"
928+
displayName: reset JI_JAVA_HOME for Designer
916929

917930
- template: designer/android-designer-build-mac.yaml@yaml
931+
parameters:
932+
designerSourcePath: $(System.DefaultWorkingDirectory)/designer
918933

919934
- template: designer/android-designer-tests.yaml@yaml
935+
parameters:
936+
designerSourcePath: $(System.DefaultWorkingDirectory)/designer
920937

921938
- task: CopyFiles@2
922939
displayName: 'Copy binlogs'
923940
inputs:
924-
sourceFolder: Xamarin.Designer.Android
941+
sourceFolder: $(System.DefaultWorkingDirectory)/designer/Xamarin.Designer.Android
925942
contents: '**/*.binlog'
926943
targetFolder: $(Build.ArtifactStagingDirectory)/designer-binlogs
927944
overWrite: true
@@ -964,7 +981,7 @@ stages:
964981
if (("$branchName" -ne "master") -and ("$branchName" -notlike "d16*")) {
965982
$branchName = "master"
966983
}
967-
Set-Location -Path $(System.DefaultWorkingDirectory)
984+
Set-Location -Path $(System.DefaultWorkingDirectory)\designer
968985
git checkout $branchName
969986
git submodule update -q --init --recursive
970987
displayName: Clone and update designer
@@ -973,19 +990,34 @@ stages:
973990
displayName: provision designer dependencies
974991
inputs:
975992
github_token: $(GitHub.Token)
976-
provisioning_script: $(System.DefaultWorkingDirectory)\bot-provisioning\dependencies.csx
993+
provisioning_script: $(System.DefaultWorkingDirectory)\designer\bot-provisioning\dependencies.csx
977994
provisioning_extra_args: -vv DEVDIV_PKGS_NUGET_TOKEN=$(DevDiv.NuGet.Token) SECTOOLS_PKGS_NUGET_TOKEN=$(SecTools.NuGet.Token)
978995

979-
- template: yaml-templates\run-installer.yaml
996+
- template: yaml-templates\setup-test-environment.yaml
997+
parameters:
998+
xaSourcePath: $(System.DefaultWorkingDirectory)\xamarin-android
999+
1000+
- script: echo "##vso[task.setvariable variable=JI_JAVA_HOME]$HOME/Library/Android/$(XA.Jdk8.Folder)"
1001+
displayName: reset JI_JAVA_HOME for Designer
1002+
condition: and(succeeded(), eq(variables['agent.os'], 'Darwin'))
1003+
1004+
- script: |
1005+
echo ##vso[task.setvariable variable=JI_JAVA_HOME]%USERPROFILE%\android-toolchain\$(XA.Jdk8.Folder)
1006+
displayName: reset JI_JAVA_HOME for Designer
1007+
condition: and(succeeded(), eq(variables['agent.os'], 'Windows_NT'))
9801008
9811009
- template: designer\android-designer-build-win.yaml@yaml
1010+
parameters:
1011+
designerSourcePath: $(System.DefaultWorkingDirectory)\designer
9821012

9831013
- template: designer\android-designer-tests.yaml@yaml
1014+
parameters:
1015+
designerSourcePath: $(System.DefaultWorkingDirectory)\designer
9841016

9851017
- task: CopyFiles@2
9861018
displayName: 'Copy binlogs'
9871019
inputs:
988-
sourceFolder: Xamarin.Designer.Android
1020+
sourceFolder: $(System.DefaultWorkingDirectory)/designer/Xamarin.Designer.Android
9891021
contents: '**/*.binlog'
9901022
targetFolder: $(Build.ArtifactStagingDirectory)/designer-binlogs
9911023
overWrite: true

build-tools/automation/yaml-templates/setup-test-environment.yaml

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
parameters:
22
configuration: $(XA.Build.Configuration)
33
provisionExtraArgs: -vv -f
4+
xaSourcePath: $(System.DefaultWorkingDirectory)
45

56
steps:
67
- checkout: self
@@ -16,6 +17,15 @@ steps:
1617
inputs:
1718
version: $(DotNetCorePreviewVersion)
1819

20+
- script: echo "##vso[task.setvariable variable=JI_JAVA_HOME]$HOME/Library/Android/$(XA.Jdk11.Folder)"
21+
displayName: set JI_JAVA_HOME
22+
condition: and(succeeded(), eq(variables['agent.os'], 'Darwin'))
23+
24+
- script: |
25+
echo ##vso[task.setvariable variable=JI_JAVA_HOME]%USERPROFILE%\android-toolchain\$(XA.Jdk11.Folder)
26+
displayName: set JI_JAVA_HOME
27+
condition: and(succeeded(), eq(variables['agent.os'], 'Windows_NT'))
28+
1929
- task: UseDotNet@2
2030
displayName: install .NET Core $(DotNetCoreVersion)
2131
inputs:
@@ -35,20 +45,20 @@ steps:
3545
- task: MSBuild@1
3646
displayName: build xaprepare
3747
inputs:
38-
solution: build-tools/xaprepare/xaprepare.sln
48+
solution: ${{ parameters.xaSourcePath }}/build-tools/xaprepare/xaprepare.sln
3949
configuration: ${{ parameters.configuration }}
4050
msbuildArguments: /restore
4151

4252
- script: >
43-
mono build-tools/xaprepare/xaprepare/bin/${{ parameters.configuration }}/xaprepare.exe --s=UpdateMono --auto-provision=yes --auto-provision-uses-sudo=yes --no-emoji --run-mode=CI &&
44-
mono build-tools/xaprepare/xaprepare/bin/${{ parameters.configuration }}/xaprepare.exe --s=Required --auto-provision=yes --auto-provision-uses-sudo=yes --no-emoji --run-mode=CI &&
45-
mono build-tools/xaprepare/xaprepare/bin/${{ parameters.configuration }}/xaprepare.exe --s=AndroidToolchain --no-emoji --run-mode=CI
53+
mono ${{ parameters.xaSourcePath }}/build-tools/xaprepare/xaprepare/bin/${{ parameters.configuration }}/xaprepare.exe --s=UpdateMono --auto-provision=yes --auto-provision-uses-sudo=yes --no-emoji --run-mode=CI &&
54+
mono ${{ parameters.xaSourcePath }}/build-tools/xaprepare/xaprepare/bin/${{ parameters.configuration }}/xaprepare.exe --s=Required --auto-provision=yes --auto-provision-uses-sudo=yes --no-emoji --run-mode=CI &&
55+
mono ${{ parameters.xaSourcePath }}/build-tools/xaprepare/xaprepare/bin/${{ parameters.configuration }}/xaprepare.exe --s=AndroidToolchain --no-emoji --run-mode=CI
4656
displayName: install test dependencies
4757
condition: and(succeeded(), eq(variables['agent.os'], 'Darwin'))
4858

4959
- script: >
50-
$(System.DefaultWorkingDirectory)\build-tools\xaprepare\xaprepare\bin\${{ parameters.configuration }}\xaprepare.exe --s=Required --auto-provision=yes --no-emoji --run-mode=CI &&
51-
$(System.DefaultWorkingDirectory)\build-tools\xaprepare\xaprepare\bin\${{ parameters.configuration }}\xaprepare.exe --s=AndroidToolchain --no-emoji --run-mode=CI
60+
${{ parameters.xaSourcePath }}\build-tools\xaprepare\xaprepare\bin\${{ parameters.configuration }}\xaprepare.exe --s=Required --auto-provision=yes --no-emoji --run-mode=CI &&
61+
${{ parameters.xaSourcePath }}\build-tools\xaprepare\xaprepare\bin\${{ parameters.configuration }}\xaprepare.exe --s=AndroidToolchain --no-emoji --run-mode=CI
5262
displayName: install test dependencies
5363
condition: and(succeeded(), eq(variables['agent.os'], 'Windows_NT'))
5464

@@ -61,17 +71,17 @@ steps:
6171
displayName: nuget restore Xamarin.Android.Build.Tasks.sln
6272
inputs:
6373
command: custom
64-
arguments: restore Xamarin.Android.Build.Tasks.sln -ConfigFile NuGet.config
74+
arguments: restore ${{ parameters.xaSourcePath }}/Xamarin.Android.Build.Tasks.sln -ConfigFile ${{ parameters.xaSourcePath }}/NuGet.config -Verbosity detailed
6575

6676
- task: NuGetCommand@2
6777
displayName: nuget restore Xamarin.Android-Tests.sln
6878
inputs:
6979
command: custom
70-
arguments: restore Xamarin.Android-Tests.sln -ConfigFile NuGet.config
80+
arguments: restore ${{ parameters.xaSourcePath }}/Xamarin.Android-Tests.sln -ConfigFile ${{ parameters.xaSourcePath }}/NuGet.config -Verbosity detailed
7181

7282
- task: MSBuild@1
7383
displayName: build Xamarin.Android.Tools.BootstrapTasks.csproj
7484
inputs:
75-
solution: build-tools/xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks.csproj
85+
solution: ${{ parameters.xaSourcePath }}/build-tools/xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks.csproj
7686
configuration: ${{ parameters.configuration }}
77-
msbuildArguments: /restore /bl:$(System.DefaultWorkingDirectory)/bin/Test${{ parameters.configuration }}/BootstrapTasks.binlog
87+
msbuildArguments: /restore /bl:${{ parameters.xaSourcePath }}/bin/Test${{ parameters.configuration }}/BootstrapTasks.binlog

build-tools/xaprepare/xaprepare/ConfigAndData/Configurables.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public static partial class Defaults
5454
{
5555
public static readonly char[] PropertyListSeparator = new [] { ':' };
5656

57-
public static readonly string JdkFolder = "jdk-1.8";
57+
public static readonly string JdkFolder = "jdk-11";
5858

5959
public static readonly Version JetBrainsOpenJDK11Version = new Version (Configurables.JetBrainsOpenJDK11Version);
6060
public static readonly Version JetBrainsOpenJDK11Release = new Version (Configurables.JetBrainsOpenJDK11Release);

build-tools/xaprepare/xaprepare/Steps/Step_PrepareExternalJavaInterop.Unix.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ async Task<bool> ExecuteOSSpecific (Context context)
2020
"prepare",
2121
"V=1",
2222
$"CONFIGURATION={context.Configuration}",
23+
$"JI_JAVA_HOME={context.OS.JavaHome}",
2324
$"JAVA_HOME={context.OS.JavaHome}",
2425
$"JI_MAX_JDK={Configurables.Defaults.MaxJDKVersion}",
2526
}

samples/HelloWorld/HelloLibrary/HelloLibrary.csproj

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,15 @@
1313
<AssemblyName>HelloLibrary</AssemblyName>
1414
<FileAlignment>512</FileAlignment>
1515
<AndroidApplication>false</AndroidApplication>
16-
<AndroidUseLatestPlatformSdk>True</AndroidUseLatestPlatformSdk>
1716
<DebugType>portable</DebugType>
1817
</PropertyGroup>
18+
<Import
19+
Condition="Exists('..\..\..\Configuration.props')"
20+
Project="..\..\..\Configuration.props"
21+
/>
22+
<PropertyGroup Condition="Exists('..\..\..\Configuration.props')">
23+
<TargetFrameworkVersion>$(AndroidFrameworkVersion)</TargetFrameworkVersion>
24+
</PropertyGroup>
1925
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
2026
<DebugSymbols>true</DebugSymbols>
2127
<Optimize>false</Optimize>

samples/HelloWorld/HelloWorld.csproj

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@
1414
<AndroidManifest>Properties\AndroidManifest.xml</AndroidManifest>
1515
<MonoAndroidResourcePrefix>Resources</MonoAndroidResourcePrefix>
1616
<MonoAndroidAssetsPrefix>Assets</MonoAndroidAssetsPrefix>
17-
<AndroidUseLatestPlatformSdk>true</AndroidUseLatestPlatformSdk>
18-
<TargetFrameworkVersion>v7.1</TargetFrameworkVersion>
1917
<AndroidDexTool Condition=" '$(AndroidDexTool)' == '' ">d8</AndroidDexTool>
2018
<DebugType>portable</DebugType>
2119
</PropertyGroup>

src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<PropertyGroup>
66
<UsingAndroidNETSdk>true</UsingAndroidNETSdk>
77
<AndroidCommandLineToolsVersion Condition=" '$(AndroidCommandLineToolsVersion)' == '' ">1.0</AndroidCommandLineToolsVersion>
8-
<LatestSupportedJavaVersion Condition=" '$(LatestSupportedJavaVersion)' == '' ">1.8.0</LatestSupportedJavaVersion>
8+
<LatestSupportedJavaVersion Condition=" '$(LatestSupportedJavaVersion)' == '' ">11.0.4</LatestSupportedJavaVersion>
99
<MinimumSupportedJavaVersion Condition=" '$(MinimumSupportedJavaVersion)' == '' ">1.8.0</MinimumSupportedJavaVersion>
1010
<EnableDefaultOutputPaths Condition=" '$(EnableDefaultOutputPaths)' == '' And '$(OS)' != 'Windows_NT' ">false</EnableDefaultOutputPaths>
1111
<EnableDefaultOutputPaths Condition=" '$(EnableDefaultOutputPaths)' == '' ">true</EnableDefaultOutputPaths>

src/Xamarin.Android.Build.Tasks/Tasks/Legacy/ValidateJavaVersion.cs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,13 @@ protected override bool ValidateJava (string javaExe, Regex versionRegex)
4848
Version GetJavaVersionForFramework ()
4949
{
5050
var apiLevel = MonoAndroidHelper.SupportedVersions.GetApiLevelFromFrameworkVersion (TargetFrameworkVersion);
51+
if (apiLevel >= 30) {
52+
// At present, it *looks like* API-R works with Build-tools r29, but
53+
// historically API-X requires Build-tools rX, so if/when API-30
54+
// requires Build-tools r30, it will require JDK11.
55+
// return new Version (11, 0);
56+
return new Version (1, 8);
57+
}
5158
if (apiLevel >= 24)
5259
return new Version (1, 8);
5360
else if (apiLevel == 23)
@@ -58,10 +65,18 @@ Version GetJavaVersionForFramework ()
5865

5966
Version GetJavaVersionForBuildTools ()
6067
{
68+
string buildToolsVersionString = AndroidSdkBuildToolsVersion;
69+
if (buildToolsVersionString != null) {
70+
int index = buildToolsVersionString.IndexOf ('-');
71+
if (index != -1)
72+
buildToolsVersionString = buildToolsVersionString.Substring (0, index);
73+
}
6174
Version buildTools;
62-
if (!Version.TryParse (AndroidSdkBuildToolsVersion, out buildTools)) {
75+
if (!Version.TryParse (buildToolsVersionString, out buildTools)) {
6376
return Version.Parse (LatestSupportedJavaVersion);
6477
}
78+
if (buildTools >= new Version (30, 0, 0))
79+
return new Version (11, 0);
6580
if (buildTools >= new Version (24, 0, 1))
6681
return new Version (1, 8);
6782
return Version.Parse (MinimumSupportedJavaVersion);

0 commit comments

Comments
 (0)