diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest2.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest2.cs
index 2d622b7e161..075ad1e9b3f 100644
--- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest2.cs
+++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest2.cs
@@ -107,11 +107,8 @@ public void BuildBasicApplication ([Values (true, false)] bool isRelease, [Value
}
[Test]
- public void BasicApplicationOtherRuntime ([Values (true, false)] bool isRelease)
+ public void BasicApplicationBuildCoreCLR ([Values (true, false)] bool isRelease)
{
- // This test would fail, as it requires **our** updated runtime pack, which isn't currently created
- // It is created in `src/native/native-clr.csproj` which isn't built atm.
- Assert.Ignore ("CoreCLR support isn't fully enabled yet. This test will be enabled in a follow-up PR.");
var proj = new XamarinAndroidApplicationProject {
IsRelease = isRelease,
// Add locally downloaded CoreCLR packs
@@ -124,6 +121,64 @@ public void BasicApplicationOtherRuntime ([Values (true, false)] bool isRelease)
Assert.IsTrue (b.Build (proj), "Build should have succeeded.");
}
+ static object [] ReadyToRunConfigurationSource = new object [] {
+ new object[] {
+ /* isComposite */ true,
+ /* rid */ "android-x64"
+ },
+ new object[] {
+ /* isComposite */ false,
+ /* rid */ "android-x64"
+ },
+ new object[] {
+ /* isComposite */ true,
+ /* rid */ "android-arm64"
+ },
+ new object[] {
+ /* isComposite */ false,
+ /* rid */ "android-arm64"
+ }
+ };
+
+ [Test]
+ [TestCaseSource (nameof (ReadyToRunConfigurationSource))]
+ public void BasicApplicationPublishReadyToRun (bool isComposite, string rid)
+ {
+ var proj = new XamarinAndroidApplicationProject {
+ IsRelease = true,
+ // Add locally downloaded CoreCLR packs
+ ExtraNuGetConfigSources = {
+ Path.Combine (XABuildPaths.BuildOutputDirectory, "nuget-unsigned"),
+ }
+ };
+
+ proj.SetProperty ("RuntimeIdentifier", rid);
+ proj.SetProperty ("UseMonoRuntime", "false"); // Enables CoreCLR
+ proj.SetProperty ("_IsPublishing", "true"); // Make "dotnet build" act as "dotnet publish"
+ proj.SetProperty ("PublishReadyToRun", "true"); // Enable R2R
+ proj.SetProperty ("AndroidEnableAssemblyCompression", "false");
+
+ if (isComposite)
+ proj.SetProperty ("PublishReadyToRunComposite", "true"); // Enable R2R composite
+
+ var b = CreateApkBuilder ();
+ Assert.IsTrue (b.Build (proj), "Build should have succeeded.");
+
+ var assemblyName = proj.ProjectName;
+ var apk = Path.Combine (Root, b.ProjectDirectory, proj.OutputPath, rid, $"{proj.PackageName}-Signed.apk");
+ FileAssert.Exists (apk);
+
+ var helper = new ArchiveAssemblyHelper (apk, true);
+ var abi = MonoAndroidHelper.RidToAbi (rid);
+ Assert.IsTrue (helper.Exists ($"assemblies/{abi}/{assemblyName}.dll"), $"{assemblyName}.dll should exist in apk!");
+
+ using var stream = helper.ReadEntry ($"assemblies/{assemblyName}.dll");
+ stream.Position = 0;
+ using var peReader = new System.Reflection.PortableExecutable.PEReader (stream);
+ Assert.IsTrue (peReader.PEHeaders.CorHeader.ManagedNativeHeaderDirectory.Size > 0,
+ $"ReadyToRun image not found in {assemblyName}.dll! ManagedNativeHeaderDirectory should not be empty!");
+ }
+
[Test]
public void NativeAOT ()
{
diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets
index 07408951c6e..43e4ca59898 100644
--- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets
+++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets
@@ -342,13 +342,10 @@ Copyright (C) 2011-2012 Xamarin. All rights reserved.
true
True
False
- True
+ True
- False
+ False
-
- False
<_AndroidUseMarshalMethods Condition=" '$(AndroidIncludeDebugSymbols)' == 'True' ">False
<_AndroidUseMarshalMethods Condition=" '$(AndroidIncludeDebugSymbols)' != 'True' ">$(AndroidEnableMarshalMethods)
@@ -2062,7 +2059,7 @@ because xbuild doesn't support framework reference assemblies.