Skip to content

[CoreCLR] Override GetInvokerTypeCore in AndroidTypeManager #9977

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

Conversation

simonrozsival
Copy link
Member

This is a follow-up to #9973

This PR fixes the following crash at the startup of dotnet new maui -sc when the AndroidTypeManager is used:

--------- beginning of crash
03-27 09:57:38.276 25497 25497 E AndroidRuntime: FATAL EXCEPTION: main
03-27 09:57:38.276 25497 25497 E AndroidRuntime: Process: com.companyname.testmaui, PID: 25497
03-27 09:57:38.276 25497 25497 E AndroidRuntime: android.runtime.JavaProxyThrowable: [System.MemberAccessException]: Acc_CreateAbstEx, Android.Views.LayoutInflater
03-27 09:57:38.276 25497 25497 E AndroidRuntime: at System.Reflection.RuntimeConstructorInfo.CheckCanCreateInstance + 0x3c(Unknown Source)
03-27 09:57:38.276 25497 25497 E AndroidRuntime: at System.Reflection.RuntimeConstructorInfo.ThrowNoInvokeException + 0x0(Unknown Source)
03-27 09:57:38.276 25497 25497 E AndroidRuntime: at System.Reflection.RuntimeConstructorInfo.Invoke + 0xe(Unknown Source)
03-27 09:57:38.276 25497 25497 E AndroidRuntime: at System.Reflection.ConstructorInfo.Invoke + 0x0(Unknown Source)
03-27 09:57:38.276 25497 25497 E AndroidRuntime: at Microsoft.Android.Runtime.ManagedValueManager.TryCreatePeer + 0x3b(Unknown Source)
03-27 09:57:38.276 25497 25497 E AndroidRuntime: at Java.Interop.JniRuntime+JniValueManager.TryCreatePeerInstance + 0x19(Unknown Source)
03-27 09:57:38.276 25497 25497 E AndroidRuntime: at Java.Interop.JniRuntime+JniValueManager.CreatePeerInstance + 0x5a(Unknown Source)
03-27 09:57:38.276 25497 25497 E AndroidRuntime: at Java.Interop.JniRuntime+JniValueManager.CreatePeer + 0x150(Unknown Source)
03-27 09:57:38.276 25497 25497 E AndroidRuntime: at Java.Interop.JniRuntime+JniValueManager.GetPeer + 0x169(Unknown Source)
03-27 09:57:38.276 25497 25497 E AndroidRuntime: at Java.Lang.Object.GetObject + 0x1d(Unknown Source)
03-27 09:57:38.276 25497 25497 E AndroidRuntime: at Java.Lang.Object._GetObject + 0x19(Unknown Source)
03-27 09:57:38.276 25497 25497 E AndroidRuntime: at Java.Lang.Object.GetObject + 0x1(Unknown Source)
03-27 09:57:38.276 25497 25497 E AndroidRuntime: at Android.Views.LayoutInflater.From + 0x3f(Unknown Source)
03-27 09:57:38.276 25497 25497 E AndroidRuntime: at Microsoft.Maui.Platform.MauiContextExtensions.GetLayoutInflater + 0x2b(Unknown Source)
...

AndroidTypeManager didn't override the GetInvokerTypeCore method and the base implementation of this method in JniTypeManager only looks at JniTypeSignatureAttribute to find the invoker type. LayoutInflater doesn't have this attribute and it relies on the logic in JavaObjectExtensions.GetInvokerType. This method will look for the invoker based on a naming convention by adding the Invoker suffix to the original type name.

This PR adds an override of GetInvokerTypeCore which calls JavaObjectExtensions.GetInvokerType when needed to keep backwards compatibility.

@simonrozsival
Copy link
Member Author

Closing in favor of #9978

@github-actions github-actions bot locked and limited conversation to collaborators Apr 27, 2025
@akoeplinger akoeplinger deleted the dev/simonrozsival/android-type-manager-get-invoker-type branch June 2, 2025 14:43
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.

1 participant