Skip to content

Commit 6be8531

Browse files
[Xamarin.Android.Build.Tasks] default to only 64-bit targets (#9179)
We currently build for all 4 Android architectures by default. While modern apps are more likely to run on `android-arm64` modern devices or `android-x64` default emulator on x64 machines. Let's drop 32-bit targets by default, and let customers opt into them. This could significatly help `Release` build times, etc. Customers could opt into all 4 by adding in their `.csproj`: <RuntimeIdentifiers>android-arm;android-arm64;android-x86;android-x64</RuntimeIdentifiers> Or in the case of a multi-targeted .NET MAUI project: <RuntimeIdentifiers Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">android-arm;android-arm64;android-x86;android-x64</RuntimeIdentifiers>
1 parent 339c6a1 commit 6be8531

File tree

4 files changed

+6
-13
lines changed

4 files changed

+6
-13
lines changed

src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@
8787
<SuppressTrimAnalysisWarnings Condition=" '$(SuppressTrimAnalysisWarnings)' == '' and ('$(TrimMode)' == 'full' or '$(IsAotCompatible)' == 'true') ">false</SuppressTrimAnalysisWarnings>
8888
<SuppressTrimAnalysisWarnings Condition=" '$(SuppressTrimAnalysisWarnings)' == '' ">true</SuppressTrimAnalysisWarnings>
8989
<!-- Prefer $(RuntimeIdentifiers) plural -->
90-
<RuntimeIdentifiers Condition=" '$(RuntimeIdentifier)' == '' And '$(RuntimeIdentifiers)' == '' ">android-arm;android-arm64;android-x86;android-x64</RuntimeIdentifiers>
90+
<RuntimeIdentifiers Condition=" '$(RuntimeIdentifier)' == '' And '$(RuntimeIdentifiers)' == '' ">android-arm64;android-x64</RuntimeIdentifiers>
9191
<RuntimeIdentifier Condition=" '$(RuntimeIdentifiers)' != '' And '$(RuntimeIdentifier)' != '' " />
9292
<AndroidManifest Condition=" '$(AndroidManifest)' == '' and Exists ('Properties\AndroidManifest.xml') and !Exists ('AndroidManifest.xml') ">Properties\AndroidManifest.xml</AndroidManifest>
9393
<AndroidManifest Condition=" '$(AndroidManifest)' == '' ">AndroidManifest.xml</AndroidManifest>

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

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -282,14 +282,6 @@ public void BuildAMassiveApp ()
282282
app1.Imports.Add (new Import ("foo.targets") {
283283
TextContent = () => @"<?xml version=""1.0"" encoding=""utf-16""?>
284284
<Project ToolsVersion=""4.0"" xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
285-
<Target Name=""_CheckAbis"" BeforeTargets=""_DefineBuildTargetAbis"">
286-
<PropertyGroup>
287-
<AndroidSupportedAbis>armeabi-v7a;x86</AndroidSupportedAbis>
288-
<AndroidSupportedAbis Condition=""Exists('$(MSBuildThisFileDirectory)..\..\..\..\Debug\lib\xamarin.android\xbuild\Xamarin\Android\lib\arm64-v8a\libmono-android.release.so')"">$(AndroidSupportedAbis);arm64-v8a</AndroidSupportedAbis>
289-
<AndroidSupportedAbis Condition=""Exists('$(MSBuildThisFileDirectory)..\..\..\..\Debug\lib\xamarin.android\xbuild\Xamarin\Android\lib\x86_64\libmono-android.release.so')"">$(AndroidSupportedAbis);x86_64</AndroidSupportedAbis>
290-
</PropertyGroup>
291-
<Message Text=""$(AndroidSupportedAbis)"" />
292-
</Target>
293285
<Target Name=""_Foo"" AfterTargets=""_SetLatestTargetFrameworkVersion"">
294286
<PropertyGroup>
295287
<AotAssemblies Condition=""!Exists('$(MonoAndroidBinDirectory)" + Path.DirectorySeparatorChar + @"cross-arm')"">False</AotAssemblies>

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ public Foo ()
152152
});
153153
libB.OtherBuildItems.Add (new AndroidItem.AndroidNativeLibrary (default (Func<string>)) {
154154
Update = () => "libfoo.so",
155-
MetadataValues = "Link=x86\\libfoo.so",
155+
MetadataValues = "Link=x86_64\\libfoo.so",
156156
BinaryContent = () => Array.Empty<byte> (),
157157
});
158158
libB.AddReference (libC);
@@ -183,7 +183,7 @@ public Foo ()
183183
aar.AssertContainsEntry (aarPath, "libs/A1AFA985571E728E.jar");
184184
aar.AssertContainsEntry (aarPath, $"libs/{projectJarHash}.jar");
185185
aar.AssertContainsEntry (aarPath, "jni/arm64-v8a/libfoo.so");
186-
aar.AssertContainsEntry (aarPath, "jni/x86/libfoo.so");
186+
aar.AssertContainsEntry (aarPath, "jni/x86_64/libfoo.so");
187187
// proguard.txt from Library C should not flow to Library B and "double"
188188
aar.AssertEntryEquals (aarPath, "proguard.txt", "# LibraryB");
189189
}
@@ -223,7 +223,7 @@ public Foo ()
223223
apk.AssertContainsEntry (aarPath, "res/layout/mylayout.xml");
224224
apk.AssertContainsEntry (apkPath, "res/raw/bar.txt");
225225
apk.AssertContainsEntry (apkPath, "lib/arm64-v8a/libfoo.so");
226-
apk.AssertContainsEntry (apkPath, "lib/x86/libfoo.so");
226+
apk.AssertContainsEntry (apkPath, "lib/x86_64/libfoo.so");
227227
}
228228

229229
// Check classes.dex contains foo.jar
@@ -242,7 +242,7 @@ public Foo ()
242242
Assert.IsTrue (DexUtils.ContainsClass (className, dexFile, AndroidSdkPath), $"`{dexFile}` should include `{className}`!");
243243

244244
// Check environment variable
245-
var environmentFiles = EnvironmentHelper.GatherEnvironmentFiles (intermediate, "x86", required: true);
245+
var environmentFiles = EnvironmentHelper.GatherEnvironmentFiles (intermediate, "x86_64", required: true);
246246
var environmentVariables = EnvironmentHelper.ReadEnvironmentVariables (environmentFiles);
247247
Assert.IsTrue (environmentVariables.TryGetValue (env_var, out string actual), $"Environment should contain {env_var}");
248248
Assert.AreEqual (env_val, actual, $"{env_var} should be {env_val}");

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -661,6 +661,7 @@ public abstract class MyRunner {
661661
}"
662662
});
663663
var proj = new XamarinAndroidApplicationProject { IsRelease = true, ProjectName = "App1" };
664+
proj.SetRuntimeIdentifiers(["armeabi-v7a", "arm64-v8a", "x86", "x86_64"]);
664665
proj.References.Add(new BuildItem.ProjectReference (Path.Combine ("..", "Lib1", "Lib1.csproj"), "Lib1"));
665666
proj.MainActivity = proj.DefaultMainActivity.Replace (
666667
"base.OnCreate (bundle);",

0 commit comments

Comments
 (0)