From 4664a6789ad778c5a97e1ea5a34e002aacb34e53 Mon Sep 17 00:00:00 2001 From: Simon Rozsival Date: Mon, 30 Mar 2026 13:52:12 +0200 Subject: [PATCH 1/5] [Tests] Bump default AGP to 9.1.0 for compileSdk 36 compatibility The default AgpVersion in the test infrastructure was hardcoded to 8.5.0, which only supports up to compileSdk 34. Since AndroidLatestStableApiLevel moved to 36, the Gradle tests fail with a configuration-cache serialization error in MergeJavaResourceTask. Changes: - Bump default AgpVersion from 8.5.0 to 9.1.0 - Set default GradleVersion to 9.1.0 (required by AGP 9.x) - Add compileSdk parameter to CreateDefault overload - Fix BindLibraryWithMultipleGradleVersions to use compileSdk=34 for AGP 8.5.0 Fixes https://github.com/dotnet/android/issues/11042 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../AndroidGradleProjectTests.cs | 9 +++++---- .../Xamarin.ProjectTools/Android/AndroidGradleProject.cs | 7 ++++--- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidGradleProjectTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidGradleProjectTests.cs index 7ac1aeefb41..28eeecd4d57 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidGradleProjectTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidGradleProjectTests.cs @@ -582,10 +582,11 @@ public void TestFacebook () {{ static IEnumerable GetAgpGradleVersionTestData () { // AGP 8.5.0 with Gradle 8.7 - baseline, tests existing behavior - yield return new object[] { "8.5.0", "8.7" }; + // AGP 8.5.0 only supports up to compileSdk 34 + yield return new object[] { "8.5.0", "8.7", 34 }; // AGP 9.0.0 with Gradle 9.1.0 - tests the Gradle 9.x stricter Kotlin type checking fix // Note: Full version "9.1.0" is required for the download URL to work correctly - yield return new object[] { "9.0.0", "9.1.0" }; + yield return new object[] { "9.0.0", "9.1.0", XABuildConfig.AndroidDefaultTargetDotnetApiLevel.Major }; } /// @@ -595,9 +596,9 @@ static IEnumerable GetAgpGradleVersionTestData () /// [Test] [TestCaseSource (nameof (GetAgpGradleVersionTestData))] - public void BindLibraryWithMultipleGradleVersions (string agpVersion, string gradleVersion) + public void BindLibraryWithMultipleGradleVersions (string agpVersion, string gradleVersion, int compileSdk) { - var gradleProject = AndroidGradleProject.CreateDefault (GradleTestProjectDir, agpVersion, gradleVersion); + var gradleProject = AndroidGradleProject.CreateDefault (GradleTestProjectDir, agpVersion, gradleVersion, compileSdk: compileSdk); var gradleModule = gradleProject.Modules.First (); var moduleName = gradleModule.Name; diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/AndroidGradleProject.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/AndroidGradleProject.cs index 8f1454bebdb..1dde09ed670 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/AndroidGradleProject.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/AndroidGradleProject.cs @@ -16,13 +16,13 @@ public class AndroidGradleProject /// /// Android Gradle Plugin version (e.g., "8.5.0", "9.0.0") /// - public string AgpVersion { get; set; } = "8.5.0"; + public string AgpVersion { get; set; } = "9.1.0"; /// /// Gradle wrapper version to use (e.g., "8.12", "9.0"). /// If null or empty, the Gradle wrapper version generated by gradle init is used. /// - public string? GradleVersion { get; set; } + public string? GradleVersion { get; set; } = "9.1.0"; GradleCLI gradleCLI = new GradleCLI (); @@ -76,7 +76,7 @@ public static AndroidGradleProject CreateDefault (string projectDir, bool isAppl /// /// Creates a default Gradle project with specified AGP and Gradle versions. /// - public static AndroidGradleProject CreateDefault (string projectDir, string agpVersion, string? gradleVersion, bool isApplication = false) + public static AndroidGradleProject CreateDefault (string projectDir, string agpVersion, string? gradleVersion, bool isApplication = false, int? compileSdk = null) { var proj = new AndroidGradleProject (projectDir) { AgpVersion = agpVersion, @@ -84,6 +84,7 @@ public static AndroidGradleProject CreateDefault (string projectDir, string agpV Modules = { new AndroidGradleModule (Path.Combine (projectDir, "TestModule")) { IsApplication = isApplication, + CompileSdk = compileSdk ?? XABuildConfig.AndroidDefaultTargetDotnetApiLevel.Major, }, }, }; From 8e1a6ffdc87fb8808a0dc23e4a11e588ac34edfc Mon Sep 17 00:00:00 2001 From: Simon Rozsival Date: Tue, 31 Mar 2026 11:11:45 +0200 Subject: [PATCH 2/5] Add missing 'using Xamarin.Android.Tools' to AndroidGradleProject.cs Fixes CS0103: 'XABuildConfig' does not exist in the current context. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Tests/Xamarin.ProjectTools/Android/AndroidGradleProject.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/AndroidGradleProject.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/AndroidGradleProject.cs index 1dde09ed670..a24174b4428 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/AndroidGradleProject.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/AndroidGradleProject.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.IO; +using Xamarin.Android.Tools; namespace Xamarin.ProjectTools { From 0308a32da5c94f1e463d651458b59ba186c5f7bb Mon Sep 17 00:00:00 2001 From: Simon Rozsival Date: Tue, 31 Mar 2026 11:23:10 +0200 Subject: [PATCH 3/5] Update GradleVersion XML doc to reflect new default Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Tests/Xamarin.ProjectTools/Android/AndroidGradleProject.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/AndroidGradleProject.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/AndroidGradleProject.cs index a24174b4428..ffa107686bf 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/AndroidGradleProject.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/AndroidGradleProject.cs @@ -21,7 +21,7 @@ public class AndroidGradleProject /// /// Gradle wrapper version to use (e.g., "8.12", "9.0"). - /// If null or empty, the Gradle wrapper version generated by gradle init is used. + /// Defaults to "9.1.0". If set to null or empty, the Gradle wrapper version generated by gradle init is used. /// public string? GradleVersion { get; set; } = "9.1.0"; From 9b9f6bd44841e81d1a3e7fa2a48bbec6ac164320 Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Wed, 1 Apr 2026 13:34:58 -0500 Subject: [PATCH 4/5] Bump default Gradle version to 9.3.1 (minimum for AGP 9.1.0) AGP 9.1.0 requires Gradle >= 9.3.1, not 9.1.0. The previous default caused all Gradle-based tests to fail with: 'Minimum supported Gradle version is 9.3.1. Current version is 9.1.0.' Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Xamarin.ProjectTools/Android/AndroidGradleProject.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/AndroidGradleProject.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/AndroidGradleProject.cs index ffa107686bf..cefda07e799 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/AndroidGradleProject.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/AndroidGradleProject.cs @@ -21,9 +21,9 @@ public class AndroidGradleProject /// /// Gradle wrapper version to use (e.g., "8.12", "9.0"). - /// Defaults to "9.1.0". If set to null or empty, the Gradle wrapper version generated by gradle init is used. + /// Defaults to "9.3.1" (minimum required by AGP 9.1.0). If set to null or empty, the Gradle wrapper version generated by gradle init is used. /// - public string? GradleVersion { get; set; } = "9.1.0"; + public string? GradleVersion { get; set; } = "9.3.1"; GradleCLI gradleCLI = new GradleCLI (); From 4a65fb4be334b4c178915292710ef5b01199ce61 Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Wed, 1 Apr 2026 16:44:09 -0500 Subject: [PATCH 5/5] Add android:exported="true" to test activity with intent filter AGP 9.1.0 with compileSdk 36 enforces the Android 12 requirement that activities with intent filters must explicitly declare android:exported. The SetupDefaultApp() manifest template was missing this attribute, causing BuildApp and BuildMultipleModules tests to fail with: android:exported needs to be explicitly specified for element Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Tests/Xamarin.ProjectTools/Android/AndroidGradleModule.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/AndroidGradleModule.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/AndroidGradleModule.cs index 47fad254fa3..ac1d2f246b3 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/AndroidGradleModule.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/AndroidGradleModule.cs @@ -115,7 +115,7 @@ protected void onCreate(Bundle savedInstanceState) {{ }); AndroidManifestContent = $@" - +