MvvmCross / MvvmCross-AndroidSupport

Android support library packages for MvvmCross: The .NET MVVM framework for cross-platform solutions.
http://mvvmcross.com
15 stars 0 forks source link

System.NotSupportedException: Could not activate JNI Handle 0x21b00041 (key_handle 0x428ae8b0) of Java type 'md526c6a644969529b31d1110de59aec88a/TransmittingRadioView' as managed type 'HeadExtension.Droid.TransmittingRadioView'. #278

Closed trampster closed 8 years ago

trampster commented 8 years ago

To help us fix your issue, please provide the information in the below template.

Note: There is often little we can do without a minimal reproducible sample of the issue, so please provide that in a standalone git repository and link it here.

Steps to reproduce

  1. Setup an android project Compile using Android version: Android 6.0 Minimum Android to target Android 4.1 (API Level 16), Target Android version: Android 6.0
  2. Run on Nexus 4 (works) Run on Android 4.4 (API 19) crashes

    Expected behavior

Not crashing

Actual behavior

Unhandled Exception: System.NotSupportedException: Could not activate JNI Handle 0x21b00041 (key_handle 0x428ae8b0) of Java type 'md526c6a644969529b31d1110de59aec88a/TransmittingRadioView' as managed type 'HeadExtension.Droid.TransmittingRadioView'.

This occurs on the SetContentView of my main activity which inherits from MvxAppCompatActivity

Configuration

Version: 4.2.2 (mostly see below) nuget config is: MvvmCross 4.1.4 targetFramework="monoandroid60" MvvmCross.Binding 4.2.2 targetFramework="monoandroid60" MvvmCross.Core 4.2.2 targetFramework="monoandroid60" MvvmCross.Droid.Shared 4.2.2 targetFramework="monoandroid60" MvvmCross.Droid.Support.V4 4.2.2 targetFramework="monoandroid60" MvvmCross.Droid.Support.V7.AppCompat 4.2.2 targetFramework="monoandroid60" MvvmCross.Platform 4.2.2 targetFramework="monoandroid60" MvvmCross.Plugin.Color 4.1.6 targetFramework="monoandroid50" MvvmCross.Plugin.Json 4.2.2 targetFramework="monoandroid60" MvvmCross.Plugin.Visibility 4.1.6 targetFramework="monoandroid50" MvvmCross.StarterPack 4.1.6 targetFramework="monoandroid60" Newtonsoft.Json 9.0.1 targetFramework="monoandroid60" Xamarin.Android.Support.Animated.Vector.Drawable 23.4.0 targetFramework="monoandroid60" Xamarin.Android.Support.v4 23.4.0 targetFramework="monoandroid60" Xamarin.Android.Support.v7.AppCompat 23.4.0 targetFramework="monoandroid60" Xamarin.Android.Support.Vector.Drawable 23.4.0 targetFramework="monoandroid60"

Here is the stack trace: android.runtime.JavaProxyThrowable: System.NotSupportedException: Could not activate JNI Handle 0x21b00041 (key_handle 0x428ae8b0) of Java type 'md526c6a644969529b31d1110de59aec88a/TransmittingRadioView' as managed type 'HeadExtension.Droid.TransmittingRadioView'. ---> Java.Lang.NoSuchMethodError: no method with name='getDrawable' signature='(I)Landroid/graphics/drawable/Drawable;' in class Landroid/content/Context; 07-22 11:57:39.437 I/dalvikvm(27895): at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in /Users/builder/data/lanes/2923/52635947/source/mono/external/referencesource/mscorlib/system/runtime/exceptionservices/exceptionservicescommon.cs:143 07-22 11:57:39.437 I/dalvikvm(27895): at Java.Interop.JniEnvironment+InstanceMethods.GetMethodID (JniObjectReference type, System.String name, System.String signature) [0x00068] in /Users/builder/data/lanes/3340/4e275588/source/Java.Interop/src/Java.Interop/Java.Interop/JniEnvironment.g.cs:11240 07-22 11:57:39.437 I/dalvikvm(27895): at Java.Interop.JniType.GetInstanceMethod (System.String name, System.String signature) [0x0000f] in /User 07-22 11:57:39.437 I/dalvikvm(27895): at mono.android.TypeManager.n_activate(Native Method) 07-22 11:57:39.437 I/dalvikvm(27895): at mono.android.TypeManager.Activate(TypeManager.java:7) 07-22 11:57:39.438 I/dalvikvm(27895): at md526c6a644969529b31d1110de59aec88a.TransmittingRadioView.(TransmittingRadioView.java:35) 07-22 11:57:39.438 I/dalvikvm(27895): at java.lang.reflect.Constructor.constructNative(Native Method) 07-22 11:57:39.438 I/dalvikvm(27895): at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 07-22 11:57:39.438 I/dalvikvm(27895): at android.view.LayoutInflater.createView(LayoutInflater.java:594) 07-22 11:57:39.438 I/dalvikvm(27895): at md5bf0126c95bf9fc0db24c02c9adb4cfa7.MvxLayoutInflater_PrivateFactoryWrapper2.n_onCreateView(Native Method) 07-22 11:57:39.438 I/dalvikvm(27895): at md5bf0126c95bf9fc0db24c02c9adb4cfa7.MvxLayoutInflater_PrivateFactoryWrapper2.onCreateView(MvxLayoutInflater_PrivateFactoryWrapper2.java:32) 07-22 11:57:39.438 I/dalvikvm(27895): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:689) 07-22 11:57:39.440 I/dalvikvm(27895): at android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 07-22 11:57:39.440 I/dalvikvm(27895): at android.view.LayoutInflater.rInflate(LayoutInflater.java:758) 07-22 11:57:39.440 I/dalvikvm(27895): at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 07-22 11:57:39.440 I/dalvikvm(27895): at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 07-22 11:57:39.440 I/dalvikvm(27895): at md5b23e6ea01c86118cf1fb48a68ec892bd.PttView.n_onCreate(Native Method) 07-22 11:57:39.440 I/dalvikvm(27895): at md5b23e6ea01c86118cf1fb48a68ec892bd.PttView.onCreate(PttView.java:31) 07-22 11:57:39.446 I/dalvikvm(27895): at android.app.Activity.performCreate(Activity.java:5264) 07-22 11:57:39.450 I/dalvikvm(27895): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088) 07-22 11:57:39.450 I/dalvikvm(27895): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2302) 07-22 11:57:39.450 I/dalvikvm(27895): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390) 07-22 11:57:39.450 I/dalvikvm(27895): at android.app.ActivityThread.access$800(ActivityThread.java:151) 07-22 11:57:39.450 I/dalvikvm(27895): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321) 07-22 11:57:39.450 I/dalvikvm(27895): at android.os.Handler.dispatchMessage(Handler.java:110) 07-22 11:57:39.450 I/dalvikvm(27895): at android.os.Looper.loop(Looper.java:193) 07-22 11:57:39.450 I/dalvikvm(27895): at android.app.ActivityThread.main(ActivityThread.java:5299) 07-22 11:57:39.450 I/dalvikvm(27895): at java.lang.reflect.Method.invokeNative(Native Method) 07-22 11:57:39.451 I/dalvikvm(27895): at java.lang.reflect.Method.invoke(Method.java:515) 07-22 11:57:39.451 I/dalvikvm(27895): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829) 07-22 11:57:39.451 I/dalvikvm(27895): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645) 07-22 11:57:39.452 I/dalvikvm(27895): at dalvik.system.NativeStart.main(Native Method)

This part seems to be interesting: Java.Lang.NoSuchMethodError: no method with name='getDrawable' signature='(I)Landroid/graphics/drawable/Drawable;

getDrawable was added in API 21, this means that you shouldn't be calling it, rather you should be calling ContextCompat.getDrawable(Context context, int id)

trampster commented 8 years ago

Despite the exception happening on SetContentView line with none of my code in the stack trace the issue was caused by a custom view which was used by my main view. Which was not using the ContextCompat version of getDrawable