From e35296ec6fa5acb4699997cb40ed5ffa5ef03973 Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Mon, 6 May 2024 19:15:27 +0200 Subject: [PATCH 01/13] Enable marshal methods by default, except when Blazor is used --- src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets index 5d81e3f7545..eef61efe827 100644 --- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets +++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets @@ -330,7 +330,8 @@ Copyright (C) 2011-2012 Xamarin. All rights reserved. false true True - False + False + True <_AndroidUseMarshalMethods Condition=" '$(AndroidIncludeDebugSymbols)' == 'True' ">False <_AndroidUseMarshalMethods Condition=" '$(AndroidIncludeDebugSymbols)' != 'True' ">$(AndroidEnableMarshalMethods) From 6f2371ee95176c410b863eca2904136584331d38 Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Tue, 7 May 2024 00:32:30 +0200 Subject: [PATCH 02/13] Update src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets Co-authored-by: Jonathan Peppers --- src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets index eef61efe827..e9082c0275d 100644 --- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets +++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets @@ -330,7 +330,7 @@ Copyright (C) 2011-2012 Xamarin. All rights reserved. false true True - False + False True <_AndroidUseMarshalMethods Condition=" '$(AndroidIncludeDebugSymbols)' == 'True' ">False <_AndroidUseMarshalMethods Condition=" '$(AndroidIncludeDebugSymbols)' != 'True' ">$(AndroidEnableMarshalMethods) From 459d4b1c0f7d6cf02f06db136e9113eb279f80f8 Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Wed, 15 May 2024 17:32:54 +0200 Subject: [PATCH 03/13] Update apkdesc files --- .../BuildReleaseArm64SimpleDotNet.apkdesc | 34 ++--- .../BuildReleaseArm64XFormsDotNet.apkdesc | 129 +++++++++--------- 2 files changed, 80 insertions(+), 83 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64SimpleDotNet.apkdesc b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64SimpleDotNet.apkdesc index f72d4cc5633..5023582ede5 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64SimpleDotNet.apkdesc +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64SimpleDotNet.apkdesc @@ -5,49 +5,49 @@ "Size": 3036 }, "classes.dex": { - "Size": 377764 + "Size": 19476 }, "lib/arm64-v8a/lib__Microsoft.Android.Resource.Designer.dll.so": { "Size": 1027 }, "lib/arm64-v8a/lib_Java.Interop.dll.so": { - "Size": 64234 + "Size": 64656 }, "lib/arm64-v8a/lib_Mono.Android.dll.so": { - "Size": 91668 + "Size": 92222 }, "lib/arm64-v8a/lib_Mono.Android.Runtime.dll.so": { - "Size": 5222 + "Size": 5153 }, "lib/arm64-v8a/lib_System.Console.dll.so": { - "Size": 6548 + "Size": 6538 }, "lib/arm64-v8a/lib_System.Linq.dll.so": { - "Size": 8483 + "Size": 8520 }, "lib/arm64-v8a/lib_System.Private.CoreLib.dll.so": { - "Size": 566421 + "Size": 571268 }, "lib/arm64-v8a/lib_System.Runtime.dll.so": { - "Size": 2552 + "Size": 2544 }, "lib/arm64-v8a/lib_System.Runtime.InteropServices.dll.so": { - "Size": 4025 + "Size": 4016 }, "lib/arm64-v8a/lib_UnnamedProject.dll.so": { - "Size": 2934 + "Size": 2931 }, "lib/arm64-v8a/libarc.bin.so": { - "Size": 1512 + "Size": 1586 }, "lib/arm64-v8a/libmono-component-marshal-ilgen.so": { "Size": 87352 }, "lib/arm64-v8a/libmonodroid.so": { - "Size": 354064 + "Size": 369976 }, "lib/arm64-v8a/libmonosgen-2.0.so": { - "Size": 3132992 + "Size": 3154144 }, "lib/arm64-v8a/libSystem.Globalization.Native.so": { "Size": 67248 @@ -56,16 +56,16 @@ "Size": 723560 }, "lib/arm64-v8a/libSystem.Native.so": { - "Size": 94720 + "Size": 95296 }, "lib/arm64-v8a/libSystem.Security.Cryptography.Native.Android.so": { "Size": 155568 }, "lib/arm64-v8a/libxamarin-app.so": { - "Size": 12656 + "Size": 17952 }, "META-INF/BNDLTOOL.RSA": { - "Size": 1221 + "Size": 1223 }, "META-INF/BNDLTOOL.SF": { "Size": 3266 @@ -98,5 +98,5 @@ "Size": 1904 } }, - "PackageSize": 2689557 + "PackageSize": 2640405 } \ No newline at end of file diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64XFormsDotNet.apkdesc b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64XFormsDotNet.apkdesc index 2d232c645fb..3e716e0cb17 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64XFormsDotNet.apkdesc +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64XFormsDotNet.apkdesc @@ -5,10 +5,7 @@ "Size": 6652 }, "classes.dex": { - "Size": 9440180 - }, - "classes2.dex": { - "Size": 150920 + "Size": 9170480 }, "kotlin/annotation/annotation.kotlin_builtins": { "Size": 928 @@ -35,160 +32,160 @@ "Size": 2279 }, "lib/arm64-v8a/lib_FormsViewGroup.dll.so": { - "Size": 8090 + "Size": 8330 }, "lib/arm64-v8a/lib_Java.Interop.dll.so": { - "Size": 72397 + "Size": 72813 }, "lib/arm64-v8a/lib_Mono.Android.dll.so": { - "Size": 458327 + "Size": 458945 }, "lib/arm64-v8a/lib_Mono.Android.Runtime.dll.so": { - "Size": 5222 + "Size": 5153 }, "lib/arm64-v8a/lib_mscorlib.dll.so": { - "Size": 3998 + "Size": 3990 }, "lib/arm64-v8a/lib_netstandard.dll.so": { - "Size": 5631 + "Size": 5623 }, "lib/arm64-v8a/lib_System.Collections.Concurrent.dll.so": { - "Size": 11520 + "Size": 11519 }, "lib/arm64-v8a/lib_System.Collections.dll.so": { - "Size": 15413 + "Size": 15412 }, "lib/arm64-v8a/lib_System.Collections.NonGeneric.dll.so": { - "Size": 7441 + "Size": 7442 }, "lib/arm64-v8a/lib_System.ComponentModel.dll.so": { - "Size": 1941 + "Size": 1934 }, "lib/arm64-v8a/lib_System.ComponentModel.Primitives.dll.so": { - "Size": 2555 + "Size": 2548 }, "lib/arm64-v8a/lib_System.ComponentModel.TypeConverter.dll.so": { - "Size": 6089 + "Size": 6083 }, "lib/arm64-v8a/lib_System.Console.dll.so": { - "Size": 6580 + "Size": 6570 }, "lib/arm64-v8a/lib_System.Core.dll.so": { - "Size": 1976 + "Size": 1968 }, "lib/arm64-v8a/lib_System.Diagnostics.DiagnosticSource.dll.so": { - "Size": 9065 + "Size": 9058 }, "lib/arm64-v8a/lib_System.Diagnostics.TraceSource.dll.so": { - "Size": 6552 + "Size": 6542 }, "lib/arm64-v8a/lib_System.dll.so": { - "Size": 2331 + "Size": 2324 }, "lib/arm64-v8a/lib_System.Drawing.dll.so": { - "Size": 1937 + "Size": 1931 }, "lib/arm64-v8a/lib_System.Drawing.Primitives.dll.so": { - "Size": 11968 + "Size": 11959 }, "lib/arm64-v8a/lib_System.IO.Compression.Brotli.dll.so": { - "Size": 11190 + "Size": 11140 }, "lib/arm64-v8a/lib_System.IO.Compression.dll.so": { - "Size": 15864 + "Size": 15861 }, "lib/arm64-v8a/lib_System.IO.IsolatedStorage.dll.so": { - "Size": 9897 + "Size": 9903 }, "lib/arm64-v8a/lib_System.Linq.dll.so": { - "Size": 20166 + "Size": 20206 }, "lib/arm64-v8a/lib_System.Linq.Expressions.dll.so": { - "Size": 164751 + "Size": 164581 }, "lib/arm64-v8a/lib_System.Net.Http.dll.so": { - "Size": 67559 + "Size": 68040 }, "lib/arm64-v8a/lib_System.Net.Primitives.dll.so": { - "Size": 22242 + "Size": 22268 }, "lib/arm64-v8a/lib_System.Net.Requests.dll.so": { - "Size": 3594 + "Size": 3587 }, "lib/arm64-v8a/lib_System.ObjectModel.dll.so": { - "Size": 8566 + "Size": 8562 }, "lib/arm64-v8a/lib_System.Private.CoreLib.dll.so": { - "Size": 872867 + "Size": 876167 }, "lib/arm64-v8a/lib_System.Private.DataContractSerialization.dll.so": { - "Size": 193446 + "Size": 193448 }, "lib/arm64-v8a/lib_System.Private.Uri.dll.so": { - "Size": 42910 + "Size": 42908 }, "lib/arm64-v8a/lib_System.Private.Xml.dll.so": { - "Size": 216089 + "Size": 216087 }, "lib/arm64-v8a/lib_System.Private.Xml.Linq.dll.so": { - "Size": 16631 + "Size": 16623 }, "lib/arm64-v8a/lib_System.Runtime.dll.so": { - "Size": 2709 + "Size": 2701 }, "lib/arm64-v8a/lib_System.Runtime.InteropServices.dll.so": { - "Size": 4025 + "Size": 4016 }, "lib/arm64-v8a/lib_System.Runtime.Serialization.dll.so": { - "Size": 1865 + "Size": 1857 }, "lib/arm64-v8a/lib_System.Runtime.Serialization.Formatters.dll.so": { - "Size": 2484 + "Size": 2478 }, "lib/arm64-v8a/lib_System.Runtime.Serialization.Primitives.dll.so": { - "Size": 3758 + "Size": 3751 }, "lib/arm64-v8a/lib_System.Security.Cryptography.dll.so": { - "Size": 8102 + "Size": 8449 }, "lib/arm64-v8a/lib_System.Text.RegularExpressions.dll.so": { - "Size": 161398 + "Size": 161288 }, "lib/arm64-v8a/lib_System.Xml.dll.so": { - "Size": 1760 + "Size": 1753 }, "lib/arm64-v8a/lib_System.Xml.Linq.dll.so": { - "Size": 1776 + "Size": 1769 }, "lib/arm64-v8a/lib_UnnamedProject.dll.so": { "Size": 5007 }, "lib/arm64-v8a/lib_Xamarin.AndroidX.Activity.dll.so": { - "Size": 16116 + "Size": 16323 }, "lib/arm64-v8a/lib_Xamarin.AndroidX.AppCompat.AppCompatResources.dll.so": { - "Size": 6216 + "Size": 6438 }, "lib/arm64-v8a/lib_Xamarin.AndroidX.AppCompat.dll.so": { - "Size": 138048 + "Size": 138385 }, "lib/arm64-v8a/lib_Xamarin.AndroidX.CardView.dll.so": { "Size": 6959 }, "lib/arm64-v8a/lib_Xamarin.AndroidX.CoordinatorLayout.dll.so": { - "Size": 17921 + "Size": 18150 }, "lib/arm64-v8a/lib_Xamarin.AndroidX.Core.dll.so": { - "Size": 126998 + "Size": 127206 }, "lib/arm64-v8a/lib_Xamarin.AndroidX.CursorAdapter.dll.so": { "Size": 8978 }, "lib/arm64-v8a/lib_Xamarin.AndroidX.DrawerLayout.dll.so": { - "Size": 15286 + "Size": 15504 }, "lib/arm64-v8a/lib_Xamarin.AndroidX.Fragment.dll.so": { - "Size": 51531 + "Size": 51881 }, "lib/arm64-v8a/lib_Xamarin.AndroidX.Legacy.Support.Core.UI.dll.so": { "Size": 6233 @@ -206,16 +203,16 @@ "Size": 13063 }, "lib/arm64-v8a/lib_Xamarin.AndroidX.RecyclerView.dll.so": { - "Size": 93541 + "Size": 93874 }, "lib/arm64-v8a/lib_Xamarin.AndroidX.SavedState.dll.so": { "Size": 5107 }, "lib/arm64-v8a/lib_Xamarin.AndroidX.SwipeRefreshLayout.dll.so": { - "Size": 13946 + "Size": 14226 }, "lib/arm64-v8a/lib_Xamarin.AndroidX.ViewPager.dll.so": { - "Size": 19014 + "Size": 19353 }, "lib/arm64-v8a/lib_Xamarin.Forms.Core.dll.so": { "Size": 563905 @@ -230,19 +227,19 @@ "Size": 63542 }, "lib/arm64-v8a/lib_Xamarin.Google.Android.Material.dll.so": { - "Size": 66169 + "Size": 66529 }, "lib/arm64-v8a/libarc.bin.so": { - "Size": 1512 + "Size": 1586 }, "lib/arm64-v8a/libmono-component-marshal-ilgen.so": { "Size": 87352 }, "lib/arm64-v8a/libmonodroid.so": { - "Size": 354064 + "Size": 369976 }, "lib/arm64-v8a/libmonosgen-2.0.so": { - "Size": 3132992 + "Size": 3154144 }, "lib/arm64-v8a/libSystem.Globalization.Native.so": { "Size": 67248 @@ -251,13 +248,13 @@ "Size": 723560 }, "lib/arm64-v8a/libSystem.Native.so": { - "Size": 94720 + "Size": 95296 }, "lib/arm64-v8a/libSystem.Security.Cryptography.Native.Android.so": { "Size": 155568 }, "lib/arm64-v8a/libxamarin-app.so": { - "Size": 118880 + "Size": 348336 }, "META-INF/androidx.activity_activity.version": { "Size": 6 @@ -410,10 +407,10 @@ "Size": 6 }, "META-INF/BNDLTOOL.RSA": { - "Size": 1223 + "Size": 1221 }, "META-INF/BNDLTOOL.SF": { - "Size": 98298 + "Size": 98214 }, "META-INF/com.android.tools/proguard/coroutines.pro": { "Size": 1345 @@ -440,7 +437,7 @@ "Size": 5 }, "META-INF/MANIFEST.MF": { - "Size": 98171 + "Size": 98087 }, "META-INF/maven/com.google.guava/listenablefuture/pom.properties": { "Size": 96 @@ -2480,5 +2477,5 @@ "Size": 812848 } }, - "PackageSize": 10218536 + "PackageSize": 10193902 } \ No newline at end of file From 77cf56044718b375e2b9972ae3255023faea71df Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Fri, 17 May 2024 15:52:42 +0200 Subject: [PATCH 04/13] Disable marshal methods when IL stripping is enabled --- src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets index e9082c0275d..a07dc613633 100644 --- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets +++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets @@ -330,7 +330,7 @@ Copyright (C) 2011-2012 Xamarin. All rights reserved. false true True - False + False True <_AndroidUseMarshalMethods Condition=" '$(AndroidIncludeDebugSymbols)' == 'True' ">False <_AndroidUseMarshalMethods Condition=" '$(AndroidIncludeDebugSymbols)' != 'True' ">$(AndroidEnableMarshalMethods) From 9ea817fa45ea0ead4ffbeeb4588a27efb28353fe Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Fri, 17 May 2024 17:16:59 +0200 Subject: [PATCH 05/13] Hush MSBuild warnings which break some tests --- src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets index a07dc613633..fc8efa953e2 100644 --- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets +++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets @@ -330,7 +330,7 @@ Copyright (C) 2011-2012 Xamarin. All rights reserved. false true True - False + False True <_AndroidUseMarshalMethods Condition=" '$(AndroidIncludeDebugSymbols)' == 'True' ">False <_AndroidUseMarshalMethods Condition=" '$(AndroidIncludeDebugSymbols)' != 'True' ">$(AndroidEnableMarshalMethods) From 8c74570edf29a844b00094ddf061c2f15bcddde1 Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Fri, 17 May 2024 18:41:59 +0200 Subject: [PATCH 06/13] Update apkdesc --- .../BuildReleaseArm64SimpleDotNet.apkdesc | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64SimpleDotNet.apkdesc b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64SimpleDotNet.apkdesc index 0191375dc54..4bf05607623 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64SimpleDotNet.apkdesc +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64SimpleDotNet.apkdesc @@ -5,28 +5,28 @@ "Size": 3036 }, "classes.dex": { - "Size": 377764 + "Size": 19476 }, "lib/arm64-v8a/lib__Microsoft.Android.Resource.Designer.dll.so": { "Size": 1027 }, "lib/arm64-v8a/lib_Java.Interop.dll.so": { - "Size": 64231 + "Size": 64655 }, "lib/arm64-v8a/lib_Mono.Android.dll.so": { - "Size": 91590 + "Size": 92217 }, "lib/arm64-v8a/lib_Mono.Android.Runtime.dll.so": { - "Size": 5315 + "Size": 5320 }, "lib/arm64-v8a/lib_System.Console.dll.so": { - "Size": 6539 + "Size": 6541 }, "lib/arm64-v8a/lib_System.Linq.dll.so": { - "Size": 8525 + "Size": 8524 }, "lib/arm64-v8a/lib_System.Private.CoreLib.dll.so": { - "Size": 570166 + "Size": 571267 }, "lib/arm64-v8a/lib_System.Runtime.dll.so": { "Size": 2544 @@ -35,7 +35,7 @@ "Size": 4020 }, "lib/arm64-v8a/lib_UnnamedProject.dll.so": { - "Size": 2933 + "Size": 2931 }, "lib/arm64-v8a/libarc.bin.so": { "Size": 1586 @@ -44,10 +44,10 @@ "Size": 87352 }, "lib/arm64-v8a/libmonodroid.so": { - "Size": 476432 + "Size": 492104 }, "lib/arm64-v8a/libmonosgen-2.0.so": { - "Size": 3138768 + "Size": 3154304 }, "lib/arm64-v8a/libSystem.Globalization.Native.so": { "Size": 67248 @@ -56,16 +56,16 @@ "Size": 723560 }, "lib/arm64-v8a/libSystem.Native.so": { - "Size": 94720 + "Size": 95296 }, "lib/arm64-v8a/libSystem.Security.Cryptography.Native.Android.so": { "Size": 155568 }, "lib/arm64-v8a/libxamarin-app.so": { - "Size": 12696 + "Size": 17952 }, "META-INF/BNDLTOOL.RSA": { - "Size": 1221 + "Size": 1223 }, "META-INF/BNDLTOOL.SF": { "Size": 3266 @@ -98,5 +98,5 @@ "Size": 1904 } }, - "PackageSize": 2742805 + "PackageSize": 2681365 } \ No newline at end of file From ac317ff8c461895d9e551868546fc793d5b1f2ce Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Fri, 17 May 2024 19:09:22 +0200 Subject: [PATCH 07/13] Update apkdesc --- .../BuildReleaseArm64XFormsDotNet.apkdesc | 113 +++++++++--------- 1 file changed, 55 insertions(+), 58 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64XFormsDotNet.apkdesc b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64XFormsDotNet.apkdesc index 1fff2e3e9e1..0ff5edd31a0 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64XFormsDotNet.apkdesc +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64XFormsDotNet.apkdesc @@ -5,10 +5,7 @@ "Size": 6652 }, "classes.dex": { - "Size": 9440180 - }, - "classes2.dex": { - "Size": 150920 + "Size": 9170480 }, "kotlin/annotation/annotation.kotlin_builtins": { "Size": 928 @@ -35,52 +32,52 @@ "Size": 2279 }, "lib/arm64-v8a/lib_FormsViewGroup.dll.so": { - "Size": 8090 + "Size": 8330 }, "lib/arm64-v8a/lib_Java.Interop.dll.so": { - "Size": 72406 + "Size": 72813 }, "lib/arm64-v8a/lib_Mono.Android.dll.so": { - "Size": 458238 + "Size": 458967 }, "lib/arm64-v8a/lib_Mono.Android.Runtime.dll.so": { - "Size": 5315 + "Size": 5320 }, "lib/arm64-v8a/lib_mscorlib.dll.so": { - "Size": 3991 + "Size": 3989 }, "lib/arm64-v8a/lib_netstandard.dll.so": { - "Size": 5625 + "Size": 5623 }, "lib/arm64-v8a/lib_System.Collections.Concurrent.dll.so": { - "Size": 11516 + "Size": 11517 }, "lib/arm64-v8a/lib_System.Collections.dll.so": { "Size": 15411 }, "lib/arm64-v8a/lib_System.Collections.NonGeneric.dll.so": { - "Size": 7441 + "Size": 7438 }, "lib/arm64-v8a/lib_System.ComponentModel.dll.so": { - "Size": 1933 + "Size": 1932 }, "lib/arm64-v8a/lib_System.ComponentModel.Primitives.dll.so": { "Size": 2547 }, "lib/arm64-v8a/lib_System.ComponentModel.TypeConverter.dll.so": { - "Size": 6081 + "Size": 6082 }, "lib/arm64-v8a/lib_System.Console.dll.so": { - "Size": 6571 + "Size": 6573 }, "lib/arm64-v8a/lib_System.Core.dll.so": { - "Size": 1969 + "Size": 1968 }, "lib/arm64-v8a/lib_System.Diagnostics.DiagnosticSource.dll.so": { - "Size": 9060 + "Size": 9059 }, "lib/arm64-v8a/lib_System.Diagnostics.TraceSource.dll.so": { - "Size": 6545 + "Size": 6544 }, "lib/arm64-v8a/lib_System.dll.so": { "Size": 2325 @@ -89,106 +86,106 @@ "Size": 1930 }, "lib/arm64-v8a/lib_System.Drawing.Primitives.dll.so": { - "Size": 11963 + "Size": 11962 }, "lib/arm64-v8a/lib_System.IO.Compression.Brotli.dll.so": { - "Size": 11183 + "Size": 11143 }, "lib/arm64-v8a/lib_System.IO.Compression.dll.so": { - "Size": 15859 + "Size": 15861 }, "lib/arm64-v8a/lib_System.IO.IsolatedStorage.dll.so": { - "Size": 9902 + "Size": 9901 }, "lib/arm64-v8a/lib_System.Linq.dll.so": { - "Size": 20211 + "Size": 20210 }, "lib/arm64-v8a/lib_System.Linq.Expressions.dll.so": { - "Size": 164628 + "Size": 164581 }, "lib/arm64-v8a/lib_System.Net.Http.dll.so": { - "Size": 68041 + "Size": 68045 }, "lib/arm64-v8a/lib_System.Net.Primitives.dll.so": { - "Size": 22237 + "Size": 22265 }, "lib/arm64-v8a/lib_System.Net.Requests.dll.so": { - "Size": 3587 + "Size": 3586 }, "lib/arm64-v8a/lib_System.ObjectModel.dll.so": { - "Size": 8563 + "Size": 8561 }, "lib/arm64-v8a/lib_System.Private.CoreLib.dll.so": { - "Size": 874803 + "Size": 876073 }, "lib/arm64-v8a/lib_System.Private.DataContractSerialization.dll.so": { - "Size": 193451 + "Size": 193452 }, "lib/arm64-v8a/lib_System.Private.Uri.dll.so": { - "Size": 42901 + "Size": 42907 }, "lib/arm64-v8a/lib_System.Private.Xml.dll.so": { - "Size": 215939 + "Size": 216091 }, "lib/arm64-v8a/lib_System.Private.Xml.Linq.dll.so": { - "Size": 16623 + "Size": 16621 }, "lib/arm64-v8a/lib_System.Runtime.dll.so": { - "Size": 2701 + "Size": 2700 }, "lib/arm64-v8a/lib_System.Runtime.InteropServices.dll.so": { "Size": 4020 }, "lib/arm64-v8a/lib_System.Runtime.Serialization.dll.so": { - "Size": 1857 + "Size": 1856 }, "lib/arm64-v8a/lib_System.Runtime.Serialization.Formatters.dll.so": { "Size": 2477 }, "lib/arm64-v8a/lib_System.Runtime.Serialization.Primitives.dll.so": { - "Size": 3750 + "Size": 3749 }, "lib/arm64-v8a/lib_System.Security.Cryptography.dll.so": { - "Size": 8101 + "Size": 8447 }, "lib/arm64-v8a/lib_System.Text.RegularExpressions.dll.so": { - "Size": 161254 + "Size": 161293 }, "lib/arm64-v8a/lib_System.Xml.dll.so": { "Size": 1752 }, "lib/arm64-v8a/lib_System.Xml.Linq.dll.so": { - "Size": 1768 + "Size": 1767 }, "lib/arm64-v8a/lib_UnnamedProject.dll.so": { - "Size": 5007 + "Size": 4998 }, "lib/arm64-v8a/lib_Xamarin.AndroidX.Activity.dll.so": { - "Size": 16116 + "Size": 16323 }, "lib/arm64-v8a/lib_Xamarin.AndroidX.AppCompat.AppCompatResources.dll.so": { - "Size": 6216 + "Size": 6438 }, "lib/arm64-v8a/lib_Xamarin.AndroidX.AppCompat.dll.so": { - "Size": 138048 + "Size": 138385 }, "lib/arm64-v8a/lib_Xamarin.AndroidX.CardView.dll.so": { "Size": 6959 }, "lib/arm64-v8a/lib_Xamarin.AndroidX.CoordinatorLayout.dll.so": { - "Size": 17921 + "Size": 18150 }, "lib/arm64-v8a/lib_Xamarin.AndroidX.Core.dll.so": { - "Size": 126998 + "Size": 127206 }, "lib/arm64-v8a/lib_Xamarin.AndroidX.CursorAdapter.dll.so": { "Size": 8978 }, "lib/arm64-v8a/lib_Xamarin.AndroidX.DrawerLayout.dll.so": { - "Size": 15286 + "Size": 15504 }, "lib/arm64-v8a/lib_Xamarin.AndroidX.Fragment.dll.so": { - "Size": 51531 + "Size": 51881 }, "lib/arm64-v8a/lib_Xamarin.AndroidX.Legacy.Support.Core.UI.dll.so": { "Size": 6233 @@ -206,16 +203,16 @@ "Size": 13063 }, "lib/arm64-v8a/lib_Xamarin.AndroidX.RecyclerView.dll.so": { - "Size": 93541 + "Size": 93874 }, "lib/arm64-v8a/lib_Xamarin.AndroidX.SavedState.dll.so": { "Size": 5107 }, "lib/arm64-v8a/lib_Xamarin.AndroidX.SwipeRefreshLayout.dll.so": { - "Size": 13946 + "Size": 14226 }, "lib/arm64-v8a/lib_Xamarin.AndroidX.ViewPager.dll.so": { - "Size": 19014 + "Size": 19353 }, "lib/arm64-v8a/lib_Xamarin.Forms.Core.dll.so": { "Size": 563905 @@ -230,7 +227,7 @@ "Size": 63542 }, "lib/arm64-v8a/lib_Xamarin.Google.Android.Material.dll.so": { - "Size": 66169 + "Size": 66529 }, "lib/arm64-v8a/libarc.bin.so": { "Size": 1586 @@ -239,10 +236,10 @@ "Size": 87352 }, "lib/arm64-v8a/libmonodroid.so": { - "Size": 476432 + "Size": 492104 }, "lib/arm64-v8a/libmonosgen-2.0.so": { - "Size": 3138768 + "Size": 3154304 }, "lib/arm64-v8a/libSystem.Globalization.Native.so": { "Size": 67248 @@ -251,13 +248,13 @@ "Size": 723560 }, "lib/arm64-v8a/libSystem.Native.so": { - "Size": 94720 + "Size": 95296 }, "lib/arm64-v8a/libSystem.Security.Cryptography.Native.Android.so": { "Size": 155568 }, "lib/arm64-v8a/libxamarin-app.so": { - "Size": 118920 + "Size": 348336 }, "META-INF/androidx.activity_activity.version": { "Size": 6 @@ -413,7 +410,7 @@ "Size": 1223 }, "META-INF/BNDLTOOL.SF": { - "Size": 98298 + "Size": 98214 }, "META-INF/com.android.tools/proguard/coroutines.pro": { "Size": 1345 @@ -440,7 +437,7 @@ "Size": 5 }, "META-INF/MANIFEST.MF": { - "Size": 98171 + "Size": 98087 }, "META-INF/maven/com.google.guava/listenablefuture/pom.properties": { "Size": 96 @@ -2480,5 +2477,5 @@ "Size": 812848 } }, - "PackageSize": 10271784 + "PackageSize": 10238958 } \ No newline at end of file From 54d04f105a61705f513bf30a0aaf231fcca545c5 Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Tue, 21 May 2024 18:12:56 +0200 Subject: [PATCH 08/13] Re-enable marshal methods when ILStrip is enabled The reason it broke before was that the `EnableAndroidStripILAfterAOTFalse` runs in two steps - first it builds the app, then it installs it (using the `Install` target). During the **build**, marshal methods classifier works as it should and, consequently, marshal methods rewriter modifies the assemblies - removes connector methods, generates wrapper methods etc etc. `_GenerateJavaStubs`, the target which invokes marshal methods processing, eventually creates a stamp file it then uses to decide whether all the inputs are up to date with regards to their corresponding outputs. However, during the **build** phase, at the end, `ILStrip` runs which modifies assemblies **after** marshal methods processing is done. This results in the `Install` target invoking the `_GenerateJavaStubs` target again and MSBuild notices that the stamp file is older than some of the inputs - assemblies modified by `ILStrip` after `_GenerateJavaStubs` created the stamp file. This causes the target to run completely and, in effect, the whole marshal methods processing is initiated again - but this time the connector methods and anything else the classifier looks for aren't there, because they were previously removed by the rewriter during the **build** phase. This, in turn, causes the classifier to decide that types need to be registered dynamically, but they can't because the connector methods which are required to create delegates are no longer there and we get a runtime crash instead. The solution is to update the `_GenerateJavaStubs` stamp file after `ILStrip` is done, if it modified any assemblies. One problem with that is that the path to the stamp file's directory is different when `_GenerateJavaStubs` runs during the build phase, and when AOT and `ILStrip` run. In the former case, the stamp file is created in `obj/${Configuration}/stamp` directory, in the latter case in `obj/${Configuration}/android-ARCH/stamp` directory but **both** locations are initialized in the same spot - at the top of `Xamarin.Android.Common.targets` file. In effect, after `ILStrip` runs, we don't really know where `_GenerateJavaStubs` created its stamp file. The workaround involves taking advantage of the fact that we know where the stamp directories are in relation to each other. It's a hack, but if the relation is somehow broken, the `EnableAndroidStripILAfterAOTFalse` test will break again. --- .../targets/Microsoft.Android.Sdk.Aot.targets | 17 +++++++++++++++++ .../Xamarin.Android.Common.targets | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.Aot.targets b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.Aot.targets index 40446704aff..2c1bf1a859e 100644 --- a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.Aot.targets +++ b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.Aot.targets @@ -143,6 +143,23 @@ They run in a context of an inner build with a single $(RuntimeIdentifier). SourceFiles="@(_ILStripUpdatedAssemblies)" DestinationFiles="@(_ILStripUpdatedAssemblies->'%(UntrimmedAssemblyFilePath)')" /> + + <_UpdateStamp Include="@(_ILStripUpdatedAssemblies)" Condition=" '%(_ILStripUpdatedAssemblies.ILStripped)' == 'true' " /> + + + + false true True - False + False True <_AndroidUseMarshalMethods Condition=" '$(AndroidIncludeDebugSymbols)' == 'True' ">False <_AndroidUseMarshalMethods Condition=" '$(AndroidIncludeDebugSymbols)' != 'True' ">$(AndroidEnableMarshalMethods) From 2127b042d5545d224eb5be34c7545f4fd1af8144 Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Tue, 21 May 2024 19:13:48 +0200 Subject: [PATCH 09/13] Create the stamp dir first --- .../targets/Microsoft.Android.Sdk.Aot.targets | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.Aot.targets b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.Aot.targets index 2c1bf1a859e..a9d5bee8916 100644 --- a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.Aot.targets +++ b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.Aot.targets @@ -155,9 +155,16 @@ They run in a context of an inner build with a single $(RuntimeIdentifier). However, there should be a better way to do it... Ideally, when marshal methods are enabled **nothing** should modify any assemblies after marshal method classifier and rewriter runs. --> + + <_StampDir>$(_AndroidStampDirectory)\..\..\stamp + + Date: Wed, 22 May 2024 11:18:05 +0200 Subject: [PATCH 10/13] Be careful to touch the stamp file if ILStrip actually ran... ...or else it breaks `AndroidManifest.xml` merging in some test cases --- .../targets/Microsoft.Android.Sdk.Aot.targets | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.Aot.targets b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.Aot.targets index a9d5bee8916..ae423dac776 100644 --- a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.Aot.targets +++ b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.Aot.targets @@ -144,7 +144,7 @@ They run in a context of an inner build with a single $(RuntimeIdentifier). DestinationFiles="@(_ILStripUpdatedAssemblies->'%(UntrimmedAssemblyFilePath)')" /> - <_UpdateStamp Include="@(_ILStripUpdatedAssemblies)" Condition=" '%(_ILStripUpdatedAssemblies.ILStripped)' == 'true' " /> + <_UpdateStamp Include="@(_ILStripUpdatedAssemblies)" Condition=" '$(AndroidStripILAfterAOT)' == 'true' and '%(_ILStripUpdatedAssemblies.ILStripped)' == 'true' " />