Skip to content

Commit fccdfda

Browse files
[Tests] Bump default AGP to 9.1.0 for compileSdk 36 compatibility (#11043)
Fixes: #11042 ## Summary Bumps the default Android Gradle Plugin (AGP) version in the test infrastructure from **8.5.0** to **9.1.0** to fix Gradle test failures caused by an AGP/compileSdk version mismatch. ## Problem The default `AgpVersion` was hardcoded to `8.5.0` in `AndroidGradleProject.cs`, while `CompileSdk` is dynamically derived from `XABuildConfig.AndroidDefaultTargetDotnetApiLevel` (now **36**). AGP 8.5.0 only supports up to compileSdk 34, causing a Gradle configuration-cache serialization crash in `MergeJavaResourceTask` for tests like `BuildMultipleModules(MonoVM)`. See the [AGP compatibility table](https://d.android.com/r/tools/api-level-support) for details. ## Changes - **`AndroidGradleProject.cs`**: Bump default `AgpVersion` from `"8.5.0"` → `"9.1.0"` and set default `GradleVersion` to `"9.1.0"` - **`AndroidGradleProject.cs`**: Add optional `compileSdk` parameter to `CreateDefault` overload - **`AndroidGradleProjectTests.cs`**: Fix `BindLibraryWithMultipleGradleVersions` — the AGP 8.5.0 test case now uses `compileSdk = 34` (within its supported range), while the AGP 9.0.0 case uses the current default ## 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.' ## 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 <activity#com.example.TestModule.TestActivity> Co-authored-by: Jonathan Peppers <jonathan.peppers@microsoft.com>
1 parent fa20c91 commit fccdfda

3 files changed

Lines changed: 12 additions & 9 deletions

File tree

src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidGradleProjectTests.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -582,10 +582,11 @@ public void TestFacebook () {{
582582
static IEnumerable<object[]> GetAgpGradleVersionTestData ()
583583
{
584584
// AGP 8.5.0 with Gradle 8.7 - baseline, tests existing behavior
585-
yield return new object[] { "8.5.0", "8.7" };
585+
// AGP 8.5.0 only supports up to compileSdk 34
586+
yield return new object[] { "8.5.0", "8.7", 34 };
586587
// AGP 9.0.0 with Gradle 9.1.0 - tests the Gradle 9.x stricter Kotlin type checking fix
587588
// Note: Full version "9.1.0" is required for the download URL to work correctly
588-
yield return new object[] { "9.0.0", "9.1.0" };
589+
yield return new object[] { "9.0.0", "9.1.0", XABuildConfig.AndroidDefaultTargetDotnetApiLevel.Major };
589590
}
590591

591592
/// <summary>
@@ -595,9 +596,9 @@ static IEnumerable<object[]> GetAgpGradleVersionTestData ()
595596
/// </summary>
596597
[Test]
597598
[TestCaseSource (nameof (GetAgpGradleVersionTestData))]
598-
public void BindLibraryWithMultipleGradleVersions (string agpVersion, string gradleVersion)
599+
public void BindLibraryWithMultipleGradleVersions (string agpVersion, string gradleVersion, int compileSdk)
599600
{
600-
var gradleProject = AndroidGradleProject.CreateDefault (GradleTestProjectDir, agpVersion, gradleVersion);
601+
var gradleProject = AndroidGradleProject.CreateDefault (GradleTestProjectDir, agpVersion, gradleVersion, compileSdk: compileSdk);
601602
var gradleModule = gradleProject.Modules.First ();
602603
var moduleName = gradleModule.Name;
603604

src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/AndroidGradleModule.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ protected void onCreate(Bundle savedInstanceState) {{
115115
});
116116
AndroidManifestContent = $@"
117117
<application android:label=""App"">
118-
<activity android:name="".TestActivity"">
118+
<activity android:name="".TestActivity"" android:exported=""true"">
119119
<intent-filter>
120120
<action android:name=""android.intent.action.MAIN"" />
121121
<category android:name=""android.intent.category.LAUNCHER"" />

src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/AndroidGradleProject.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Collections.Generic;
33
using System.IO;
44

5+
using Xamarin.Android.Tools;
56

67
namespace Xamarin.ProjectTools
78
{
@@ -16,13 +17,13 @@ public class AndroidGradleProject
1617
/// <summary>
1718
/// Android Gradle Plugin version (e.g., "8.5.0", "9.0.0")
1819
/// </summary>
19-
public string AgpVersion { get; set; } = "8.5.0";
20+
public string AgpVersion { get; set; } = "9.1.0";
2021

2122
/// <summary>
2223
/// Gradle wrapper version to use (e.g., "8.12", "9.0").
23-
/// If null or empty, the Gradle wrapper version generated by gradle init is used.
24+
/// 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.
2425
/// </summary>
25-
public string? GradleVersion { get; set; }
26+
public string? GradleVersion { get; set; } = "9.3.1";
2627

2728
GradleCLI gradleCLI = new GradleCLI ();
2829

@@ -76,14 +77,15 @@ public static AndroidGradleProject CreateDefault (string projectDir, bool isAppl
7677
/// <summary>
7778
/// Creates a default Gradle project with specified AGP and Gradle versions.
7879
/// </summary>
79-
public static AndroidGradleProject CreateDefault (string projectDir, string agpVersion, string? gradleVersion, bool isApplication = false)
80+
public static AndroidGradleProject CreateDefault (string projectDir, string agpVersion, string? gradleVersion, bool isApplication = false, int? compileSdk = null)
8081
{
8182
var proj = new AndroidGradleProject (projectDir) {
8283
AgpVersion = agpVersion,
8384
GradleVersion = gradleVersion,
8485
Modules = {
8586
new AndroidGradleModule (Path.Combine (projectDir, "TestModule")) {
8687
IsApplication = isApplication,
88+
CompileSdk = compileSdk ?? XABuildConfig.AndroidDefaultTargetDotnetApiLevel.Major,
8789
},
8890
},
8991
};

0 commit comments

Comments
 (0)