You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[Xamarin.Android.Tools.AndroidSdk] Prefer major versions (#262)
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
0 commit comments