diff --git a/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Microsoft.Android.Sdk.Bindings.Gradle.targets b/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Microsoft.Android.Sdk.Bindings.Gradle.targets
index 5f7afd0fbf5..347e6312227 100644
--- a/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Microsoft.Android.Sdk.Bindings.Gradle.targets
+++ b/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Microsoft.Android.Sdk.Bindings.Gradle.targets
@@ -14,7 +14,8 @@ This file contains MSBuild targets that support building and operating on Androi
<_AGPOutDirAbs>$(IntermediateOutputPath)gradle/
<_AGPOutDirAbs Condition=" !$([System.IO.Path]::IsPathRooted('$(_AGPOutDirAbs)')) ">$(MSBuildProjectDirectory)/$(_AGPOutDirAbs)
- <_AGPInitScriptPath>$(_AGPOutDirAbs)net.android.init.gradle.kts
+
+ <_AGPInitScriptPath Condition=" '$(_AGPInitScriptPath)' == '' ">$(_AGPOutDirAbs)net.android.init.gradle.kts
<_BuildAndroidGradleProjectsStamp>$(_AndroidStampDirectory)_BuildAndroidGradleProjects.stamp
@@ -74,7 +75,9 @@ This file contains MSBuild targets that support building and operating on Androi
+
diff --git a/src/Xamarin.Android.Build.Tasks/Resources/net.android.init.gradle.kts b/src/Xamarin.Android.Build.Tasks/Resources/net.android.init.gradle.kts
index 853e261ffbe..6c2f7e407db 100644
--- a/src/Xamarin.Android.Build.Tasks/Resources/net.android.init.gradle.kts
+++ b/src/Xamarin.Android.Build.Tasks/Resources/net.android.init.gradle.kts
@@ -5,10 +5,10 @@
* https://docs.gradle.org/current/kotlin-dsl/gradle/org.gradle.api.invocation/-gradle/projects-loaded.html
*/
gradle.projectsLoaded {
- if (gradle.startParameter.projectProperties.containsKey("netAndroidBuildDirOverride")) {
+ gradle.startParameter.projectProperties["netAndroidBuildDirOverride"]?.let { buildDir ->
rootProject.allprojects {
afterEvaluate {
- layout.buildDirectory.set(file(gradle.startParameter.projectProperties["netAndroidBuildDirOverride"]))
+ layout.buildDirectory.set(file(buildDir))
}
}
}
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 2ecd6eaf883..ef5e6948fc3 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
@@ -574,5 +574,61 @@ public void TestFacebook () {{
FileAssert.Exists (Path.Combine (Root, builder.ProjectDirectory, proj.OutputPath, $"{moduleName}-release.aar"));
}
+ ///
+ /// Test case data for AGP/Gradle version combinations.
+ /// Gradle 9.x has stricter Kotlin type checking for null safety.
+ /// See: https://github.com/dotnet/android/issues/9818
+ ///
+ static IEnumerable