[Xamarin.Android.Tools.AndroidSdk] Prefer major versions#262
Merged
jonathanpeppers merged 1 commit intodotnet:mainfrom Sep 8, 2025
Merged
Conversation
Context: dotnet/android#10438 On dotnet/android#10438, many unit tests are failing due to the following warning: Xamarin.Android.Tooling.targets(88,5): warning XA4211: AndroidManifest.xml //uses-sdk/@android:targetSdkVersion 'CANARY' is less than $(TargetPlatformVersion) '36.0'. Using API-CANARY for ACW compilation. Looking at the diagnostic `.binlog`, we *also* see: Target "_ResolveSdks: …" in file "…\Xamarin.Android.Tooling.targets" from project "…\CodeBehindBuildTests.NET.csproj" (target "_ResolveMonoAndroidSdks" depends on it): … Added Item(s): _AndroidApiInfo= C:\a\_work\1\s\bin\Release\dotnet\packs\Microsoft.Android.Sdk.Windows\36.0.0-ci.pr.gh10438.318\tools\..\data\net10.0-android36.1\AndroidApiInfo.xml C:\a\_work\1\s\bin\Release\dotnet\packs\Microsoft.Android.Sdk.Windows\36.0.0-ci.pr.gh10438.318\tools\..\data\net10.0-android36\AndroidApiInfo.xml … Task "ResolveSdks" (TaskId:104) Task Parameter:AndroidSdkPath=C:\Android\android-sdk (TaskId:104) Task Parameter:MinimumSupportedJavaVersion=17.0 (TaskId:104) Task Parameter:JavaSdkPath=C:\hostedtoolcache\windows\Java_Temurin-Hotspot_jdk\17.0.16-8\x64 (TaskId:104) Task Parameter:LatestSupportedJavaVersion=21.0.99 (TaskId:104) Task Parameter: ReferenceAssemblyPaths= C:\a\_work\1\s\bin\Release\dotnet\packs\Microsoft.Android.Sdk.Windows\36.0.0-ci.pr.gh10438.318\data\net10.0-android36.1\ C:\a\_work\1\s\bin\Release\dotnet\packs\Microsoft.Android.Sdk.Windows\36.0.0-ci.pr.gh10438.318\data\net10.0-android36\ (TaskId:104) Task Parameter:CommandLineToolsVersion=19.0 (TaskId:104) The important thing being that the *preview* `net10.0-android36.1\AndroidApiInfo.xml` is being processed *before* the *stable* `net10.0-android36\AndroidApiInfo.xml`. This in turn means that when [`<GetJavaPlatformJar/>`][0] calls `AndroidVersions.GetIdFromApiLevel("36")`, it obtained the `AndroidVersion` instance for API-CANARY, *not* API-36! Task "GetJavaPlatformJar" (TaskId:135) Task Parameter:TargetFramework=net10.0-android (TaskId:135) Task Parameter:BuildingInsideVisualStudio=False (TaskId:135) Task Parameter:SupportedOSPlatformVersion=21.0 (TaskId:135) Task Parameter:AndroidManifest=C:\a\_work\1\a\TestRelease\09-06_00.12.08\temp\CodeBehind\SuccessfulAndroidXApp\Release\project\Properties\AndroidManifest.xml (TaskId:135) Task Parameter:DesignTimeBuild=False (TaskId:135) Task Parameter:TargetPlatformVersion=36.0 (TaskId:135) Task Parameter:AndroidSdkDirectory=C:\Android\android-sdk (TaskId:135) Task Parameter:AndroidSdkPlatform=36 (TaskId:135) 1:7>C:\…\Properties\AndroidManifest.xml : warning XA4211: AndroidManifest.xml //uses-sdk/@android:targetSdkVersion 'CANARY' is less than $(TargetPlatformVersion) '36.0'. Using API-CANARY for ACW compilation. Output Property: JavaPlatformJarPath=C:\Android\android-sdk\platforms\android-CANARY\android.jar (TaskId:135) Output Property: _AndroidTargetSdkVersion=36 (TaskId:135) Done executing task "GetJavaPlatformJar". (TaskId:135) Note input has `TargetPlatformVersion=36.0`, while output has `JavaPlatformJarPath=…\android-CANARY\android.jar`. Update `AndroidVersionsTests` so that the preview API-36.1 is listed *before* API-36, as a *stable* API level (6 months in the future!), and *also* add stable API-37 and unstable API-37.1, to better represent this scenario. Fix this by updating `AndroidVersions` to *sort* `AndroidVersions.installedVersions` by `AndroidVersion.VersionCodeFull`. This ensures that `new Version(36, 0)` precedes `new Version(36, 1)`, and in turn ensures that `AndroidVersions.GetIdFromApiLevel("36")` returns info for API-36 and *not* API-CANARY. [0]: https://github.com/dotnet/android/blob/976544ed415a16b1d44ab06f36f53513361307a5/src/Xamarin.Android.Build.Tasks/Tasks/GetJavaPlatformJar.cs#L120
jonpryor
added a commit
to jonpryor/xamarin-android
that referenced
this pull request
Sep 8, 2025
Context: dotnet/android-tools#262 Hopefully dotnet/android-tools#262 fixes the XA4211 seen on CI…
jonathanpeppers
approved these changes
Sep 8, 2025
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Context: dotnet/android#10438
On dotnet/android#10438, many unit tests are failing due to the following warning:
Looking at the diagnostic
.binlog, we also see:The important thing being that the preview
net10.0-android36.1\AndroidApiInfo.xmlis being processed before the stablenet10.0-android36\AndroidApiInfo.xml.This in turn means that when
<GetJavaPlatformJar/>callsAndroidVersions.GetIdFromApiLevel("36"), it obtained theAndroidVersioninstance for API-CANARY, not API-36!Note input has
TargetPlatformVersion=36.0, while output hasJavaPlatformJarPath=…\android-CANARY\android.jar.Update
AndroidVersionsTestsso that the preview API-36.1 is listed before API-36, as a stable API level (6 months in the future!), and also add stable API-37 and unstable API-37.1, to better represent this scenario.Fix this by updating
AndroidVersionsto sortAndroidVersions.installedVersionsbyAndroidVersion.VersionCodeFull. This ensures thatnew Version(36, 0)precedesnew Version(36, 1), and in turn ensures thatAndroidVersions.GetIdFromApiLevel("36")returns info for API-36 and not API-CANARY.