diff --git a/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Resource.Designer.targets b/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Resource.Designer.targets index 7105bf0286c..e19d986acda 100644 --- a/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Resource.Designer.targets +++ b/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Resource.Designer.targets @@ -227,29 +227,15 @@ Copyright (C) 2016 Xamarin. All rights reserved. is processed by the ILLink step. If we do not do this then the reference to `netstandard.dll` is not replaced with `System.Private.CoreLib` and the app crashes. - We use a TrimmerRootDescriptor (not TrimmerRootAssembly) to prevent ILLink from - trimming the designer's resource properties. FixLegacyResourceDesignerStep runs - after ILLink and needs all properties present when rewriting library assemblies. - A descriptor (-x) preserves types without making the assembly an entry point, - which avoids pulling netstandard.dll into the output. - See https://github.com/dotnet/runtime/issues/126518 - - TODO: Once dotnet/runtime#126518 is fixed and flows to dotnet/android, - simplify this to use TrimmerRootAssembly instead of the XML descriptor. + No TrimmerRootDescriptor is needed: PreTrimmingFixLegacyDesigner rewrites library + assemblies *before* ILLink, replacing designer field loads with calls to the designer + assembly's property getters. ILLink then naturally preserves only the referenced + properties through its mark step, allowing everything else to be trimmed. --> - - <_DesignerLinkerDescriptor>$(IntermediateOutputPath)_Microsoft.Android.Resource.Designer.xml - - $(_DesignerAssemblyName).dll @@ -257,12 +243,6 @@ Copyright (C) 2016 Xamarin. All rights reserved. true 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 index ddf8348d9e9..14eb57c1134 100644 --- 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 @@ -267,7 +267,7 @@ This file contains the NativeAOT-specific MSBuild logic for .NET for Android. --> + DependsOnTargets="_PreTrimmingFixLegacyDesignerUpdateItems;NativeCompile" /> diff --git a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.TypeMap.LlvmIr.targets b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.TypeMap.LlvmIr.targets index 926cbaa7e9f..4b1cb9fcab0 100644 --- a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.TypeMap.LlvmIr.targets +++ b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.TypeMap.LlvmIr.targets @@ -8,6 +8,7 @@ + <_RemoveRegisterFlag>$(MonoAndroidIntermediateAssemblyDir)shrunk\shrunk.flag @@ -223,6 +224,62 @@ + + + + <_PreTrimmingAssembly Include="@(ResolvedFileToPublish)" Condition=" '%(Extension)' == '.dll' and '%(ResolvedFileToPublish.PostprocessAssembly)' == 'true' " /> + + + + + + + + + + + + + + + + + + <_PreTrimmingSwappableItem Include="@(ResolvedFileToPublish)" + Condition=" '%(Extension)' == '.dll' and Exists('$(IntermediateOutputPath)prelink/%(Filename)%(Extension)') " /> + + + + + + Deterministic="$(Deterministic)" /> diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/PostTrimmingPipeline.cs b/src/Xamarin.Android.Build.Tasks/Tasks/PostTrimmingPipeline.cs index 9af2b1b6419..fa3c3385737 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/PostTrimmingPipeline.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/PostTrimmingPipeline.cs @@ -6,7 +6,6 @@ using Microsoft.Android.Build.Tasks; using Microsoft.Build.Framework; using Mono.Cecil; -using Mono.Linker; using MonoDroid.Tuner; namespace Xamarin.Android.Tasks; @@ -17,7 +16,7 @@ namespace Xamarin.Android.Tasks; /// This opens each assembly once (via DirectoryAssemblyResolver with ReadWrite) and /// runs all registered steps on it, then writes modified assemblies in-place. Currently /// runs CheckForObsoletePreserveAttributeStep, StripEmbeddedLibrariesStep and -/// (optionally) AddKeepAlivesStep and FixLegacyResourceDesignerStep. +/// (optionally) AddKeepAlivesStep. /// /// Runs in the inner build after ILLink but before ReadyToRun/crossgen2 compilation, /// so that R2R images are generated from the already-modified assemblies. @@ -35,8 +34,6 @@ public class PostTrimmingPipeline : AndroidTask public bool Deterministic { get; set; } - public bool UseDesignerAssembly { get; set; } - public override bool RunTask () { using var resolver = new DirectoryAssemblyResolver ( @@ -103,15 +100,6 @@ public override bool RunTask () }, (msg) => Log.LogDebugMessage (msg))); } - if (UseDesignerAssembly) { - // Create an MSBuildLinkContext so FixLegacyResourceDesignerStep can resolve assemblies - // and log messages. The resolver is owned by the outer 'using' block, so we intentionally - // do not dispose this context (LinkContext.Dispose would double-dispose the resolver). - var linkContext = new MSBuildLinkContext (resolver, Log); - var fixLegacyStep = new FixLegacyResourceDesignerStep (); - fixLegacyStep.Initialize (linkContext); - steps.Add (new PostTrimmingFixLegacyResourceDesignerStep (fixLegacyStep)); - } foreach (var (item, assembly) in loadedAssemblies) { var context = new StepContext (item, item); @@ -130,24 +118,3 @@ public override bool RunTask () return !Log.HasLoggedErrors; } } - -/// -/// Thin wrapper around for the post-trimming pipeline. -/// Calls directly, matching the -/// behavior of the former ILLink path which processed all assemblies without StepContext flag filtering. -/// Assemblies without a resource designer are skipped internally by ProcessAssemblyDesigner. -/// -class PostTrimmingFixLegacyResourceDesignerStep : IAssemblyModifierPipelineStep -{ - readonly FixLegacyResourceDesignerStep _inner; - - public PostTrimmingFixLegacyResourceDesignerStep (FixLegacyResourceDesignerStep inner) - { - _inner = inner; - } - - public void ProcessAssembly (AssemblyDefinition assembly, StepContext context) - { - context.IsAssemblyModified |= _inner.ProcessAssemblyDesigner (assembly); - } -} diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/PreTrimmingFixLegacyDesigner.cs b/src/Xamarin.Android.Build.Tasks/Tasks/PreTrimmingFixLegacyDesigner.cs new file mode 100644 index 00000000000..f34be506849 --- /dev/null +++ b/src/Xamarin.Android.Build.Tasks/Tasks/PreTrimmingFixLegacyDesigner.cs @@ -0,0 +1,94 @@ +#nullable enable + +using System.Collections.Generic; +using System.IO; +using Java.Interop.Tools.Cecil; +using Microsoft.Android.Build.Tasks; +using Microsoft.Build.Framework; +using Microsoft.Build.Utilities; +using Mono.Cecil; +using MonoDroid.Tuner; + +namespace Xamarin.Android.Tasks; + +/// +/// Runs on assemblies that are about to be +/// trimmed by ILLink. This rewrites library assemblies so their resource field accesses +/// (ldsfld) become calls to the designer assembly's property getters. +/// +/// Running this *before* ILLink means the trimmer sees the rewritten IL and can freely +/// trim unused designer types/fields. This avoids the need to root the entire designer +/// assembly during trimming (which causes an APK size regression). +/// +/// Modified assemblies are written to rather than in-place, +/// to avoid mutating files in the shared NuGet cache or shared intermediate output paths. +/// +public class PreTrimmingFixLegacyDesigner : AndroidTask +{ + public override string TaskPrefix => "PTD"; + + [Required] + public ITaskItem [] Assemblies { get; set; } = []; + + [Required] + public string TargetName { get; set; } = ""; + + [Required] + public string OutputDirectory { get; set; } = ""; + + public bool Deterministic { get; set; } + + [Output] + public ITaskItem []? ModifiedAssemblies { get; set; } + + public override bool RunTask () + { + Directory.CreateDirectory (OutputDirectory); + + using var resolver = new DirectoryAssemblyResolver ( + this.CreateTaskLogger (), loadDebugSymbols: true); + + foreach (var assembly in Assemblies) { + var dir = Path.GetFullPath (Path.GetDirectoryName (assembly.ItemSpec) ?? ""); + if (!resolver.SearchDirectories.Contains (dir)) { + resolver.SearchDirectories.Add (dir); + } + } + + var linkContext = new MSBuildLinkContext (resolver, Log); + var fixLegacyStep = new FixLegacyResourceDesignerStep (); + fixLegacyStep.Initialize (linkContext); + + var modified = new List (); + + foreach (var item in Assemblies) { + // Match the filtering in FixLegacyResourceDesignerStep.ProcessAssembly: + // skip the main assembly and framework/BCL assemblies. + if (Path.GetFileNameWithoutExtension (item.ItemSpec) == TargetName) { + continue; + } + if (MonoAndroidHelper.IsFrameworkAssembly (item)) { + continue; + } + + var assembly = resolver.GetAssembly (item.ItemSpec); + if (fixLegacyStep.ProcessAssemblyDesigner (assembly)) { + var outputPath = Path.Combine (OutputDirectory, Path.GetFileName (item.ItemSpec)); + Log.LogDebugMessage ($" Writing modified assembly: {outputPath}"); + assembly.Write (outputPath, new WriterParameters { + WriteSymbols = assembly.MainModule.HasSymbols, + DeterministicMvid = Deterministic, + }); + + var outputItem = new TaskItem (outputPath); + item.CopyMetadataTo (outputItem); + outputItem.SetMetadata ("OriginalPath", item.ItemSpec); + modified.Add (outputItem); + } + } + + ModifiedAssemblies = modified.ToArray (); + + return !Log.HasLoggedErrors; + } +} diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64SimpleDotNet.CoreCLR.apkdesc b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64SimpleDotNet.CoreCLR.apkdesc index 9c3e342a13d..12bf7ff59d0 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64SimpleDotNet.CoreCLR.apkdesc +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64SimpleDotNet.CoreCLR.apkdesc @@ -8,22 +8,22 @@ "Size": 400044 }, "lib/arm64-v8a/libassembly-store.so": { - "Size": 3115312 + "Size": 3107808 }, "lib/arm64-v8a/libclrjit.so": { - "Size": 3202072 + "Size": 3207768 }, "lib/arm64-v8a/libcoreclr.so": { - "Size": 5766640 + "Size": 5769760 }, "lib/arm64-v8a/libmonodroid.so": { - "Size": 1365104 + "Size": 1365360 }, "lib/arm64-v8a/libmscordaccore.so": { - "Size": 2493552 + "Size": 2485088 }, "lib/arm64-v8a/libmscordbi.so": { - "Size": 1902744 + "Size": 1901544 }, "lib/arm64-v8a/libSystem.Globalization.Native.so": { "Size": 71936 @@ -32,7 +32,7 @@ "Size": 1281696 }, "lib/arm64-v8a/libSystem.Native.so": { - "Size": 107904 + "Size": 108424 }, "lib/arm64-v8a/libSystem.Security.Cryptography.Native.Android.so": { "Size": 165536 @@ -74,5 +74,5 @@ "Size": 1904 } }, - "PackageSize": 9258778 + "PackageSize": 9254682 } \ No newline at end of file diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64SimpleDotNet.MonoVM.apkdesc b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64SimpleDotNet.MonoVM.apkdesc index 5b76d46097d..40c5de77bbf 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64SimpleDotNet.MonoVM.apkdesc +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64SimpleDotNet.MonoVM.apkdesc @@ -8,34 +8,34 @@ "Size": 22388 }, "lib/arm64-v8a/lib__Microsoft.Android.Resource.Designer.dll.so": { - "Size": 18696 + "Size": 18296 }, "lib/arm64-v8a/lib_Java.Interop.dll.so": { - "Size": 88048 + "Size": 88144 }, "lib/arm64-v8a/lib_Mono.Android.dll.so": { - "Size": 117928 + "Size": 117984 }, "lib/arm64-v8a/lib_Mono.Android.Runtime.dll.so": { - "Size": 26464 + "Size": 26472 }, "lib/arm64-v8a/lib_System.Console.dll.so": { - "Size": 24432 + "Size": 24424 }, "lib/arm64-v8a/lib_System.Linq.dll.so": { - "Size": 25512 + "Size": 25504 }, "lib/arm64-v8a/lib_System.Private.CoreLib.dll.so": { - "Size": 635608 + "Size": 637632 }, "lib/arm64-v8a/lib_System.Runtime.dll.so": { - "Size": 20296 + "Size": 20288 }, "lib/arm64-v8a/lib_System.Runtime.InteropServices.dll.so": { "Size": 21632 }, "lib/arm64-v8a/lib_UnnamedProject.dll.so": { - "Size": 20144 + "Size": 20160 }, "lib/arm64-v8a/libarc.bin.so": { "Size": 19176 @@ -44,10 +44,10 @@ "Size": 36616 }, "lib/arm64-v8a/libmonodroid.so": { - "Size": 1386072 + "Size": 1386328 }, "lib/arm64-v8a/libmonosgen-2.0.so": { - "Size": 3124368 + "Size": 3124400 }, "lib/arm64-v8a/libSystem.Globalization.Native.so": { "Size": 71936 @@ -56,7 +56,7 @@ "Size": 1281696 }, "lib/arm64-v8a/libSystem.Native.so": { - "Size": 107904 + "Size": 108424 }, "lib/arm64-v8a/libSystem.Security.Cryptography.Native.Android.so": { "Size": 165536 @@ -98,5 +98,5 @@ "Size": 1904 } }, - "PackageSize": 3267093 + "PackageSize": 3271189 } \ No newline at end of file diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64SimpleDotNet.NativeAOT.apkdesc b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64SimpleDotNet.NativeAOT.apkdesc index f3a4ee3f174..75e2332c446 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64SimpleDotNet.NativeAOT.apkdesc +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64SimpleDotNet.NativeAOT.apkdesc @@ -8,7 +8,7 @@ "Size": 25400 }, "lib/arm64-v8a/libUnnamedProject.so": { - "Size": 5056848 + "Size": 5072296 }, "META-INF/BNDLTOOL.RSA": { "Size": 1221 @@ -44,5 +44,5 @@ "Size": 1904 } }, - "PackageSize": 2122722 + "PackageSize": 2126818 } \ No newline at end of file diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64XFormsDotNet.CoreCLR.apkdesc b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64XFormsDotNet.CoreCLR.apkdesc index 2d96ae07999..235a8aceeb2 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64XFormsDotNet.CoreCLR.apkdesc +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64XFormsDotNet.CoreCLR.apkdesc @@ -32,22 +32,22 @@ "Size": 2396 }, "lib/arm64-v8a/libassembly-store.so": { - "Size": 14459432 + "Size": 14105312 }, "lib/arm64-v8a/libclrjit.so": { - "Size": 3202072 + "Size": 3207768 }, "lib/arm64-v8a/libcoreclr.so": { - "Size": 5766640 + "Size": 5769760 }, "lib/arm64-v8a/libmonodroid.so": { - "Size": 1365104 + "Size": 1365360 }, "lib/arm64-v8a/libmscordaccore.so": { - "Size": 2493552 + "Size": 2485088 }, "lib/arm64-v8a/libmscordbi.so": { - "Size": 1902744 + "Size": 1901544 }, "lib/arm64-v8a/libSystem.Globalization.Native.so": { "Size": 71936 @@ -56,7 +56,7 @@ "Size": 1281696 }, "lib/arm64-v8a/libSystem.Native.so": { - "Size": 107904 + "Size": 108424 }, "lib/arm64-v8a/libSystem.Security.Cryptography.Native.Android.so": { "Size": 165536 @@ -2285,5 +2285,5 @@ "Size": 812848 } }, - "PackageSize": 23086011 + "PackageSize": 22889403 } \ No newline at end of file diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64XFormsDotNet.MonoVM.apkdesc b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64XFormsDotNet.MonoVM.apkdesc index 054a451576a..04fe96f22a1 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64XFormsDotNet.MonoVM.apkdesc +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64XFormsDotNet.MonoVM.apkdesc @@ -29,40 +29,40 @@ "Size": 2396 }, "lib/arm64-v8a/lib__Microsoft.Android.Resource.Designer.dll.so": { - "Size": 258400 + "Size": 19544 }, "lib/arm64-v8a/lib_FormsViewGroup.dll.so": { "Size": 25424 }, "lib/arm64-v8a/lib_Java.Interop.dll.so": { - "Size": 96656 + "Size": 96704 }, "lib/arm64-v8a/lib_Mono.Android.dll.so": { - "Size": 541880 + "Size": 541912 }, "lib/arm64-v8a/lib_Mono.Android.Runtime.dll.so": { - "Size": 26464 + "Size": 26472 }, "lib/arm64-v8a/lib_mscorlib.dll.so": { "Size": 21472 }, "lib/arm64-v8a/lib_netstandard.dll.so": { - "Size": 23120 + "Size": 23112 }, "lib/arm64-v8a/lib_System.Collections.dll.so": { - "Size": 34024 + "Size": 34016 }, "lib/arm64-v8a/lib_System.Collections.NonGeneric.dll.so": { - "Size": 25688 + "Size": 25680 }, "lib/arm64-v8a/lib_System.Collections.Specialized.dll.so": { - "Size": 23880 + "Size": 23872 }, "lib/arm64-v8a/lib_System.ComponentModel.dll.so": { "Size": 19632 }, "lib/arm64-v8a/lib_System.ComponentModel.Primitives.dll.so": { - "Size": 21368 + "Size": 21360 }, "lib/arm64-v8a/lib_System.ComponentModel.TypeConverter.dll.so": { "Size": 43672 @@ -77,46 +77,46 @@ "Size": 24656 }, "lib/arm64-v8a/lib_System.dll.so": { - "Size": 19888 + "Size": 19856 }, "lib/arm64-v8a/lib_System.Drawing.dll.so": { - "Size": 19472 + "Size": 19464 }, "lib/arm64-v8a/lib_System.Drawing.Primitives.dll.so": { - "Size": 30096 + "Size": 30088 }, "lib/arm64-v8a/lib_System.Formats.Asn1.dll.so": { - "Size": 51040 + "Size": 51032 }, "lib/arm64-v8a/lib_System.IO.Compression.Brotli.dll.so": { - "Size": 29616 + "Size": 29608 }, "lib/arm64-v8a/lib_System.IO.Compression.dll.so": { - "Size": 34680 + "Size": 34672 }, "lib/arm64-v8a/lib_System.IO.IsolatedStorage.dll.so": { - "Size": 28312 + "Size": 28304 }, "lib/arm64-v8a/lib_System.Linq.dll.so": { "Size": 48144 }, "lib/arm64-v8a/lib_System.Linq.Expressions.dll.so": { - "Size": 186048 + "Size": 186040 }, "lib/arm64-v8a/lib_System.Net.Http.dll.so": { "Size": 86752 }, "lib/arm64-v8a/lib_System.Net.Primitives.dll.so": { - "Size": 42384 + "Size": 42352 }, "lib/arm64-v8a/lib_System.Net.Requests.dll.so": { - "Size": 21592 + "Size": 21584 }, "lib/arm64-v8a/lib_System.ObjectModel.dll.so": { - "Size": 27048 + "Size": 27040 }, "lib/arm64-v8a/lib_System.Private.CoreLib.dll.so": { - "Size": 997176 + "Size": 1000144 }, "lib/arm64-v8a/lib_System.Private.DataContractSerialization.dll.so": { "Size": 217968 @@ -125,10 +125,10 @@ "Size": 62280 }, "lib/arm64-v8a/lib_System.Private.Xml.dll.so": { - "Size": 237032 + "Size": 237024 }, "lib/arm64-v8a/lib_System.Private.Xml.Linq.dll.so": { - "Size": 35544 + "Size": 35536 }, "lib/arm64-v8a/lib_System.Runtime.dll.so": { "Size": 20424 @@ -137,7 +137,7 @@ "Size": 21632 }, "lib/arm64-v8a/lib_System.Runtime.Numerics.dll.so": { - "Size": 61504 + "Size": 63320 }, "lib/arm64-v8a/lib_System.Runtime.Serialization.dll.so": { "Size": 19400 @@ -146,13 +146,13 @@ "Size": 20368 }, "lib/arm64-v8a/lib_System.Runtime.Serialization.Primitives.dll.so": { - "Size": 21496 + "Size": 21488 }, "lib/arm64-v8a/lib_System.Security.Cryptography.dll.so": { - "Size": 82088 + "Size": 82080 }, "lib/arm64-v8a/lib_System.Text.RegularExpressions.dll.so": { - "Size": 194000 + "Size": 194240 }, "lib/arm64-v8a/lib_System.Xml.dll.so": { "Size": 19288 @@ -161,7 +161,7 @@ "Size": 19304 }, "lib/arm64-v8a/lib_UnnamedProject.dll.so": { - "Size": 22216 + "Size": 22224 }, "lib/arm64-v8a/lib_Xamarin.AndroidX.Activity.dll.so": { "Size": 34960 @@ -221,7 +221,7 @@ "Size": 581000 }, "lib/arm64-v8a/lib_Xamarin.Forms.Platform.Android.dll.so": { - "Size": 390544 + "Size": 390392 }, "lib/arm64-v8a/lib_Xamarin.Forms.Platform.dll.so": { "Size": 35992 @@ -239,10 +239,10 @@ "Size": 36616 }, "lib/arm64-v8a/libmonodroid.so": { - "Size": 1386072 + "Size": 1386328 }, "lib/arm64-v8a/libmonosgen-2.0.so": { - "Size": 3124368 + "Size": 3124400 }, "lib/arm64-v8a/libSystem.Globalization.Native.so": { "Size": 71936 @@ -251,7 +251,7 @@ "Size": 1281696 }, "lib/arm64-v8a/libSystem.Native.so": { - "Size": 107904 + "Size": 108424 }, "lib/arm64-v8a/libSystem.Security.Cryptography.Native.Android.so": { "Size": 165536 @@ -2480,5 +2480,5 @@ "Size": 812848 } }, - "PackageSize": 11287613 + "PackageSize": 11144253 } \ No newline at end of file diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64XFormsDotNet.NativeAOT.apkdesc b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64XFormsDotNet.NativeAOT.apkdesc index c86f1cb9523..15f764d5031 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64XFormsDotNet.NativeAOT.apkdesc +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64XFormsDotNet.NativeAOT.apkdesc @@ -29,7 +29,7 @@ "Size": 2396 }, "lib/arm64-v8a/libUnnamedProject.so": { - "Size": 22749272 + "Size": 21522936 }, "META-INF/androidx.activity_activity.version": { "Size": 6 @@ -2252,5 +2252,5 @@ "Size": 812848 } }, - "PackageSize": 12808265 + "PackageSize": 12505161 } \ No newline at end of file