diff --git a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets
index f4b2c338709..d10521b1b97 100644
--- a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets
+++ b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets
@@ -13,6 +13,7 @@
false
$(AndroidGenerateResourceDesigner)
true
+ true
false
false
false
@@ -23,7 +24,10 @@
See: https://github.com/dotnet/sdk/blob/955c0fc7b06e2fa34bacd076ed39f61e4fb61716/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Publish.targets#L16
-->
<_GetChildProjectCopyToPublishDirectoryItems>false
+ false
true
+
+ <_IsPublishing Condition=" '$(_IsPublishing)' == '' and '$(PublishAot)' == 'true' ">true
$(AndroidMinimumSupportedApiLevel)
@@ -89,8 +93,8 @@
android-arm64;android-x64
true
-
- true
+
+ true
true
false
<_AndroidXA1029 Condition=" '$(AotAssemblies)' != '' ">true
diff --git a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.NativeAOT.targets b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.NativeAOT.targets
new file mode 100644
index 00000000000..78cb1632cea
--- /dev/null
+++ b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.NativeAOT.targets
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+ _AndroidBeforeIlcCompile;
+ SetupOSSpecificProps;
+ PrepareForILLink;
+ ILLink;
+ ComputeIlcCompileInputs;
+ _AndroidComputeIlcCompileInputs;
+ $(IlcCompileDependsOn)
+
+
+
+
+
+
+ <_NdkSysrootAbi>aarch64-linux-android
+ <_NdkClangPrefix>aarch64-linux-android21-
+ <_NdkPrebuiltAbi Condition=" $([MSBuild]::IsOSPlatform('windows')) ">windows-x86_64
+ <_NdkPrebuiltAbi Condition=" $([MSBuild]::IsOSPlatform('osx')) ">darwin-x86_64
+ <_NdkPrebuiltAbi Condition=" $([MSBuild]::IsOSPlatform('linux')) ">linux-x86_64
+ <_NdkSysrootDir>$(_AndroidNdkDirectory)toolchains/llvm/prebuilt/$(_NdkPrebuiltAbi)/sysroot/usr/lib/$(_NdkSysrootAbi)
+ <_NdkBinDir>$(_AndroidNdkDirectory)toolchains/llvm/prebuilt/$(_NdkPrebuiltAbi)/bin/
+ $(_NdkBinDir)$(_NdkClangPrefix)clang++
+ $(CppCompilerAndLinker)
+ $(_NdkBinDir)llvm-objcopy
+
+
+ true
+
+ <_OriginalSuppressTrimAnalysisWarnings>$(SuppressTrimAnalysisWarnings)
+ true
+
+
+
+ <_OriginalRuntimeIdentifier>$(RuntimeIdentifier)
+ linux-bionic-arm64
+
+ <_targetOS>linux
+
+ <_linuxLibcFlavor>bionic
+
+
+
+
+
+
+ $(_OriginalSuppressTrimAnalysisWarnings)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(_OriginalRuntimeIdentifier)
+
+
+
+
diff --git a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.targets b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.targets
index f914dba459a..16610e6db82 100644
--- a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.targets
+++ b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.targets
@@ -27,5 +27,6 @@
+
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 01779040604..638b983affc 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
@@ -105,6 +105,30 @@ public void BuildBasicApplication ([Values (true, false)] bool isRelease, [Value
}
}
+ [Test]
+ public void NativeAOT ()
+ {
+ if (IsWindows) {
+ // Microsoft.NETCore.Native.Publish.targets(61,5): Cross-OS native compilation is not supported.
+ // Set $(DisableUnsupportedError)=true, Microsoft.NETCore.Native.Unix.targets(296,5): error : Platform linker ('C:\Android\android-sdk\ndk\26.3.11579264\toolchains/llvm/prebuilt/windows-x86_64/bin/aarch64-linux-android21-clang++' or 'gcc') not found in PATH. Ensure you have all the required prerequisites documented at https://aka.ms/nativeaot-prerequisites.
+ Assert.Ignore ("This test is not valid on Windows.");
+ }
+
+ var proj = new XamarinAndroidApplicationProject {
+ IsRelease = true,
+ // Add locally downloaded NativeAOT packs
+ ExtraNuGetConfigSources = {
+ Path.Combine (XABuildPaths.BuildOutputDirectory, "nuget-unsigned"),
+ }
+ };
+ proj.SetRuntimeIdentifier ("arm64-v8a");
+ proj.SetProperty ("PublishAot", "true");
+ proj.SetProperty ("PublishAotUsingRuntimePack", "true");
+
+ using var b = CreateApkBuilder ();
+ Assert.IsTrue (b.Build (proj), "Build should have succeeded.");
+ }
+
[Test]
public void BuildBasicApplicationThenMoveIt ([Values (true, false)] bool isRelease)
{
diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets
index 74b3b78a750..0e79b8a3942 100644
--- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets
+++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets
@@ -324,7 +324,9 @@ Copyright (C) 2011-2012 Xamarin. All rights reserved.
true
True
False
- True
+ True
+
+ False
<_AndroidUseMarshalMethods Condition=" '$(AndroidIncludeDebugSymbols)' == 'True' ">False
<_AndroidUseMarshalMethods Condition=" '$(AndroidIncludeDebugSymbols)' != 'True' ">$(AndroidEnableMarshalMethods)
@@ -1937,7 +1939,7 @@ because xbuild doesn't support framework reference assemblies.