Commit 70fbb83
authored
[HybridWebView] fix trimmer warnings on Android (#24744)
Context: #23769
Context: dotnet/android#9300
026e046 introduced `HybridWebView`, which unfortunately introduces
trimmer warnings in the `dotnet new maui` project template:
> dotnet new maui
> dotnet build -f net9.0-android -c Release -p:TrimMode=Full
...
hellomaui succeeded with 1 warning(s) (7.9s)
/_/src/Core/src/Handlers/HybridWebView/HybridWebViewHandler.Android.cs(53,5):
Trim analysis warning IL2026: Microsoft.Maui.Handlers.HybridWebViewHandler.HybridWebViewJavaScriptInterface.SendMessage(String):
Using member 'Java.Interop.ExportAttribute.ExportAttribute(String)' which has 'RequiresUnreferencedCodeAttribute' can break functionality when trimming application code.
[ExportAttribute] uses dynamic features.
This is due to usage of `Java.Interop.ExportAttribute`:
private sealed class HybridWebViewJavaScriptInterface : Java.Lang.Object
{
//...
[JavascriptInterface]
[Export("sendMessage")]
public void SendMessage(string message)
`Java.Interop.ExportAttribute` makes heavy usage of unbounded
System.Reflection, System.Reflection.Emit, etc. for it to be able to
work. It brings in an additional assembly `Mono.Android.Export.dll` as
well.
It is inherently trimming unsafe, but how did it get through these
tests?
https://github.com/dotnet/maui/blob/08ff1246383ed4fdaef84a40d5b2ae8e6096bb56/src/TestUtils/src/Microsoft.Maui.IntegrationTests/AndroidTemplateTests.cs#L50-L61
This slipped through, unfortunately, as we had missed solving all the
trimmer warnings in `Mono.Android.Export.dll`! dotnet/android#9300
aims to fix that.
After dotnet/android#9300, new trimming warnings specific to .NET MAUI
will surface such as the one above.
But we can easily replace `[Export]` by:
* Define a Java interface & create a binding for it in C#, we already
have `maui.aar` setup for this.
* We can simply implement the interface in C# and remove `[Export]`.
Lastly, I fixed some of the defaults in `Metadata.xml`, it didn't look
like we were automatically making Java interfaces `internal`. It looks
like we probably made `ImageLoaderCallback` public by mistake.1 parent 132b4fe commit 70fbb83
File tree
4 files changed
+12
-4
lines changed- src/Core
- AndroidNative/maui/src/main/java/com/microsoft/maui
- src
- Handlers/HybridWebView
- Transforms
4 files changed
+12
-4
lines changedLines changed: 7 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
Lines changed: 1 addition & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
35 | 35 | | |
36 | 36 | | |
37 | 37 | | |
38 | | - | |
| 38 | + | |
39 | 39 | | |
40 | 40 | | |
41 | 41 | | |
| |||
47 | 47 | | |
48 | 48 | | |
49 | 49 | | |
50 | | - | |
51 | 50 | | |
52 | 51 | | |
53 | 52 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
5 | | - | |
| 5 | + | |
6 | 6 | | |
7 | | - | |
| 7 | + | |
| 8 | + | |
8 | 9 | | |
9 | 10 | | |
10 | 11 | | |
11 | 12 | | |
| 13 | + | |
12 | 14 | | |
13 | 15 | | |
14 | 16 | | |
| |||
Binary file not shown.
0 commit comments