Skip to content

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