-
Notifications
You must be signed in to change notification settings - Fork 562
Open
Labels
Area: App+Library BuildIssues when building Library projects or Application projects.Issues when building Library projects or Application projects.bugComponent does not function as intended.Component does not function as intended.
Milestone
Description
Android framework version
net8.0-android, net9.0-android
Affected platform version
.NET 9
Description
Context:
In the above PR, I had to add a class named Foo and use it for the CustomWidgetTests to succeed.
The situation is:
- A class library with a custom view is used
- The custom view is only accessed from an
AndroidResource.xml file - The C# compiler drops the assembly reference, because no C# code references anything in the class library
- The assembly doesn't even get passed to the trimmer/linker
Possible Solution
I suppose we could do something that would support passing all Android class libraries to the trimmer. Even ones that the C# compiler deems is unused?
We'd then rely on the trimmer to do its job to remove unused code.
Steps to Reproduce
- Remove
Foo.csfrom the changes in [trimming] preserve custom views and$(AndroidHttpClientHandlerType)#8954 - Run the APK tests in
Releasemode
Did you find any workaround?
Reference some C# class, such as Foo or even the previous code would work:
// usage of typeof(CustomTextView) includes the assembly reference
[DynamicDependency (DynamicallyAccessedMemberTypes.All, typeof (CustomTextView))]Relevant log output
Mentioned in 9a782d7.
Xamarin.Android.RuntimeTests.CustomWidgetTests failed with:
(Binary XML file line #1 in Mono.Android.NET_Tests:layout/uppercase_custom: Binary XML file line #1 in Mono.Android.NET_Tests:layout/uppercase_custom: Error inflating class Mono.Android_Test.Library.CustomTextView)
at Java.Interop.JniEnvironment.InstanceMethods.CallObjectMethod(JniObjectReference , JniMethodInfo , JniArgumentValue* )
at Java.Interop.JniPeerMembers.JniInstanceMethods.InvokeVirtualObjectMethod(String , IJavaPeerable , JniArgumentValue* )
at Android.Views.LayoutInflater.Inflate(Int32 , ViewGroup )
at Xamarin.Android.RuntimeTests.CustomWidgetTests.<>c.<UpperCaseCustomWidget_ShouldNotThrowInflateException>b__0_0()
at NUnit.Framework.Constraints.VoidInvocationDescriptor.Invoke()
at NUnit.Framework.Constraints.ExceptionInterceptor.Intercept(Object )
--- End of managed Java.Lang.RuntimeException stack trace ---
android.view.InflateException: Binary XML file line #1 in Mono.Android.NET_Tests:layout/uppercase_custom: Binary XML file line #1 in Mono.Android.NET_Tests:layout/uppercase_custom: Error inflating class Mono.Android_Test.Library.CustomTextView
Caused by: android.view.InflateException: Binary XML file line #1 in Mono.Android.NET_Tests:layout/uppercase_custom: Error inflating class Mono.Android_Test.Library.CustomTextView
Caused by: java.lang.ClassNotFoundException: Mono.Android_Test.Library.CustomTextView
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:454)
at android.view.LayoutInflater.createView(LayoutInflater.java:815)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1006)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:961)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:1123)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084)
at android.view.LayoutInflater.inflate(LayoutInflater.java:682)
at android.view.LayoutInflater.inflate(LayoutInflater.java:534)
at android.view.LayoutInflater.inflate(LayoutInflater.java:481)
at crc643df67da7b13bb6b1.TestInstrumentation_1.n_onStart(Native Method)
at crc643df67da7b13bb6b1.TestInstrumentation_1.onStart(TestInstrumentation_1.java:32)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2189)
Caused by: java.lang.ClassNotFoundException: Didn't find class "Mono.Android_Test.Library.CustomTextView" on pathIn this case, Mono.Android_Test.Library.CustomTextView was used
from an Android layout, but not used anywhere in managed code.
Metadata
Metadata
Assignees
Labels
Area: App+Library BuildIssues when building Library projects or Application projects.Issues when building Library projects or Application projects.bugComponent does not function as intended.Component does not function as intended.