Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Xamarin.Android.Build.Tasks] implement $(AndroidStripILAfterAOT) #8172

Merged
merged 14 commits into from
Aug 22, 2023

Conversation

jonathanpeppers
Copy link
Member

@jonathanpeppers jonathanpeppers commented Jul 6, 2023

Context: dotnet/runtime#86722

This adds an <ILStrip/> step after the <MonoAOTCompiler/> task.

This trims away IL of AOT-compiled methods. This is WIP.

Builds work currently, but the app crashes at runtime with:

07-06 16:57:07.413  8865  8865 E companyname.foo: * Assertion at /__w/1/s/src/mono/mono/mini/mini-trampolines.c:1416, condition `invoke' not met

The above crash has been resolved.

Fixes: dotnet/runtime#88538

Context: dotnet/runtime#86722

This adds an `<ILStrip/>` step after the `<MonoAOTCompiler/>` task.

This trims away IL of AOT-compiled methods. This is WIP.

Builds work currently, but the app crashes at runtime with:

    07-06 16:57:07.413  8865  8865 E companyname.foo: * Assertion at /__w/1/s/src/mono/mono/mini/mini-trampolines.c:1416, condition `invoke' not met
@fanyang-mono
Copy link
Member

Running _RemoveRegisterAttribute task before MonoAOTCompiler and ILStrip would probably fix this issue. It worked when I tested it with disabling RemoveRegisterAttribute locally.

@fanyang-mono
Copy link
Member

I updated this PR with my newest change, which renamed two parameters. I am not sure when exactly it will arrive at Xamarin/Android. The change was in this PR (dotnet/runtime#88926)

@jonathanpeppers jonathanpeppers marked this pull request as ready for review August 16, 2023 19:07
@@ -1303,6 +1303,15 @@ This is only used when building `system` applications.

Support for this property was added in Xamarin.Android 11.3.

## AndroidStripIL
Copy link
Member Author

@jonathanpeppers jonathanpeppers Aug 16, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If others have a better idea on the name, basically you use this in combination with AOT and it will strip most IL that was AOT'd.

For best results, we'd turn off AndroidEnableProfiledAot by default -- so AndroidStripIL will AOT & Strip most of the IL as a good default setting.

@fanyang-mono has some example .apk sizes from a dotnet new android project:

AndroidStripIL AndroidEnableProfiledAot App size
false true 7.7M
true true 7.7M
false false 8.4M
true false 8.1M

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

$(AndroidStripILAfterAOT) seems logical to align?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changed parameter name to AndroidStripILAfterAOT

@fanyang-mono
Copy link
Member

fanyang-mono commented Aug 18, 2023

Xamarin.Android-PR (MAUI Tests MAUI Integration) failed because it failed to install maui workload. It is a known issue and unrelated to this PR.

@@ -1075,5 +1075,24 @@ public void SupportDesugaringStaticInterfaceMethods ()
);
}

[Test]
public void EnableAndroidStripILAfterAOT ()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Possibly silly question, but is there any way to test that $(AndroidStripILAfterAOT)=True actually does something? It could be a no-op and this test would still succeed!

Perhaps we should crack open the linked "app.dll" assembly and verify that e.g. MainActivity.OnCreate() has no body?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

or a null method body, yes.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That would be great, if we could create a test like that.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jonathanpeppers: EnableAndroidStripILAfterAOT() should also test the "profiled AOT/don't AOT everything" case.

DisableParallelStripping="$(_DisableParallelAot)">
<Output TaskParameter="TrimmedAssemblies" ItemName="_ILStripTrimmedAssemblies" />
</ILStrip>
<Move
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This <Move/> feels absurd to me: @(_ILStripTrimmedAssemblies) is an output parameter, so I would normally intuit/assume that %(_ILStripTrimmedAssemblies.Identity) is the file that was created. However, this <Move/> implies that %(_ILStripTrimmedAssemblies.Identity) has not in fact been created, and instead what was created is %(_ILStripTrimmedAssemblies.TrimmedAssemblyFileName), which must be moved to %(_ILStripTrimmedAssemblies.Identity).

Does this make sense to anyone? Why was <ILStrip/> defined this way?

Copy link
Member

@fanyang-mono fanyang-mono Aug 18, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The goal of ILStrip is to trim IL code away from the assemblies which were AOT'ed. However, not all AOT'ed assemblies might be trimmable. That's why we have _ILStripTrimmedAssemblies. ILStrip also doesn't overwrite existing assemblies with the trimmed ones. It is designed this way, in case %(_ILStripTrimmedAssemblies.Identity) are not the ones that you want to replace with the trimmed ones. They could be the ones which live in other directories. And ILStrip could possibly has no knowledge of that.

Here for System.Private.CoreLib.dll,
%(_ILStripTrimmedAssemblies.Identity) is <a_path>/System.Private.CoreLib.dll
%(_ILStripTrimmedAssemblies.TrimmedAssemblyFileName) is <a_path>/System.Private.CoreLib_trimmed.dll

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@fanyang-mono: how does <ILStrip/> know which method bodies it can remove? I see that the <MonoAOTCompiler/> invocation was updated to add a MonoAOTCompiler.TrimmingEligibleMethodsOutputDirectory property, but how does <ILStrip/> konw about the $(IntermediateOutputPath)tokens directory?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The output _MonoAOTCompiledAssemblies from MonoAOTCompiler has a metadata MethodTokenFile. It stores the trimmable method token for the corresponding assembly.

jonpryor and others added 3 commits August 18, 2023 11:56
Rewrite for consistency with the "flow" of other properties.
`HasBody` was true and `Body.Instructions.Count` was 0
var type = assembly.MainModule.GetType ($"{proj.RootNamespace}.MainActivity");
var method = type.Methods.FirstOrDefault (p => p.Name == "OnCreate");
Assert.IsNotNull (method, $"{proj.RootNamespace}.MainActivity.OnCreate should exist!");
Assert.IsTrue (!method.HasBody || method.Body.Instructions.Count == 0, $"{proj.RootNamespace}.MainActivity.OnCreate should have no body!");
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

HasBody was true and Body.Instructions.Count was 0.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is probably expected, since I only zero'ed out method body and preserved method method header.

@jonpryor
Copy link
Member

jonpryor commented Aug 21, 2023

[Xamarin.Android.Build.Tasks] add $(AndroidStripILAfterAOT) (#8172)

Context: https://github.com/xamarin/monodroid/commit/388bf4b392c59fc35f51c5eadd0a6218a37a394c
Context: 59ec488b4005a09fc0e5f330f217e78c3fa14724
Context: c929289a7b77ecbc90c3e10aa55f9f3027ed3345
Context: 88215f93fdcf14fa1a2aebbb499c09c6bdb8fa8c
Context: https://github.com/dotnet/runtime/pull/86722

Once Upon A Time™ we had a brilliant thought: if AOT pre-compiles C#
methods, do we need the managed method anymore?  Removing the C#
method body would allow assemblies to be smaller.  ("Even better",
iOS does this too!  Why Can't Android™?!)

While the idea is straightforward, implementation was not: iOS uses 
["Full" AOT][0], which AOT's *all* methods into a form that doesn't
require a runtime JIT.  This allowed iOS to run [`cil-strip`][1],
removing all method bodies from all managed types.

At the time, Xamarin.Android only supported "normal" AOT, and normal
AOT requires a JIT for certain constructs such as generic types and
generic methods.  This meant that attempting to run `cil-strip`
would result in runtime errors if a method body was removed that was
actually required at runtime.  (This was particularly bad because
`cil-strip` could only remove *all* method bodies, not some!)

This limitation was relaxed with the introduction of "Hybrid" AOT,
which is "Full while supporting a JIT".  This meant that *all*
methods could be AOT'd without requiring a JIT, which allowed method
bodies to be removed; see xamarin/monodroid@388bf4b3.

Unfortunately, this wasn't a great long-term solution:

 1. Hybrid AOT was restricted to Visual Studio Enterprise customers.
 2. Enabling Hybrid AOT would slow down Release configuration builds.
 3. Hybrid AOT would result in larger apps.
 4. As a consequence of (1), it didn't get as much testing
 5. `cil-strip` usage was dropped as part of the .NET 5+ migration
    (c929289a)

Re-intoduce IL stripping for .NET 8.

Add a new `$(AndroidStripILAfterAOT)` MSBuild property.  When true,
the `<MonoAOTCompiler/>` task will track which method bodies
were actually AOT'd, storing this information into
`%(_MonoAOTCompiledAssemblies.MethodTokenFile)`, and the new
`<ILStrip/>` task will update the input assemblies, removing all
method bodies that can be removed.

By default setting `$(AndroidStripILAfterAOT)`=true will *override*
the default `$(AndroidEnableProfiledAot)` setting, allowing all
trimmable AOT'd methods to be removed.  Profiled AOT and IL stripping
can be used together by explicitly setting both within the `.csproj`:

	<PropertyGroup>
	  <AndroidStripILAfterAOT>true</AndroidStripILAfterAOT>
	  <AndroidEnableProfiledAot>true</AndroidEnableProfiledAot>
	</PropertyGroup>

`.apk` size results for a `dotnet new android` app:

| `$(AndroidStripILAfterAOT)` | `$(AndroidEnableProfiledAot)` | `.apk` size   |
| --------------------------- | ----------------------------- | ------------- |
| true                        | true                          | 7.7MB         |
| true                        | false                         | 8.1MB         |
| false                       | true                          | 7.7MB         |
| false                       | false                         | 8.4MB         |

Note that `$(AndroidStripILAfterAOT)`=false and
`$(AndroidEnableProfiledAot)`=true is the *default* Release
configuration environment, for 7.7MB.

A project that *only* sets `$(AndroidStripILAfterAOT)`=true implicitly
sets `$(AndroidEnableProfiledAot)`=false, resulting in an 8.1MB app.

[0]: https://www.mono-project.com/docs/advanced/aot/#full-aot
[1]: https://github.com/mono/mono/tree/2020-02/mcs/tools/cil-strip

@jonpryor jonpryor merged commit 82a4092 into dotnet:main Aug 22, 2023
45 of 47 checks passed
jonathanpeppers added a commit that referenced this pull request Aug 22, 2023
Context: xamarin/monodroid@388bf4b
Context: 59ec488
Context: c929289
Context: 88215f9
Context: dotnet/runtime#86722
Context: dotnet/runtime#44855

Once Upon A Time™ we had a brilliant thought: if AOT pre-compiles C#
methods, do we need the managed method anymore?  Removing the C#
method body would allow assemblies to be smaller.  ("Even better",
iOS does this too!  Why Can't Android™?!)

While the idea is straightforward, implementation was not: iOS uses 
["Full" AOT][0], which AOT's *all* methods into a form that doesn't
require a runtime JIT.  This allowed iOS to run [`cil-strip`][1],
removing all method bodies from all managed types.

At the time, Xamarin.Android only supported "normal" AOT, and normal
AOT requires a JIT for certain constructs such as generic types and
generic methods.  This meant that attempting to run `cil-strip`
would result in runtime errors if a method body was removed that was
actually required at runtime.  (This was particularly bad because
`cil-strip` could only remove *all* method bodies, not some!)

This limitation was relaxed with the introduction of "Hybrid" AOT,
which is "Full AOT while supporting a JIT".  This meant that *all*
methods could be AOT'd without requiring a JIT, which allowed method
bodies to be removed; see xamarin/monodroid@388bf4b3.

Unfortunately, this wasn't a great long-term solution:

 1. Hybrid AOT was restricted to Visual Studio Enterprise customers.
 2. Enabling Hybrid AOT would slow down Release configuration builds.
 3. Hybrid AOT would result in larger apps.
 4. As a consequence of (1), it didn't get as much testing
 5. `cil-strip` usage was dropped as part of the .NET 5+ migration
    (c929289)

Re-intoduce IL stripping for .NET 8.

Add a new `$(AndroidStripILAfterAOT)` MSBuild property.  When true,
the `<MonoAOTCompiler/>` task will track which method bodies
were actually AOT'd, storing this information into
`%(_MonoAOTCompiledAssemblies.MethodTokenFile)`, and the new
`<ILStrip/>` task will update the input assemblies, removing all
method bodies that can be removed.

By default setting `$(AndroidStripILAfterAOT)`=true will *override*
the default `$(AndroidEnableProfiledAot)` setting, allowing all
trimmable AOT'd methods to be removed.  Profiled AOT and IL stripping
can be used together by explicitly setting both within the `.csproj`:

	<PropertyGroup>
	  <AndroidStripILAfterAOT>true</AndroidStripILAfterAOT>
	  <AndroidEnableProfiledAot>true</AndroidEnableProfiledAot>
	</PropertyGroup>

`.apk` size results for a `dotnet new android` app:

| `$(AndroidStripILAfterAOT)` | `$(AndroidEnableProfiledAot)` | `.apk` size   |
| --------------------------- | ----------------------------- | ------------- |
| true                        | true                          | 7.7MB         |
| true                        | false                         | 8.1MB         |
| false                       | true                          | 7.7MB         |
| false                       | false                         | 8.4MB         |

Note that `$(AndroidStripILAfterAOT)`=false and
`$(AndroidEnableProfiledAot)`=true is the *default* Release
configuration environment, for 7.7MB.

A project that *only* sets `$(AndroidStripILAfterAOT)`=true implicitly
sets `$(AndroidEnableProfiledAot)`=false, resulting in an 8.1MB app.

Co-authored-by: Fan Yang <yangfan@microsoft.com>

[0]: https://www.mono-project.com/docs/advanced/aot/#full-aot
[1]: https://github.com/mono/mono/tree/2020-02/mcs/tools/cil-strip
@jonathanpeppers jonathanpeppers deleted the AndroidStripIL branch August 30, 2023 17:20
grendello added a commit to grendello/xamarin-android that referenced this pull request Sep 4, 2023
* main: (57 commits)
  Bump to dotnet/installer@2809943e7a 8.0.100-rc.2.23431.5 (dotnet#8317)
  [build] Use Microsoft OpenJDK 17.0.8 (dotnet#8309)
  [Mono.Android] Add missing `[Flags]` attribute for generated enums. (dotnet#8310)
  Bump to dotnet/installer@c5e45fd659 8.0.100-rc.2.23427.4 (dotnet#8305)
  [xaprepare] Improve dotnet-install script logging (dotnet#8312)
  [xaprepare] Fix dotnet-install script size check (dotnet#8311)
  [Xamarin.Android.Build.Tasks] improve net6.0 "out of support" message (dotnet#8307)
  [monodroid] Fix the EnableNativeAnalyzers build (dotnet#8293)
  Bump to dotnet/installer@56d8c6497c 8.0.100-rc.2.23422.31 (dotnet#8291)
  [Xamarin.Android.Build.Tasks] Fix APT2264 error on Windows. (dotnet#8289)
  [Mono.Android] Marshal .NET stack trace to Throwable.getStackTrace() (dotnet#8185)
  [tests] Skip sign check when installing MAUI (dotnet#8288)
  Bump to xamarin/monodroid@057b17fe (dotnet#8286)
  [Xamarin.Android.Build.Tasks] add $(AndroidStripILAfterAOT) (dotnet#8172)
  Bump to dotnet/installer@ec2c1ec1b1 8.0.100-rc.2.23420.6 (dotnet#8281)
  Bump to dotnet/installer@001d8e4465 8.0.100-rc.2.23417.14 (dotnet#8276)
  [Mono.Android] [IntentFilter] pathSuffix & pathAdvancedPattern  (dotnet#8261)
  $(AndroidPackVersionSuffix)=rc.2; net8 is 34.0.0-rc.2 (dotnet#8278)
  Bump to xamarin/xamarin-android-tools/main@52f0866 (dotnet#8241)
  [build] set file extension for common `ToolExe` values (dotnet#8267)
  ...
grendello added a commit to grendello/xamarin-android that referenced this pull request Sep 4, 2023
* main: (102 commits)
  Bump to dotnet/installer@2809943e7a 8.0.100-rc.2.23431.5 (dotnet#8317)
  [build] Use Microsoft OpenJDK 17.0.8 (dotnet#8309)
  [Mono.Android] Add missing `[Flags]` attribute for generated enums. (dotnet#8310)
  Bump to dotnet/installer@c5e45fd659 8.0.100-rc.2.23427.4 (dotnet#8305)
  [xaprepare] Improve dotnet-install script logging (dotnet#8312)
  [xaprepare] Fix dotnet-install script size check (dotnet#8311)
  [Xamarin.Android.Build.Tasks] improve net6.0 "out of support" message (dotnet#8307)
  [monodroid] Fix the EnableNativeAnalyzers build (dotnet#8293)
  Bump to dotnet/installer@56d8c6497c 8.0.100-rc.2.23422.31 (dotnet#8291)
  [Xamarin.Android.Build.Tasks] Fix APT2264 error on Windows. (dotnet#8289)
  [Mono.Android] Marshal .NET stack trace to Throwable.getStackTrace() (dotnet#8185)
  [tests] Skip sign check when installing MAUI (dotnet#8288)
  Bump to xamarin/monodroid@057b17fe (dotnet#8286)
  [Xamarin.Android.Build.Tasks] add $(AndroidStripILAfterAOT) (dotnet#8172)
  Bump to dotnet/installer@ec2c1ec1b1 8.0.100-rc.2.23420.6 (dotnet#8281)
  Bump to dotnet/installer@001d8e4465 8.0.100-rc.2.23417.14 (dotnet#8276)
  [Mono.Android] [IntentFilter] pathSuffix & pathAdvancedPattern  (dotnet#8261)
  $(AndroidPackVersionSuffix)=rc.2; net8 is 34.0.0-rc.2 (dotnet#8278)
  Bump to xamarin/xamarin-android-tools/main@52f0866 (dotnet#8241)
  [build] set file extension for common `ToolExe` values (dotnet#8267)
  ...
grendello added a commit to grendello/xamarin-android that referenced this pull request Sep 4, 2023
* main: (68 commits)
  Bump to dotnet/installer@2809943e7a 8.0.100-rc.2.23431.5 (dotnet#8317)
  [build] Use Microsoft OpenJDK 17.0.8 (dotnet#8309)
  [Mono.Android] Add missing `[Flags]` attribute for generated enums. (dotnet#8310)
  Bump to dotnet/installer@c5e45fd659 8.0.100-rc.2.23427.4 (dotnet#8305)
  [xaprepare] Improve dotnet-install script logging (dotnet#8312)
  [xaprepare] Fix dotnet-install script size check (dotnet#8311)
  [Xamarin.Android.Build.Tasks] improve net6.0 "out of support" message (dotnet#8307)
  [monodroid] Fix the EnableNativeAnalyzers build (dotnet#8293)
  Bump to dotnet/installer@56d8c6497c 8.0.100-rc.2.23422.31 (dotnet#8291)
  [Xamarin.Android.Build.Tasks] Fix APT2264 error on Windows. (dotnet#8289)
  [Mono.Android] Marshal .NET stack trace to Throwable.getStackTrace() (dotnet#8185)
  [tests] Skip sign check when installing MAUI (dotnet#8288)
  Bump to xamarin/monodroid@057b17fe (dotnet#8286)
  [Xamarin.Android.Build.Tasks] add $(AndroidStripILAfterAOT) (dotnet#8172)
  Bump to dotnet/installer@ec2c1ec1b1 8.0.100-rc.2.23420.6 (dotnet#8281)
  Bump to dotnet/installer@001d8e4465 8.0.100-rc.2.23417.14 (dotnet#8276)
  [Mono.Android] [IntentFilter] pathSuffix & pathAdvancedPattern  (dotnet#8261)
  $(AndroidPackVersionSuffix)=rc.2; net8 is 34.0.0-rc.2 (dotnet#8278)
  Bump to xamarin/xamarin-android-tools/main@52f0866 (dotnet#8241)
  [build] set file extension for common `ToolExe` values (dotnet#8267)
  ...
grendello added a commit to grendello/xamarin-android that referenced this pull request Sep 4, 2023
* main: (53 commits)
  Bump to dotnet/installer@2809943e7a 8.0.100-rc.2.23431.5 (dotnet#8317)
  [build] Use Microsoft OpenJDK 17.0.8 (dotnet#8309)
  [Mono.Android] Add missing `[Flags]` attribute for generated enums. (dotnet#8310)
  Bump to dotnet/installer@c5e45fd659 8.0.100-rc.2.23427.4 (dotnet#8305)
  [xaprepare] Improve dotnet-install script logging (dotnet#8312)
  [xaprepare] Fix dotnet-install script size check (dotnet#8311)
  [Xamarin.Android.Build.Tasks] improve net6.0 "out of support" message (dotnet#8307)
  [monodroid] Fix the EnableNativeAnalyzers build (dotnet#8293)
  Bump to dotnet/installer@56d8c6497c 8.0.100-rc.2.23422.31 (dotnet#8291)
  [Xamarin.Android.Build.Tasks] Fix APT2264 error on Windows. (dotnet#8289)
  [Mono.Android] Marshal .NET stack trace to Throwable.getStackTrace() (dotnet#8185)
  [tests] Skip sign check when installing MAUI (dotnet#8288)
  Bump to xamarin/monodroid@057b17fe (dotnet#8286)
  [Xamarin.Android.Build.Tasks] add $(AndroidStripILAfterAOT) (dotnet#8172)
  Bump to dotnet/installer@ec2c1ec1b1 8.0.100-rc.2.23420.6 (dotnet#8281)
  Bump to dotnet/installer@001d8e4465 8.0.100-rc.2.23417.14 (dotnet#8276)
  [Mono.Android] [IntentFilter] pathSuffix & pathAdvancedPattern  (dotnet#8261)
  $(AndroidPackVersionSuffix)=rc.2; net8 is 34.0.0-rc.2 (dotnet#8278)
  Bump to xamarin/xamarin-android-tools/main@52f0866 (dotnet#8241)
  [build] set file extension for common `ToolExe` values (dotnet#8267)
  ...
grendello added a commit to grendello/xamarin-android that referenced this pull request Sep 4, 2023
* main: (25 commits)
  Bump to dotnet/installer@2809943e7a 8.0.100-rc.2.23431.5 (dotnet#8317)
  [build] Use Microsoft OpenJDK 17.0.8 (dotnet#8309)
  [Mono.Android] Add missing `[Flags]` attribute for generated enums. (dotnet#8310)
  Bump to dotnet/installer@c5e45fd659 8.0.100-rc.2.23427.4 (dotnet#8305)
  [xaprepare] Improve dotnet-install script logging (dotnet#8312)
  [xaprepare] Fix dotnet-install script size check (dotnet#8311)
  [Xamarin.Android.Build.Tasks] improve net6.0 "out of support" message (dotnet#8307)
  [monodroid] Fix the EnableNativeAnalyzers build (dotnet#8293)
  Bump to dotnet/installer@56d8c6497c 8.0.100-rc.2.23422.31 (dotnet#8291)
  [Xamarin.Android.Build.Tasks] Fix APT2264 error on Windows. (dotnet#8289)
  [Mono.Android] Marshal .NET stack trace to Throwable.getStackTrace() (dotnet#8185)
  [tests] Skip sign check when installing MAUI (dotnet#8288)
  Bump to xamarin/monodroid@057b17fe (dotnet#8286)
  [Xamarin.Android.Build.Tasks] add $(AndroidStripILAfterAOT) (dotnet#8172)
  Bump to dotnet/installer@ec2c1ec1b1 8.0.100-rc.2.23420.6 (dotnet#8281)
  Bump to dotnet/installer@001d8e4465 8.0.100-rc.2.23417.14 (dotnet#8276)
  [Mono.Android] [IntentFilter] pathSuffix & pathAdvancedPattern  (dotnet#8261)
  $(AndroidPackVersionSuffix)=rc.2; net8 is 34.0.0-rc.2 (dotnet#8278)
  Bump to xamarin/xamarin-android-tools/main@52f0866 (dotnet#8241)
  [build] set file extension for common `ToolExe` values (dotnet#8267)
  ...
grendello added a commit to grendello/xamarin-android that referenced this pull request Sep 4, 2023
* main: (38 commits)
  Bump to dotnet/installer@2809943e7a 8.0.100-rc.2.23431.5 (dotnet#8317)
  [build] Use Microsoft OpenJDK 17.0.8 (dotnet#8309)
  [Mono.Android] Add missing `[Flags]` attribute for generated enums. (dotnet#8310)
  Bump to dotnet/installer@c5e45fd659 8.0.100-rc.2.23427.4 (dotnet#8305)
  [xaprepare] Improve dotnet-install script logging (dotnet#8312)
  [xaprepare] Fix dotnet-install script size check (dotnet#8311)
  [Xamarin.Android.Build.Tasks] improve net6.0 "out of support" message (dotnet#8307)
  [monodroid] Fix the EnableNativeAnalyzers build (dotnet#8293)
  Bump to dotnet/installer@56d8c6497c 8.0.100-rc.2.23422.31 (dotnet#8291)
  [Xamarin.Android.Build.Tasks] Fix APT2264 error on Windows. (dotnet#8289)
  [Mono.Android] Marshal .NET stack trace to Throwable.getStackTrace() (dotnet#8185)
  [tests] Skip sign check when installing MAUI (dotnet#8288)
  Bump to xamarin/monodroid@057b17fe (dotnet#8286)
  [Xamarin.Android.Build.Tasks] add $(AndroidStripILAfterAOT) (dotnet#8172)
  Bump to dotnet/installer@ec2c1ec1b1 8.0.100-rc.2.23420.6 (dotnet#8281)
  Bump to dotnet/installer@001d8e4465 8.0.100-rc.2.23417.14 (dotnet#8276)
  [Mono.Android] [IntentFilter] pathSuffix & pathAdvancedPattern  (dotnet#8261)
  $(AndroidPackVersionSuffix)=rc.2; net8 is 34.0.0-rc.2 (dotnet#8278)
  Bump to xamarin/xamarin-android-tools/main@52f0866 (dotnet#8241)
  [build] set file extension for common `ToolExe` values (dotnet#8267)
  ...
@fanyang-mono fanyang-mono changed the title [Xamarin.Android.Build.Tasks] implement $(AndroidStripIL) [Xamarin.Android.Build.Tasks] implement $(AndroidStripILAfterAOT) Sep 7, 2023
@github-actions github-actions bot locked and limited conversation to collaborators Jan 22, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Android: new cil-strip feature causes app crashes
4 participants