From 091d591d5e0f347fd791a0601bdf2074b72936f1 Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Mon, 17 Nov 2025 12:57:13 +0100 Subject: [PATCH 01/28] DotNetBuildBinding works across all 3 runtimes --- .../Xamarin.Android.Build.Tests/BindingBuildTest.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs index f970281c0e2..2af88bb4156 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs @@ -10,6 +10,7 @@ using Microsoft.Android.Build.Tasks; using Microsoft.Build.Framework; using Xamarin.Tools.Zip; +using Xamarin.Android.Tasks; namespace Xamarin.Android.Build.Tests { @@ -17,11 +18,19 @@ namespace Xamarin.Android.Build.Tests public class BindingBuildTest : BaseTest { [Test] - public void DotNetBuildBinding () + public void DotNetBuildBinding ([Values] AndroidRuntime runtime) { + bool isRelease = runtime == AndroidRuntime.NativeAOT; + if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { + return; + } + var proj = new XamarinAndroidLibraryProject () { + IsRelease = isRelease, EnableDefaultItems = true, }; + proj.SetRuntime (runtime); + // Both transform files should be applied proj.Sources.Add (new AndroidItem.TransformFile ("Transforms.xml") { TextContent = () => From 698bd03819097cd53eb75df1dfe9588662613cdc Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Mon, 17 Nov 2025 13:05:03 +0100 Subject: [PATCH 02/28] BindingLibraryIncremental works across all 3 runtimes --- .../BindingBuildTest.cs | 31 +++++++++++++++++-- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs index 2af88bb4156..c6fdb6592bb 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs @@ -76,10 +76,34 @@ public void DotNetBuildBinding ([Values] AndroidRuntime runtime) }, }; + static IEnumerable Get_ClassParseOptions () + { + var ret = new List (); + + foreach (AndroidRuntime runtime in Enum.GetValues (typeof (AndroidRuntime))) { + AddTestData ("class-parse", runtime); + } + + return ret; + + void AddTestData (string classParser, AndroidRuntime runtime) + { + ret.Add (new object[] { + classParser, + runtime, + }); + } + } + [Test] - [TestCaseSource (nameof (ClassParseOptions))] - public void BindingLibraryIncremental (string classParser) + [TestCaseSource (nameof (Get_ClassParseOptions))] + public void BindingLibraryIncremental (string classParser, AndroidRuntime runtime) { + const bool isRelease = true; + if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { + return; + } + var targets = new List { "_ExportJarToXml", "GenerateBindings", @@ -90,8 +114,9 @@ public void BindingLibraryIncremental (string classParser) }; var proj = new XamarinAndroidBindingProject () { - IsRelease = true, + IsRelease = isRelease, }; + proj.SetRuntime (runtime); proj.Jars.Add (new AndroidItem.AndroidLibrary ("Jars\\svg-android.jar") { WebContent = "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/svg-android/svg-android.jar" }); From 4254ea36808ea1b9a7e60c452be04aacfe9ad722 Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Mon, 17 Nov 2025 13:08:44 +0100 Subject: [PATCH 03/28] CleanBasicBindingLibrary works across all 3 runtimes --- .../Xamarin.Android.Build.Tests/BindingBuildTest.cs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs index c6fdb6592bb..dbedb1a583b 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs @@ -171,12 +171,17 @@ public void BindingLibraryIncremental (string classParser, AndroidRuntime runtim } [Test] - [TestCaseSource (nameof (ClassParseOptions))] - public void CleanBasicBindingLibrary (string classParser) + [TestCaseSource (nameof (Get_ClassParseOptions))] + public void CleanBasicBindingLibrary (string classParser, AndroidRuntime runtime) { + const bool isRelease = true; + if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { + return; + } var proj = new XamarinAndroidBindingProject () { - IsRelease = true, + IsRelease = isRelease, }; + proj.SetRuntime (runtime); proj.Jars.Add (new AndroidItem.EmbeddedJar ("Jars\\svg-android.jar") { WebContent = "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/svg-android/svg-android.jar" }); From b52f243b8391da82b68343abb51f29d0a2fe8017 Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Mon, 17 Nov 2025 13:12:19 +0100 Subject: [PATCH 04/28] BuildAarBindingLibraryStandalone works across all 3 runtimes --- .../Xamarin.Android.Build.Tests/BindingBuildTest.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs index dbedb1a583b..b5d328f2a4f 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs @@ -204,9 +204,13 @@ public void CleanBasicBindingLibrary (string classParser, AndroidRuntime runtime } [Test] - [TestCaseSource (nameof (ClassParseOptions))] - public void BuildAarBindingLibraryStandalone (string classParser) + [TestCaseSource (nameof (Get_ClassParseOptions))] + public void BuildAarBindingLibraryStandalone (string classParser, AndroidRuntime runtime) { + const bool isRelease = true; + if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { + return; + } var proj = new XamarinAndroidBindingProject () { IsRelease = true, OtherBuildItems = { @@ -216,6 +220,7 @@ public void BuildAarBindingLibraryStandalone (string classParser) }, } }; + proj.SetRuntime (runtime); proj.Jars.Add (new AndroidItem.AndroidLibrary ("Jars\\material-menu-1.1.0.aar") { WebContent = "https://repo1.maven.org/maven2/com/balysv/material-menu/1.1.0/material-menu-1.1.0.aar" }); From 5de51c36fd40564796fe63a0cb43659fcf53599c Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Mon, 17 Nov 2025 13:16:08 +0100 Subject: [PATCH 05/28] BuildAarBindigLibraryWithNuGetPackageOfJar works across all 3 runtimes --- .../Xamarin.Android.Build.Tests/BindingBuildTest.cs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs index b5d328f2a4f..5f48fb1c3ff 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs @@ -212,7 +212,7 @@ public void BuildAarBindingLibraryStandalone (string classParser, AndroidRuntime return; } var proj = new XamarinAndroidBindingProject () { - IsRelease = true, + IsRelease = isRelease, OtherBuildItems = { new AndroidItem.AndroidAsset ("Assets\\asset1.txt") { TextContent = () => "Asset1", @@ -232,12 +232,17 @@ public void BuildAarBindingLibraryStandalone (string classParser, AndroidRuntime } [Test] - [TestCaseSource (nameof (ClassParseOptions))] - public void BuildAarBindigLibraryWithNuGetPackageOfJar (string classParser) + [TestCaseSource (nameof (Get_ClassParseOptions))] + public void BuildAarBindigLibraryWithNuGetPackageOfJar (string classParser, AndroidRuntime runtime) { + const bool isRelease = true; + if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { + return; + } var proj = new XamarinAndroidBindingProject () { - IsRelease = true, + IsRelease = isRelease, }; + proj.SetRuntime (runtime); proj.Jars.Add (new AndroidItem.LibraryProjectZip ("Jars\\android-crop-1.0.1.aar") { WebContent = "https://repo1.maven.org/maven2/com/soundcloud/android/android-crop/1.0.1/android-crop-1.0.1.aar" }); From fa985bc85fda549d928fdb7dde78487badc970fb Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Mon, 17 Nov 2025 13:19:28 +0100 Subject: [PATCH 06/28] BuildLibraryZipBindingLibraryWithAarOfJar works across all 3 runtimes --- .../Xamarin.Android.Build.Tests/BindingBuildTest.cs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs index 5f48fb1c3ff..4104b9031f3 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs @@ -260,13 +260,18 @@ public void BuildAarBindigLibraryWithNuGetPackageOfJar (string classParser, Andr } [Test] - [TestCaseSource (nameof (ClassParseOptions))] + [TestCaseSource (nameof (Get_ClassParseOptions))] [NonParallelizable] - public void BuildLibraryZipBindingLibraryWithAarOfJar (string classParser) + public void BuildLibraryZipBindingLibraryWithAarOfJar (string classParser, AndroidRuntime runtime) { + const bool isRelease = true; + if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { + return; + } var proj = new XamarinAndroidBindingProject () { - IsRelease = true, + IsRelease = isRelease, }; + proj.SetRuntime (runtime); proj.AndroidClassParser = classParser; proj.Jars.Add (new AndroidItem.LibraryProjectZip ("Jars\\aFileChooserBinaries.zip") { WebContentFileNameFromAzure = "aFileChooserBinaries.zip" From b4fd537773d957cf1102f63bc7338261d01303ac Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Mon, 17 Nov 2025 13:22:59 +0100 Subject: [PATCH 07/28] BindByteArrayInMethodParameter works across all 3 runtimes --- .../Xamarin.Android.Build.Tests/BindingBuildTest.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs index 4104b9031f3..7b32c4588e2 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs @@ -288,12 +288,17 @@ public void BuildLibraryZipBindingLibraryWithAarOfJar (string classParser, Andro [Test] [Category ("Minor")] - public void BindByteArrayInMethodParameter () + public void BindByteArrayInMethodParameter ([Values] AndroidRuntime runtime) { + const bool isRelease = true; + if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { + return; + } var proj = new XamarinAndroidBindingProject () { - IsRelease = true, + IsRelease = isRelease, AndroidClassParser = "class-parse", }; + proj.SetRuntime (runtime); proj.Jars.Add (new AndroidItem.EmbeddedJar ("Jars\\svg-android.jar") { WebContentFileNameFromAzure = "javaBindingIssue.jar" }); From 12df64a387ea7839d0347aac53338b9478a28a46 Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Mon, 17 Nov 2025 13:26:56 +0100 Subject: [PATCH 08/28] MergeAndroidManifest works across all 3 runtimes --- .../Xamarin.Android.Build.Tests/BindingBuildTest.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs index 7b32c4588e2..5dc42eb130a 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs @@ -308,13 +308,18 @@ public void BindByteArrayInMethodParameter ([Values] AndroidRuntime runtime) } [Test] - public void MergeAndroidManifest () + public void MergeAndroidManifest ([Values] AndroidRuntime runtime) { + const bool isRelease = true; + if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { + return; + } var path = Path.Combine ("temp", TestName); var binding = new XamarinAndroidBindingProject { ProjectName = "AdalBinding", - IsRelease = true, + IsRelease = isRelease, }; + binding.SetRuntime (runtime); binding.AndroidClassParser = "class-parse"; binding.Jars.Add (new AndroidItem.LibraryProjectZip ("Jars\\adal-1.0.7.aar") { WebContentFileNameFromAzure = "adal-1.0.7.aar" From 92b31e1078ec6586248e89d0912a1b6f893e83da Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Mon, 17 Nov 2025 13:29:59 +0100 Subject: [PATCH 09/28] AnnotationSupport works across all 3 runtimes --- .../Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs index 5dc42eb130a..93cbc5dde95 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs @@ -344,11 +344,15 @@ public void MergeAndroidManifest ([Values] AndroidRuntime runtime) } [Test] - public void AnnotationSupport () + public void AnnotationSupport ([Values] AndroidRuntime runtime) { + const bool isRelease = true; + if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { + return; + } // https://trello.com/c/a36dDVS6/37-support-for-annotations-zip var binding = new XamarinAndroidBindingProject () { - IsRelease = true, + IsRelease = isRelease, }; binding.AndroidClassParser = "class-parse"; binding.Jars.Add (new AndroidItem.LibraryProjectZip ("Jars\\mylibrary.aar") { From 9306a0ad61dc0bcf83d0e57e08a6cee068fbceb5 Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Mon, 17 Nov 2025 13:35:52 +0100 Subject: [PATCH 10/28] BindingCustomJavaApplicationClass works across all 3 runtimes --- .../BindingBuildTest.cs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs index 93cbc5dde95..6def5d5ca6b 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs @@ -367,21 +367,27 @@ public void AnnotationSupport ([Values] AndroidRuntime runtime) } [Test] - public void BindingCustomJavaApplicationClass () + public void BindingCustomJavaApplicationClass ([Values] AndroidRuntime runtime) { + const bool isRelease = true; + if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { + return; + } var binding = new XamarinAndroidBindingProject () { - IsRelease = true, + IsRelease = isRelease, ProjectName = "Binding", }; + binding.SetRuntime (runtime); binding.AndroidClassParser = "class-parse"; - using (var bindingBuilder = CreateDllBuilder ("temp/BindingCustomJavaApplicationClass/MultiDexBinding")) { + string path = Path.Combine ("temp", TestName); + using (var bindingBuilder = CreateDllBuilder (Path.Combine (path, "MultiDexBinding"))) { string multidexJar = Path.Combine (TestEnvironment.AndroidMSBuildDirectory, "android-support-multidex.jar"); binding.Jars.Add (new AndroidItem.EmbeddedJar (() => multidexJar)); bindingBuilder.Build (binding); var proj = new XamarinAndroidApplicationProject (); proj.OtherBuildItems.Add (new BuildItem ("ProjectReference", $"..\\MultiDexBinding\\{binding.ProjectName}.csproj")); - using (var b = CreateApkBuilder ("temp/BindingCustomJavaApplicationClass/App")) { + using (var b = CreateApkBuilder (Path.Combine (path, "App"))) { Assert.IsTrue (b.Build (proj), "Build should have succeeded."); } } From 78d61ea0e7d330fd953557c65a94721cf6c12158 Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Mon, 17 Nov 2025 13:41:19 +0100 Subject: [PATCH 11/28] BindngFilterUnsupportedNativeAbiLibraries works across all 3 runtimes --- .../BindingBuildTest.cs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs index 6def5d5ca6b..ebf3e6d0fda 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs @@ -385,7 +385,10 @@ public void BindingCustomJavaApplicationClass ([Values] AndroidRuntime runtime) string multidexJar = Path.Combine (TestEnvironment.AndroidMSBuildDirectory, "android-support-multidex.jar"); binding.Jars.Add (new AndroidItem.EmbeddedJar (() => multidexJar)); bindingBuilder.Build (binding); - var proj = new XamarinAndroidApplicationProject (); + var proj = new XamarinAndroidApplicationProject { + IsRelease = isRelease, + }; + proj.SetRuntime (runtime); proj.OtherBuildItems.Add (new BuildItem ("ProjectReference", $"..\\MultiDexBinding\\{binding.ProjectName}.csproj")); using (var b = CreateApkBuilder (Path.Combine (path, "App"))) { Assert.IsTrue (b.Build (proj), "Build should have succeeded."); @@ -394,12 +397,17 @@ public void BindingCustomJavaApplicationClass ([Values] AndroidRuntime runtime) } [Test] - public void BindngFilterUnsupportedNativeAbiLibraries () + public void BindngFilterUnsupportedNativeAbiLibraries ([Values] AndroidRuntime runtime) { + const bool isRelease = true; + if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { + return; + } var binding = new XamarinAndroidBindingProject () { ProjectName = "Binding", - IsRelease = true, + IsRelease = isRelease, }; + binding.SetRuntime (runtime); binding.AndroidClassParser = "class-parse"; binding.Jars.Add (new AndroidItem.LibraryProjectZip ("Jars\\mylibrary.aar") { WebContentFileNameFromAzure = "card.io-5.3.0.aar" @@ -408,8 +416,10 @@ public void BindngFilterUnsupportedNativeAbiLibraries () using (var bindingBuilder = CreateDllBuilder (Path.Combine (path, binding.ProjectName))) { Assert.IsTrue (bindingBuilder.Build (binding), "binding build should have succeeded"); var proj = new XamarinAndroidApplicationProject { + IsRelease = isRelease, ProjectName = "App" }; + proj.SetRuntime (runtime); proj.OtherBuildItems.Add (new BuildItem ("ProjectReference", $"..\\{binding.ProjectName}\\{binding.ProjectName}.csproj")); using (var b = CreateApkBuilder (Path.Combine (path, proj.ProjectName))) { Assert.IsTrue (b.Build (proj), "Build should have succeeded."); From 085055e445e03cf9aec3386ef91a3cf69a875d26 Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Mon, 17 Nov 2025 13:45:15 +0100 Subject: [PATCH 12/28] BindingCheckHiddenFiles works across all 3 runtimes --- .../Xamarin.Android.Build.Tests/BindingBuildTest.cs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs index ebf3e6d0fda..fd15f8ab9ce 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs @@ -428,12 +428,17 @@ public void BindngFilterUnsupportedNativeAbiLibraries ([Values] AndroidRuntime r } [Test] - public void BindingCheckHiddenFiles () + public void BindingCheckHiddenFiles ([Values] AndroidRuntime runtime) { + const bool isRelease = true; + if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { + return; + } var binding = new XamarinAndroidBindingProject { ProjectName = "Binding", - IsRelease = true, + IsRelease = isRelease, }; + binding.SetRuntime (runtime); binding.AndroidClassParser = "class-parse"; binding.Jars.Add (new AndroidItem.LibraryProjectZip ("Jars\\mylibrary.aar") { WebContentFileNameFromAzure = "mylibrary.aar" @@ -445,8 +450,10 @@ public void BindingCheckHiddenFiles () using (var bindingBuilder = CreateDllBuilder (Path.Combine (path, binding.ProjectName))) { Assert.IsTrue (bindingBuilder.Build (binding), "binding build should have succeeded"); var proj = new XamarinAndroidApplicationProject { + IsRelease = isRelease, ProjectName = "App", }; + proj.SetRuntime (runtime); proj.OtherBuildItems.Add (new BuildItem ("ProjectReference", $"..\\{binding.ProjectName}\\{binding.ProjectName}.csproj")); proj.AndroidManifest = $@" From 8be026e65303ebec07e5fe81d81af02848ffed14 Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Mon, 17 Nov 2025 13:51:04 +0100 Subject: [PATCH 13/28] BindingDoNotPackage works across all 3 runtimes --- .../BindingBuildTest.cs | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs index fd15f8ab9ce..dd39beaca18 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs @@ -480,10 +480,14 @@ public void BindingCheckHiddenFiles ([Values] AndroidRuntime runtime) } [Test] - public void BindingDoNotPackage () + public void BindingDoNotPackage ([Values] AndroidRuntime runtime) { + const bool isRelease = true; + if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { + return; + } var binding = new XamarinAndroidBindingProject () { - IsRelease = true, + IsRelease = isRelease, Jars = { new AndroidItem.EmbeddedJar ("Jars\\svg-android.jar") { WebContentFileNameFromAzure = "javaBindingIssue.jar" @@ -494,10 +498,14 @@ public void BindingDoNotPackage () [assembly:DoNotPackage(""svg-android.jar"")] " }; + binding.SetRuntime (runtime); binding.AndroidClassParser = "class-parse"; - using (var bindingBuilder = CreateDllBuilder (Path.Combine ("temp", "BindingDoNotPackage", "Binding"))) { + + string path = Path.Combine ("temp", TestName); + using (var bindingBuilder = CreateDllBuilder (Path.Combine (path, "Binding"))) { Assert.IsTrue (bindingBuilder.Build (binding), "binding build should have succeeded"); var proj = new XamarinAndroidApplicationProject () { + IsRelease = isRelease, ProjectName = "App1", OtherBuildItems = { new BuildItem ("ProjectReference", "..\\Binding\\UnnamedProject.csproj") @@ -523,7 +531,8 @@ public void OnUpdate (Java.Lang.Object p0) "} } }; - using (var b = CreateApkBuilder (Path.Combine ("temp", "BindingDoNotPackage", "App"))) { + proj.SetRuntime (runtime); + using (var b = CreateApkBuilder (Path.Combine (path, "App"))) { Assert.IsTrue (b.Build (proj), "Build should have succeeded."); } } From 3c44b86d7f4165c6b84112504415bb54dd399d3d Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Mon, 17 Nov 2025 13:54:31 +0100 Subject: [PATCH 14/28] AndroidLibraryPackFalseExcludesJarFromAar works across all 3 runtimes --- .../Xamarin.Android.Build.Tests/BindingBuildTest.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs index dd39beaca18..e788f92c334 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs @@ -539,11 +539,16 @@ public void OnUpdate (Java.Lang.Object p0) } [Test] - public void AndroidLibraryPackFalseExcludesJarFromAar () + public void AndroidLibraryPackFalseExcludesJarFromAar ([Values] AndroidRuntime runtime) { + const bool isRelease = true; + if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { + return; + } var binding = new XamarinAndroidBindingProject () { - IsRelease = true, + IsRelease = isRelease, }; + binding.SetRuntime (runtime); // Add a jar with Pack='false' - should not be included in AAR binding.OtherBuildItems.Add (new AndroidItem.AndroidLibrary ("Jars\\test-pack-false.jar") { BinaryContent = () => ResourceData.JavaSourceJarTestJar, From 90df257daee65734d2828975aa6c4cad6ae631b7 Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Mon, 17 Nov 2025 13:58:22 +0100 Subject: [PATCH 15/28] RemoveEventHandlerResolution works across all 3 runtimes --- .../Xamarin.Android.Build.Tests/BindingBuildTest.cs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs index e788f92c334..914b1632009 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs @@ -581,10 +581,14 @@ public void AndroidLibraryPackFalseExcludesJarFromAar ([Values] AndroidRuntime r } [Test] - public void RemoveEventHandlerResolution () + public void RemoveEventHandlerResolution ([Values] AndroidRuntime runtime) { + const bool isRelease = true; + if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { + return; + } var binding = new XamarinAndroidBindingProject () { - IsRelease = true, + IsRelease = isRelease, Jars = { new AndroidItem.LibraryProjectZip ("Jars\\ActionBarSherlock-4.3.1.zip") { WebContent = "https://github.com/xamarin/monodroid-samples/blob/archived-xamarin/ActionBarSherlock/ActionBarSherlock/Jars/ActionBarSherlock-4.3.1.zip?raw=true" @@ -599,7 +603,8 @@ public void RemoveEventHandlerResolution () Xamarin.ActionbarSherlockBinding.Views ", }; - using (var bindingBuilder = CreateDllBuilder (Path.Combine ("temp", "RemoveEventHandlerResolution", "Binding"))) { + binding.SetRuntime (runtime); + using (var bindingBuilder = CreateDllBuilder (Path.Combine ("temp", TestName, "Binding"))) { Assert.IsTrue (bindingBuilder.Build (binding), "binding build should have succeeded"); } } From f8bb3d50d35c0b192ecfd68ff16ecf16dd2f9d09 Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Mon, 17 Nov 2025 14:01:45 +0100 Subject: [PATCH 16/28] JavaSourceJar works across all 3 runtimes --- .../Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs index 914b1632009..c69ecb5cecb 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs @@ -610,11 +610,17 @@ public void RemoveEventHandlerResolution ([Values] AndroidRuntime runtime) } [Test] - public void JavaSourceJar () + public void JavaSourceJar ([Values] AndroidRuntime runtime) { + const bool isRelease = true; + if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { + return; + } var binding = new XamarinAndroidBindingProject () { + IsRelease = isRelease, AndroidClassParser = "class-parse", }; + binding.SetRuntime (runtime); binding.SetProperty ("DocumentationFile", "UnnamedProject.xml"); binding.SetProperty ("AndroidJavadocVerbosity", "full"); using (var bindingBuilder = CreateDllBuilder ()) { From 1683d14bac09c605bfb23b9bea437a8933cc1e9f Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Mon, 17 Nov 2025 14:07:03 +0100 Subject: [PATCH 17/28] AppWithSingleJar works across all 3 runtimes --- .../Xamarin.Android.Build.Tests/BindingBuildTest.cs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs index c69ecb5cecb..9be6ec3c115 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs @@ -649,9 +649,14 @@ public void JavaSourceJar ([Values] AndroidRuntime runtime) } [Test] - public void AppWithSingleJar () + public void AppWithSingleJar ([Values] AndroidRuntime runtime) { + bool isRelease = runtime == AndroidRuntime.NativeAOT; + if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { + return; + } var proj = new XamarinAndroidApplicationProject { + IsRelease = isRelease, EnableDefaultItems = true, Sources = { new AndroidItem.AndroidLibrary ("Jars\\javaclasses.jar") { @@ -659,8 +664,9 @@ public void AppWithSingleJar () } } }; + proj.SetRuntime (runtime); - var builder = CreateApkBuilder (); + using var builder = CreateApkBuilder (); Assert.IsTrue (builder.Build (proj), "first build should succeed"); Assert.IsTrue (builder.DesignTimeBuild (proj), "Design time build should succeed."); Assert.IsFalse (builder.Output.IsTargetSkipped ("AddBindingsToCompile"), "AddBindingsToCompile should run."); From 455952f944987b47068798b264e259553ee1f1f6 Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Mon, 17 Nov 2025 15:21:39 +0100 Subject: [PATCH 18/28] DesignTimeBuild works across all 3 runtimes --- .../Xamarin.Android.Build.Tests/BindingBuildTest.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs index 9be6ec3c115..77e8f4cddb9 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs @@ -690,10 +690,15 @@ public void AppWithSingleJar ([Values] AndroidRuntime runtime) } [Test] - [TestCaseSource (nameof (ClassParseOptions))] - public void DesignTimeBuild (string classParser) + [TestCaseSource (nameof (Get_ClassParseOptions))] + public void DesignTimeBuild (string classParser, [Values] AndroidRuntime runtime) { + bool isRelease = runtime == AndroidRuntime.NativeAOT; + if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { + return; + } var proj = new XamarinAndroidBindingProject { + IsRelease = isRelease, AndroidClassParser = classParser }; proj.Jars.Add (new AndroidItem.LibraryProjectZip ("Jars\\material-menu-1.1.0.aar") { From e40d76fdd656b1a93c9513cfad128f12d5556aaa Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Mon, 17 Nov 2025 15:25:08 +0100 Subject: [PATCH 19/28] NullableReferenceTypes works across all 3 runtimes --- .../Xamarin.Android.Build.Tests/BindingBuildTest.cs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs index 77e8f4cddb9..062d6f28b9b 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs @@ -701,6 +701,7 @@ public void DesignTimeBuild (string classParser, [Values] AndroidRuntime runtime IsRelease = isRelease, AndroidClassParser = classParser }; + proj.SetRuntime (runtime); proj.Jars.Add (new AndroidItem.LibraryProjectZip ("Jars\\material-menu-1.1.0.aar") { WebContent = "https://repo1.maven.org/maven2/com/balysv/material-menu/1.1.0/material-menu-1.1.0.aar" }); @@ -721,10 +722,15 @@ public void DesignTimeBuild (string classParser, [Values] AndroidRuntime runtime } [Test] - [TestCaseSource (nameof (ClassParseOptions))] - public void NullableReferenceTypes (string classParser) + [TestCaseSource (nameof (Get_ClassParseOptions))] + public void NullableReferenceTypes (string classParser, [Values] AndroidRuntime runtime) { + bool isRelease = runtime == AndroidRuntime.NativeAOT; + if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { + return; + } var proj = new XamarinAndroidBindingProject { + IsRelease = isRelease, AndroidClassParser = classParser, Jars = { new AndroidItem.EmbeddedJar ("foo.jar") { @@ -732,6 +738,7 @@ public void NullableReferenceTypes (string classParser) } } }; + proj.SetRuntime (runtime); proj.SetProperty ("Nullable", "enable"); using (var b = CreateDllBuilder ()) { Assert.IsTrue (b.Build (proj), "Build should have succeeded."); From 967e0b3c8982fcedeb8183b2def968aee48147b7 Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Mon, 17 Nov 2025 15:28:33 +0100 Subject: [PATCH 20/28] BindDefaultInterfaceMethods works across all 3 runtimes --- .../Xamarin.Android.Build.Tests/BindingBuildTest.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs index 062d6f28b9b..e7826f4c36a 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs @@ -751,12 +751,17 @@ public void NullableReferenceTypes (string classParser, [Values] AndroidRuntime } [Test] - [TestCaseSource (nameof (ClassParseOptions))] - public void BindDefaultInterfaceMethods (string classParser) + [TestCaseSource (nameof (Get_ClassParseOptions))] + public void BindDefaultInterfaceMethods (string classParser, [Values] AndroidRuntime runtime) { + const bool isRelease = true; + if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { + return; + } var proj = new XamarinAndroidBindingProject { IsRelease = true, }; + proj.SetRuntime (runtime); // The sources for the .jar is in the jar itself. string classesJarBase64 = @" From ba047e750d0aa7c351aa61c6b142c0594645014a Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Mon, 17 Nov 2025 15:35:46 +0100 Subject: [PATCH 21/28] NothingToBind works across all 3 runtimes --- .../Xamarin.Android.Build.Tests/BindingBuildTest.cs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs index e7826f4c36a..7ecfe3b8531 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs @@ -813,12 +813,18 @@ public void BindDefaultInterfaceMethods (string classParser, [Values] AndroidRun } [Test] - [TestCaseSource (nameof (ClassParseOptions))] - public void NothingToBind (string classParser) + [TestCaseSource (nameof (Get_ClassParseOptions))] + public void NothingToBind (string classParser, [Values] AndroidRuntime runtime) { + bool isRelease = runtime == AndroidRuntime.NativeAOT; + if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { + return; + } var proj = new XamarinAndroidBindingProject { + IsRelease = isRelease, AndroidClassParser = classParser, }; + proj.SetRuntime (runtime); using (var b = CreateDllBuilder ()) { Assert.IsTrue (b.Build (proj), "Build should have succeeded."); b.AssertHasNoWarnings (); From 350a1f759b29cfd3be7ae3df6e0edc8664b9700d Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Mon, 17 Nov 2025 15:43:02 +0100 Subject: [PATCH 22/28] BindingWithAndroidJavaSource works across all 3 runtimes --- .../BindingBuildTest.cs | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs index 7ecfe3b8531..60060bcbc03 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs @@ -70,12 +70,6 @@ public void DotNetBuildBinding ([Values] AndroidRuntime runtime) } } - static object [] ClassParseOptions = new object [] { - new object[] { - /* classParser */ "class-parse", - }, - }; - static IEnumerable Get_ClassParseOptions () { var ret = new List (); @@ -832,10 +826,15 @@ public void NothingToBind (string classParser, [Values] AndroidRuntime runtime) } [Test] - public void BindingWithAndroidJavaSource () + public void BindingWithAndroidJavaSource ([Values] AndroidRuntime runtime) { + bool isRelease = runtime == AndroidRuntime.NativeAOT; + if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { + return; + } var path = Path.Combine ("temp", TestName); var lib = new XamarinAndroidBindingProject () { + IsRelease = isRelease, ProjectName = "BindingsProject", AndroidClassParser = "class-parse", Jars = { @@ -861,10 +860,15 @@ public void BindingWithAndroidJavaSource () }, }; + lib.SetRuntime (runtime); + var app = new XamarinAndroidApplicationProject () { + IsRelease = isRelease, ProjectName = "App", References = { new BuildItem.ProjectReference ($"..\\{lib.ProjectName}\\{lib.ProjectName}.csproj", lib.ProjectName, lib.ProjectGuid) } }; + app.SetRuntime (runtime); + using (var libBuilder = CreateDllBuilder (Path.Combine (path, lib.ProjectName), cleanupAfterSuccessfulBuild: false)) using (var appBuilder = CreateApkBuilder (Path.Combine (path, app.ProjectName))) { libBuilder.Verbosity = LoggerVerbosity.Detailed; From c6dd7e0d934352aff633562313a210419370433a Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Mon, 17 Nov 2025 15:48:01 +0100 Subject: [PATCH 23/28] LibraryProjectZipWithLint works across all 3 runtimes --- .../BindingBuildTest.cs | 30 ++++++++++++------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs index 60060bcbc03..c9e86e60f0e 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs @@ -906,10 +906,15 @@ public void BindingWithAndroidJavaSource ([Values] AndroidRuntime runtime) } [Test] - public void LibraryProjectZipWithLint () + public void LibraryProjectZipWithLint ([Values] AndroidRuntime runtime) { + const bool isRelease = true; + if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { + return; + } var path = Path.Combine ("temp", TestName); var lib = new XamarinAndroidBindingProject () { + IsRelease = isRelease, ProjectName = "BindingsProject", AndroidClassParser = "class-parse", Jars = { @@ -919,21 +924,24 @@ public void LibraryProjectZipWithLint () }, MetadataXml = @"" }; + lib.SetRuntime (runtime); + var app = new XamarinAndroidApplicationProject () { + IsRelease = isRelease, ProjectName = "App", - IsRelease = true, LinkTool = "r8", References = { new BuildItem.ProjectReference ($"..\\{lib.ProjectName}\\{lib.ProjectName}.csproj", lib.ProjectName, lib.ProjectGuid) } }; - using (var libBuilder = CreateDllBuilder (Path.Combine (path, lib.ProjectName), cleanupAfterSuccessfulBuild: false)) - using (var appBuilder = CreateApkBuilder (Path.Combine (path, app.ProjectName))) { - Assert.IsTrue (libBuilder.Build (lib), "Library build should have succeeded."); - Assert.IsTrue (appBuilder.Build (app), "App build should have succeeded."); - StringAssertEx.DoesNotContain ("warning : Missing class: com.android.tools.lint.detector.api.Detector", appBuilder.LastBuildOutput, "Build output should contain no warnings about com.android.tools.lint.detector.api.Detector"); - var libraryProjects = Path.Combine (Root, appBuilder.ProjectDirectory, app.IntermediateOutputPath, "lp"); - Assert.IsFalse (Directory.EnumerateFiles (libraryProjects, "lint.jar", SearchOption.AllDirectories).Any (), - "`lint.jar` should not be extracted!"); - } + app.SetRuntime (runtime); + + using var libBuilder = CreateDllBuilder (Path.Combine (path, lib.ProjectName), cleanupAfterSuccessfulBuild: false); + using var appBuilder = CreateApkBuilder (Path.Combine (path, app.ProjectName)); + Assert.IsTrue (libBuilder.Build (lib), "Library build should have succeeded."); + Assert.IsTrue (appBuilder.Build (app), "App build should have succeeded."); + StringAssertEx.DoesNotContain ("warning : Missing class: com.android.tools.lint.detector.api.Detector", appBuilder.LastBuildOutput, "Build output should contain no warnings about com.android.tools.lint.detector.api.Detector"); + var libraryProjects = Path.Combine (Root, appBuilder.ProjectDirectory, app.IntermediateOutputPath, "lp"); + Assert.IsFalse (Directory.EnumerateFiles (libraryProjects, "lint.jar", SearchOption.AllDirectories).Any (), + "`lint.jar` should not be extracted!"); } /// From 78fc773fcade201e0a0a89a603312f6bdec0d9b9 Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Mon, 17 Nov 2025 16:08:38 +0100 Subject: [PATCH 24/28] CheckDuplicateJavaLibraries works across all 3 runtimes --- .../BindingBuildTest.cs | 30 ++++++++++++++----- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs index c9e86e60f0e..dd2f03a9fdc 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs @@ -948,10 +948,16 @@ public void LibraryProjectZipWithLint ([Values] AndroidRuntime runtime) /// Tests two .aar files with r-classes.jar, repackaged.jar /// [Test] - public void CheckDuplicateJavaLibraries () + public void CheckDuplicateJavaLibraries ([Values] AndroidRuntime runtime) { + bool isRelease = runtime == AndroidRuntime.NativeAOT; + if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { + return; + } + var path = Path.Combine ("temp", TestName); var lib1 = new XamarinAndroidBindingProject { + IsRelease = isRelease, ProjectName = "Library1", AndroidClassParser = "class-parse", Jars = { @@ -966,7 +972,10 @@ public void CheckDuplicateJavaLibraries () }, }, }; + lib1.SetRuntime (runtime); + var lib2 = new XamarinAndroidBindingProject { + IsRelease = isRelease, ProjectName = "Library2", AndroidClassParser = "class-parse", Jars = { @@ -981,18 +990,23 @@ public void CheckDuplicateJavaLibraries () }, }, }; + lib2.SetRuntime (runtime); + var app = new XamarinAndroidApplicationProject { + IsRelease = isRelease, SupportedOSPlatformVersion = "30", // androidx.health requires minSdkVersion="30" }; + app.SetRuntime (runtime); app.AddReference (lib1); app.AddReference (lib2); - using (var lib1Builder = CreateDllBuilder (Path.Combine (path, lib1.ProjectName))) - using (var lib2Builder = CreateDllBuilder (Path.Combine (path, lib2.ProjectName))) - using (var appBuilder = CreateApkBuilder (Path.Combine (path, app.ProjectName))) { - Assert.IsTrue (lib1Builder.Build (lib1), "Library1 build should have succeeded."); - Assert.IsTrue (lib2Builder.Build (lib2), "Library2 build should have succeeded."); - Assert.IsTrue (appBuilder.Build (app), "App build should have succeeded."); - } + + using var lib1Builder = CreateDllBuilder (Path.Combine (path, lib1.ProjectName)); + using var lib2Builder = CreateDllBuilder (Path.Combine (path, lib2.ProjectName)); + using var appBuilder = CreateApkBuilder (Path.Combine (path, app.ProjectName)); + + Assert.IsTrue (lib1Builder.Build (lib1), "Library1 build should have succeeded."); + Assert.IsTrue (lib2Builder.Build (lib2), "Library2 build should have succeeded."); + Assert.IsTrue (appBuilder.Build (app), "App build should have succeeded."); } [Test] From 9b1238f44bebad111321d5236e92f6b275407952 Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Mon, 17 Nov 2025 17:15:08 +0100 Subject: [PATCH 25/28] AndroidMavenLibrary works across all 3 runtimes --- .../Xamarin.Android.Build.Tests/BindingBuildTest.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs index dd2f03a9fdc..5cd1d64939f 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs @@ -1010,15 +1010,22 @@ public void CheckDuplicateJavaLibraries ([Values] AndroidRuntime runtime) } [Test] - public void AndroidMavenLibrary () + [NonParallelizable] // All tests are accessing the same .pom file + public void AndroidMavenLibrary ([Values] AndroidRuntime runtime) { + bool isRelease = runtime == AndroidRuntime.NativeAOT; + if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { + return; + } // Test that downloads .jar from Maven and successfully binds it var item = new BuildItem ("AndroidMavenLibrary", "com.google.auto.value:auto-value-annotations"); item.Metadata.Add ("Version", "1.10.4"); var proj = new XamarinAndroidBindingProject { + IsRelease = isRelease, Jars = { item } }; + proj.SetRuntime (runtime); using (var b = CreateDllBuilder ()) { Assert.IsTrue (b.Build (proj), "Build should have succeeded."); From 1a660445392f8f2486f79220204e5a795994dd22 Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Mon, 17 Nov 2025 17:18:24 +0100 Subject: [PATCH 26/28] AndroidMavenLibrary_FailsDueToUnverifiedDependency works across all 3 runtimes --- .../Xamarin.Android.Build.Tests/BindingBuildTest.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs index 5cd1d64939f..09c06d29050 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs @@ -1037,8 +1037,13 @@ public void AndroidMavenLibrary ([Values] AndroidRuntime runtime) } [Test] - public void AndroidMavenLibrary_FailsDueToUnverifiedDependency () + public void AndroidMavenLibrary_FailsDueToUnverifiedDependency ([Values] AndroidRuntime runtime) { + bool isRelease = runtime == AndroidRuntime.NativeAOT; + if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { + return; + } + // Test that triggers Java dependency verification // var item = new BuildItem ("AndroidMavenLibrary", "androidx.core:core"); @@ -1046,8 +1051,10 @@ public void AndroidMavenLibrary_FailsDueToUnverifiedDependency () item.Metadata.Add ("Repository", "Google"); var proj = new XamarinAndroidBindingProject { + IsRelease = isRelease, Jars = { item } }; + proj.SetRuntime (runtime); using (var b = CreateDllBuilder ()) { b.ThrowOnBuildFailure = false; From c1ee8271a16ac22ce86fee0412cde0f99e849ff1 Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Mon, 17 Nov 2025 17:21:43 +0100 Subject: [PATCH 27/28] AndroidMavenLibrary_IgnoreDependencyVerification works across all 3 runtimes --- .../Xamarin.Android.Build.Tests/BindingBuildTest.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs index 09c06d29050..b840d94f481 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs @@ -1066,8 +1066,13 @@ public void AndroidMavenLibrary_FailsDueToUnverifiedDependency ([Values] Android } [Test] - public void AndroidMavenLibrary_IgnoreDependencyVerification () + public void AndroidMavenLibrary_IgnoreDependencyVerification ([Values] AndroidRuntime runtime) { + bool isRelease = runtime == AndroidRuntime.NativeAOT; + if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { + return; + } + // Test that ignores Java dependency verification // var item = new BuildItem ("AndroidMavenLibrary", "androidx.core:core"); @@ -1077,8 +1082,10 @@ public void AndroidMavenLibrary_IgnoreDependencyVerification () item.Metadata.Add ("Bind", "false"); var proj = new XamarinAndroidBindingProject { + IsRelease = isRelease, Jars = { item } }; + proj.SetRuntime (runtime); using (var b = CreateDllBuilder ()) { Assert.IsTrue (b.Build (proj), "Build should have succeeded."); From ba7b37c531163e59ece0325fce6e7d65c6b368c2 Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Mon, 17 Nov 2025 17:26:19 +0100 Subject: [PATCH 28/28] AndroidMavenLibrary_AllDependenciesAreVerified works across all 3 runtimes --- .../Xamarin.Android.Build.Tests/BindingBuildTest.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs index b840d94f481..a399aecf137 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs @@ -1093,8 +1093,13 @@ public void AndroidMavenLibrary_IgnoreDependencyVerification ([Values] AndroidRu } [Test] - public void AndroidMavenLibrary_AllDependenciesAreVerified () + public void AndroidMavenLibrary_AllDependenciesAreVerified ([Values] AndroidRuntime runtime) { + bool isRelease = runtime == AndroidRuntime.NativeAOT; + if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) { + return; + } + // Test that triggers Java dependency verification and that // all dependencies are verified via various supported mechanisms @@ -1126,10 +1131,12 @@ public void AndroidMavenLibrary_AllDependenciesAreVerified () var parcelable = new BuildItem ("AndroidIgnoredJavaDependency", "androidx.versionedparcelable:versionedparcelable:1.2.0"); var proj = new XamarinAndroidBindingProject { + IsRelease = isRelease, Jars = { item, annotations_experimental_androidlib }, PackageReferences = { annotations_nuget }, OtherBuildItems = { concurrent, lifecycle, parcelable }, }; + proj.SetRuntime (runtime); proj.AddReference (collection); var collection_proj = proj.References.First ();