Skip to content

Commit 380e95e

Browse files
grendellojonpryorjonathanpeppersjpobstpjcollins
authored
[ci] Preliminary JDK11 Support (dotnet#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: dotnet#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 <[email protected]> Co-authored-by: Jonathan Peppers <[email protected]> Co-authored-by: Jonathan Pobst <[email protected]> Co-authored-by: Peter Collins <[email protected]>
1 parent a111f67 commit 380e95e

File tree

25 files changed

+216
-55
lines changed

25 files changed

+216
-55
lines changed

Documentation/release-notes/4567.md

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
- template: yaml-templates/use-dot-net.yaml
104105
parameters:
@@ -234,6 +235,10 @@ stages:
234235

235236
- template: yaml-templates\clean.yaml
236237

238+
- script: |
239+
echo ##vso[task.setvariable variable=JI_JAVA_HOME]%USERPROFILE%\android-toolchain\$(XA.Jdk11.Folder)
240+
displayName: set JI_JAVA_HOME
241+
237242
- template: yaml-templates\use-dot-net.yaml
238243
parameters:
239244
version: $(DotNetCorePreviewVersion)
@@ -896,7 +901,7 @@ stages:
896901
if (("$branchName" -ne "master") -and ("$branchName" -notlike "d16*")) {
897902
$branchName = "master"
898903
}
899-
Set-Location -Path $(System.DefaultWorkingDirectory)
904+
Set-Location -Path $(System.DefaultWorkingDirectory)/designer
900905
git checkout $branchName
901906
git submodule update -q --init --recursive
902907
displayName: Clone and update designer
@@ -905,19 +910,31 @@ stages:
905910
displayName: provision designer dependencies
906911
inputs:
907912
github_token: $(GitHub.Token)
908-
provisioning_script: $(System.DefaultWorkingDirectory)/bot-provisioning/dependencies.csx
913+
provisioning_script: $(System.DefaultWorkingDirectory)/designer/bot-provisioning/dependencies.csx
909914
provisioning_extra_args: -remove Xamarin.Android -vv DEVDIV_PKGS_NUGET_TOKEN=$(DevDiv.NuGet.Token) SECTOOLS_PKGS_NUGET_TOKEN=$(SecTools.NuGet.Token)
910915

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

913926
- template: designer/android-designer-build-mac.yaml@yaml
927+
parameters:
928+
designerSourcePath: $(System.DefaultWorkingDirectory)/designer
914929

915930
- template: designer/android-designer-tests.yaml@yaml
931+
parameters:
932+
designerSourcePath: $(System.DefaultWorkingDirectory)/designer
916933

917934
- task: CopyFiles@2
918935
displayName: 'Copy binlogs'
919936
inputs:
920-
sourceFolder: Xamarin.Designer.Android
937+
sourceFolder: $(System.DefaultWorkingDirectory)/designer/Xamarin.Designer.Android
921938
contents: '**/*.binlog'
922939
targetFolder: $(Build.ArtifactStagingDirectory)/designer-binlogs
923940
overWrite: true
@@ -960,7 +977,7 @@ stages:
960977
if (("$branchName" -ne "master") -and ("$branchName" -notlike "d16*")) {
961978
$branchName = "master"
962979
}
963-
Set-Location -Path $(System.DefaultWorkingDirectory)
980+
Set-Location -Path $(System.DefaultWorkingDirectory)\designer
964981
git checkout $branchName
965982
git submodule update -q --init --recursive
966983
displayName: Clone and update designer
@@ -969,19 +986,34 @@ stages:
969986
displayName: provision designer dependencies
970987
inputs:
971988
github_token: $(GitHub.Token)
972-
provisioning_script: $(System.DefaultWorkingDirectory)\bot-provisioning\dependencies.csx
989+
provisioning_script: $(System.DefaultWorkingDirectory)\designer\bot-provisioning\dependencies.csx
973990
provisioning_extra_args: -vv DEVDIV_PKGS_NUGET_TOKEN=$(DevDiv.NuGet.Token) SECTOOLS_PKGS_NUGET_TOKEN=$(SecTools.NuGet.Token)
974991

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

9791009
- template: designer\android-designer-tests.yaml@yaml
1010+
parameters:
1011+
designerSourcePath: $(System.DefaultWorkingDirectory)\designer
9801012

9811013
- task: CopyFiles@2
9821014
displayName: 'Copy binlogs'
9831015
inputs:
984-
sourceFolder: Xamarin.Designer.Android
1016+
sourceFolder: $(System.DefaultWorkingDirectory)/designer/Xamarin.Designer.Android
9851017
contents: '**/*.binlog'
9861018
targetFolder: $(Build.ArtifactStagingDirectory)/designer-binlogs
9871019
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
@@ -11,6 +12,15 @@ steps:
1112
parameters:
1213
provisionExtraArgs: ${{ parameters.provisionExtraArgs }}
1314

15+
- script: echo "##vso[task.setvariable variable=JI_JAVA_HOME]$HOME/Library/Android/$(XA.Jdk11.Folder)"
16+
displayName: set JI_JAVA_HOME
17+
condition: and(succeeded(), eq(variables['agent.os'], 'Darwin'))
18+
19+
- script: |
20+
echo ##vso[task.setvariable variable=JI_JAVA_HOME]%USERPROFILE%\android-toolchain\$(XA.Jdk11.Folder)
21+
displayName: set JI_JAVA_HOME
22+
condition: and(succeeded(), eq(variables['agent.os'], 'Windows_NT'))
23+
1424
- template: use-dot-net.yaml
1525
parameters:
1626
version: $(DotNetCorePreviewVersion)
@@ -33,20 +43,20 @@ steps:
3343
- task: MSBuild@1
3444
displayName: build xaprepare
3545
inputs:
36-
solution: build-tools/xaprepare/xaprepare.sln
46+
solution: ${{ parameters.xaSourcePath }}/build-tools/xaprepare/xaprepare.sln
3747
configuration: ${{ parameters.configuration }}
3848
msbuildArguments: /restore
3949

4050
- script: >
41-
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 &&
42-
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 &&
43-
mono build-tools/xaprepare/xaprepare/bin/${{ parameters.configuration }}/xaprepare.exe --s=AndroidToolchain --no-emoji --run-mode=CI
51+
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 &&
52+
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 &&
53+
mono ${{ parameters.xaSourcePath }}/build-tools/xaprepare/xaprepare/bin/${{ parameters.configuration }}/xaprepare.exe --s=AndroidToolchain --no-emoji --run-mode=CI
4454
displayName: install test dependencies
4555
condition: and(succeeded(), eq(variables['agent.os'], 'Darwin'))
4656

4757
- script: >
48-
$(System.DefaultWorkingDirectory)\build-tools\xaprepare\xaprepare\bin\${{ parameters.configuration }}\xaprepare.exe --s=Required --auto-provision=yes --no-emoji --run-mode=CI &&
49-
$(System.DefaultWorkingDirectory)\build-tools\xaprepare\xaprepare\bin\${{ parameters.configuration }}\xaprepare.exe --s=AndroidToolchain --no-emoji --run-mode=CI
58+
${{ parameters.xaSourcePath }}\build-tools\xaprepare\xaprepare\bin\${{ parameters.configuration }}\xaprepare.exe --s=Required --auto-provision=yes --no-emoji --run-mode=CI &&
59+
${{ parameters.xaSourcePath }}\build-tools\xaprepare\xaprepare\bin\${{ parameters.configuration }}\xaprepare.exe --s=AndroidToolchain --no-emoji --run-mode=CI
5060
displayName: install test dependencies
5161
condition: and(succeeded(), eq(variables['agent.os'], 'Windows_NT'))
5262

@@ -59,17 +69,17 @@ steps:
5969
displayName: nuget restore Xamarin.Android.Build.Tasks.sln
6070
inputs:
6171
command: custom
62-
arguments: restore Xamarin.Android.Build.Tasks.sln -ConfigFile NuGet.config
72+
arguments: restore ${{ parameters.xaSourcePath }}/Xamarin.Android.Build.Tasks.sln -ConfigFile ${{ parameters.xaSourcePath }}/NuGet.config -Verbosity detailed
6373

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

7080
- task: MSBuild@1
7181
displayName: build Xamarin.Android.Tools.BootstrapTasks.csproj
7282
inputs:
73-
solution: build-tools/xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks.csproj
83+
solution: ${{ parameters.xaSourcePath }}/build-tools/xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks.csproj
7484
configuration: ${{ parameters.configuration }}
75-
msbuildArguments: /restore /bl:$(System.DefaultWorkingDirectory)/bin/Test${{ parameters.configuration }}/BootstrapTasks.binlog
85+
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/MSBuild/Xamarin/Android/Xamarin.Android.Bindings.Documentation.targets

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,12 @@ This file is only used by binding projects. .NET 5 can eventually use it, once `
1616
<UsingTask TaskName="Xamarin.Android.Tasks.MDoc" AssemblyFile="Xamarin.Android.Build.Tasks.dll" />
1717
<UsingTask TaskName="Xamarin.Android.Tasks.Unzip" AssemblyFile="Xamarin.Android.Build.Tasks.dll" />
1818

19+
<PropertyGroup>
20+
<_JavadocSupported Condition=" $(_JdkVersion.StartsWith ('1.8')) ">True</_JavadocSupported>
21+
</PropertyGroup>
22+
1923
<Target Name="_ExtractJavaDocJars"
24+
Condition=" '$(_JavadocSupported)' == 'True' "
2025
Inputs="@(JavaDocJar)"
2126
Outputs="@(JavaDocJar->'$(IntermediateOutputPath)javadocs\%(FileName).stamp')">
2227
<Unzip
@@ -30,6 +35,7 @@ This file is only used by binding projects. .NET 5 can eventually use it, once `
3035
</Target>
3136

3237
<Target Name="_GenerateJavaDocFromSourceJars"
38+
Condition=" '$(_JavadocSupported)' == 'True' "
3339
Inputs="@(JavaSourceJar)"
3440
Outputs="@(JavaSourceJar->'$(IntermediateOutputPath)javadocs\%(FileName).stamp')">
3541
<Unzip
@@ -51,9 +57,9 @@ This file is only used by binding projects. .NET 5 can eventually use it, once `
5157
</Target>
5258

5359
<Target Name="BuildDocumentation"
60+
Condition=" '@(JavaDocIndex)' != '' And '$(_JavadocSupported)' == 'True' "
5461
Inputs="@(JavaDocIndex);@(IntermediateAssembly->'$(IntermediateOutputPath)%(filename).xml')"
55-
Outputs="@(IntermediateAssembly->'$(OutputPath)%(filename).xml')"
56-
Condition=" '@(JavaDocIndex)' != '' ">
62+
Outputs="@(IntermediateAssembly->'$(OutputPath)%(filename).xml')">
5763
<MDoc
5864
References="@(ReferencePath);@(ReferenceDependencyPaths)"
5965
TargetAssembly="@(IntermediateAssembly)"

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)