Skip to content

Commit a6a23bb

Browse files
authored
[Xamarin.Android.Tools.AndroidSdk] Default SDK component versions (#93)
Context: https://issuetracker.google.com/issues/150189789 Context: xamarin/androidtools@3f51412 We have discovered an issue when installing Visual Studio for Mac on macOS: certain versions of the installer will install the *latest* Android SDK Build-tools package, currently r30.0.0. This is a problem because recent versions of Xamarin.Android will use `apksigner` to sign `Mono.Android.Platform.ApiLevel_*.apk` files, so that they can be installed on API-30 targets -- API-30 targets no longer like `jarsigner`-signed `.apk` files -- but the `apksigner` included in the Build-tools r30 package requires JDK 9. Visual Studio for Mac is not ready to migrate to JDK >= 9. Consequently, on such installation environments, the Xamarin.Android shared runtime cannot be created, as `apksigner` won't run: Exception in thread "main" 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 What we need is a way for the macOS installer to share the same [default Android SDK component versions as Xamarin.Android itself][0]. This *could* plausibly be done by adding a git submodule reference from the xamarin/xamarin-android repo to the macOS installer, but this is undesirable. Instead, both the the xamarin-android repo and the installer repo's have existing git submodules graphs which include the xamarin/xamarin-android-tools repo. Add a new `Xamarin.Android.Tools.Versions.props` file, which contains the default Android SDK component versions, as an MSBuild project file: <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <AndroidSdkBuildToolsVersion Condition="'$(AndroidSdkBuildToolsVersion)' == ''">29.0.2</AndroidSdkBuildToolsVersion> … With this file in place, we can update the macOS installer to use `Xamarin.Android.Tools.Versions.props` as the "source of truth" for which versions to install. In particular, we'll set the default Build-tools version to 29.0.2, *not* 30.0.0, thus avoiding the problem with `apksigner` invocations. In the future, when `Xamarin.Android.Tools.Versions.props` is changed *all* repos referencing xamarin/xamarin-android-tools will need to be updated, so that everything can be on the same "page". [0]: https://github.com/xamarin/xamarin-android/blob/5f78740d74e19b235aad62c8ea8e314c9c78ddce/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.props.in#L18-L21
1 parent 32a1e2c commit a6a23bb

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

src/Xamarin.Android.Tools.AndroidSdk/Xamarin.Android.Tools.AndroidSdk.csproj

+5
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,9 @@
3737
</FilesToSign>
3838
</ItemGroup>
3939

40+
<ItemGroup>
41+
<None Update="Xamarin.Android.Tools.Versions.props">
42+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
43+
</None>
44+
</ItemGroup>
4045
</Project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?xml version="1.0" encoding="UTF-8" ?>
2+
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<PropertyGroup>
4+
<!--
5+
This file contains the versions of the tooling which will be installed
6+
by default on a users machine. They should be the latest stable versions
7+
which xamarin.android works with.
8+
9+
If this file is changed the submodule for androidtools should be updated,
10+
along with any other repo which references androidtools.
11+
-->
12+
<AndroidSdkBuildToolsVersion Condition="'$(AndroidSdkBuildToolsVersion)' == ''">29.0.2</AndroidSdkBuildToolsVersion>
13+
<AndroidCommandLineToolsVersion Condition=" '$(AndroidCommandLineToolsVersion)' == '' ">1.0</AndroidCommandLineToolsVersion>
14+
<AndroidSdkPlatformToolsVersion Condition="'$(AndroidSdkPlatformToolsVersion)' == ''">29.0.5</AndroidSdkPlatformToolsVersion>
15+
<AndroidSdkToolsVersion Condition="'$(AndroidSdkToolsVersion)' == ''">26.1.1</AndroidSdkToolsVersion>
16+
<AndroidSdkEmulatorVersion Condition="'$(AndroidSdkEmulatorVersion)' == ''"></AndroidSdkEmulatorVersion>
17+
<AndroidSdkPlatformVersion Condition="'$(AndroidSdkPlatformVersion)' == ''">android-29</AndroidSdkPlatformVersion>
18+
<AndroidNdkVersion Condition="'$(AndroidNdkVersion)' == ''">16.1</AndroidNdkVersion>
19+
</PropertyGroup>
20+
</Project>

0 commit comments

Comments
 (0)