使用 Xamarin 扩充绑定库时出现 ClassNotFoundException [英] ClassNotFoundException when inflating a binding library using Xamarin

查看:24
本文介绍了使用 Xamarin 扩充绑定库时出现 ClassNotFoundException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我为 twoway-view 库制作了自定义绑定.

I have made a custom binding for the twoway-view library.

DLL 生成似乎没问题,我可以毫无问题地执行以下操作:

The DLL generate seems to okay, I can do the following without any problem:

var twoWayView = new Org.Lucasr.TwoWayView.Widget.TwoWayView(this);

但是,如果尝试使用 java 反射来实例化类:

however if a try to instantiate the class using java reflection:

Java.Lang.Class.ForName("Org.Lucasr.TwoWayView.Widget.TwoWayView")

我得到了一个 ClassNotFoundException,它与尝试膨胀具有 TwoWayView 的布局时发生的异常相同:

I got an ClassNotFoundException, which it the same exception that occur when trying to inflate a layout that have TwoWayView in it like this one:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <Button
        android:id="@+id/MyButton"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/Hello" />
    <Org.Lucasr.Twowayview.Widget.TwoWayView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:scrollbars="vertical"
        app:twowayview_layoutManager="StaggeredGridLayoutManager"
        app:twowayview_numColumns="2"
        app:twowayview_numRows="1" />
</LinearLayout>

<小时>

编辑

按照此处的描述使用 dexdump 我可以看到课程在我的apk:

Using dexdump as described here I can see the class is inside my apk:

Class #1172            -
  Class descriptor  : 'Lorg/lucasr/twowayview/widget/TwoWayView;'
  Access flags      : 0x0001 (PUBLIC)
  Superclass        : 'Landroid/support/v7/widget/RecyclerView;'
  Interfaces        -

编辑 2

使用 org.lucasr.twowayview.widget.TwoWayView 给我同样的错误.

Using org.lucasr.twowayview.widget.TwoWayView give me the same error.

完整的异常是:

01-23 13:02:04.837 I/MonoDroid(17779): UNHANDLED EXCEPTION: 
01-23 13:02:04.861 I/MonoDroid(17779): Android.Views.InflateException: Exception of type 'Android.Views.InflateException' was thrown. 
01-23 13:02:04.861 I/MonoDroid(17779): at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () <IL 0x00011, 0x00068> 
01-23 13:02:04.861 I/MonoDroid(17779): at Android.Runtime.JNIEnv.CallNonvirtualVoidMethod (intptr,intptr,intptr,Android.Runtime.JValue[]) [0x00084] in /Users/builder/data/lanes/monodroid-mlion-monodroid-4.21-series/49a04b96/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.g.cs:896 
01-23 13:02:04.861 I/MonoDroid(17779): at Android.App.Activity.SetContentView (int) [0x00070] in /Users/builder/data/lanes/monodroid-mlion-monodroid-4.21-series/49a04b96/source/monodroid/src/Mono.Android/platforms/android-19/src/generated/Android.App.Activity.cs:4253 
01-23 13:02:04.861 I/MonoDroid(17779): at Org.Lucasr.TwoWayView.Sample.MainActivity.OnCreate (Android.OS.Bundle) [0x0001d] in c:\Users\guilherme\Documents\Visual Studio 2013\Projects\Org.Lucasr.TwoWayView\Org.Lucasr.TwoWayView.Sample\MainActivity.cs:25 
01-23 13:02:04.862 I/MonoDroid(17779): at Android.App.Activity.n_OnCreate_Landroid_os_Bundle_ (intptr,intptr,intptr) [0x00011] in /Users/builder/data/lanes/monodroid-mlion-monodroid-4.21-series/49a04b96/source/monodroid/src/Mono.Android/platforms/android-19/src/generated/Android.App.Activity.cs:2179 
01-23 13:02:04.862 I/MonoDroid(17779): at (wrapper dynamic-method) object.e4603f87-2e86-4a8a-9cd2-213f87378350 (intptr,intptr,intptr) <IL 0x00017, 0x00043> 
01-23 13:02:04.862 I/MonoDroid(17779):   --- End of managed exception stack trace --- 
01-23 13:02:04.862 I/MonoDroid(17779): android.view.InflateException: Binary XML file line #1: Error inflating class Org.Lucasr.Twowayview.Widget.TwoWayView 
01-23 13:02:04.862 I/MonoDroid(17779):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:757) 
01-23 13:02:04.862 I/MonoDroid(17779):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) 
01-23 13:02:04.862 I/MonoDroid(17779):  at android.view.LayoutInflater.inflate(LayoutInflater.java:504) 
01-23 13:02:04.862 I/MonoDroid(17779):  at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
01-23 13:02:04.862 I/MonoDroid(17779):  at android.view.LayoutInflater.inflate(LayoutInflater.java:365) 
01-23 13:02:04.862 I/MonoDroid(17779):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:377) 
01-23 13:02:04.862 I/MonoDroid(17779):  at android.app.Activity.setContentView(Activity.java:2144) 
01-23 13:02:04.862 I/MonoDroid(17779):  at org.lucasr.twowayview.sample.MainActivity.n_onCreate(Native Method) 
01-23 13:02:04.862 I/MonoDroid(17779):  at org.lucasr.twowayview.sample.MainActivity.onCreate(MainActivity.java:28) 
01-23 13:02:04.862 I/MonoDroid(17779):  at android.app.Activity.performCreate(Activity.java:5933) 
01-23 13:02:04.862 I/MonoDroid(17779):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
01-23 13:02:04.862 I/MonoDroid(17779):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) 
01-23 13:02:04.862 I/MonoDroid(17779):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
01-23 13:02:04.862 I/MonoDroid(17779):  at android.app.ActivityThread.access$800(ActivityThread.java:144) 
01-23 13:02:04.862 I/MonoDroid(17779):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
01-23 13:02:04.862 I/MonoDroid(17779):  at android.os.Handler.dispatchMessage(Handler.java:102) 
01-23 13:02:04.862 I/MonoDroid(17779):  at android.os.Looper.loop(Looper.java:135) 
01-23 13:02:04.862 I/MonoDroid(17779):  at android.app.ActivityThread.main(ActivityThread.java:5221) 
01-23 13:02:04.862 I/MonoDroid(17779):  at java.lang.reflect.Method.invoke(Native Method) 
01-23 13:02:04.862 I/MonoDroid(17779):  at java.lang.reflect.Method.invoke(Method.java:372) 
01-23 13:02:04.862 I/MonoDroid(17779):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
01-23 13:02:04.862 I/MonoDroid(17779):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
01-23 13:02:04.862 I/MonoDroid(17779): Caused by: java.lang.ClassNotFoundException: Didn't find class "Org.Lucasr.Twowayview.Widget.TwoWayView" on path: DexPathList[[zip file "/data/app/Org.Lucasr.TwoWayView.Sample-1/base.apk"],nativeLibraryDirectories=[/data/app/Org.Lucasr.TwoWayView.Sample-1/lib/arm, /vendor/lib, /system/lib]] 
01-23 13:02:04.862 I/MonoDroid(17779):  at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 
01-23 13:02:04.862 I/MonoDroid(17779):  at java.lang.ClassLoader.loadClass(ClassLoader.java:511) 
01-23 13:02:04.862 I/MonoDroid(17779):  at java.lang.ClassLoader.loadClass(ClassLoader.java:469) 
01-23 13:02:04.862 I/MonoDroid(17779):  at android.view.LayoutInflater.createView(LayoutInflater.java:571) 
01-23 13:02:04.862 I/MonoDroid(17779):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743) 
01-23 13:02:04.862 I/MonoDroid(17779):  ... 21 more 
01-23 13:02:04.862 I/MonoDroid(17779):  Suppressed: java.lang.ClassNotFoundException: Org.Lucasr.Twowayview.Widget.TwoWayView 
01-23 13:02:04.862 I/MonoDroid(17779):      at java.lang.Class.classForName(Native Method) 
01-23 13:02:04.862 I/MonoDroid(17779):      at java.lang.BootClassLoader.findClass(ClassLoader.java:781) 
01-23 13:02:04.863 I/MonoDroid(17779):      at java.lang.BootClassLoader.loadClass(ClassLoader.java:841) 
01-23 13:02:04.863 I/MonoDroid(17779):      at java.lang.ClassLoader.loadClass(ClassLoader.java:504) 
01-23 13:02:04.863 I/MonoDroid(17779):      ... 24 more 
01-23 13:02:04.863 I/MonoDroid(17779):  Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available An unhandled exception occured.  
01-23 13:02:05.453 E/mono    (17779):  
01-23 13:02:05.453 E/mono    (17779): Unhandled Exception: 
01-23 13:02:05.453 E/mono    (17779): Android.Views.InflateException: Exception of type 'Android.Views.InflateException' was thrown. 
01-23 13:02:05.453 E/mono (17779): at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () <IL 0x00011, 0x00068> 
01-23 13:02:05.453 E/mono    (17779): at Android.Runtime.JNIEnv.CallNonvirtualVoidMethod (intptr,intptr,intptr,Android.Runtime.JValue[]) [0x00084] in /Users/builder/data/lanes/monodroid-mlion-monodroid-4.21-series/49a04b96/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.g.cs:896 
01-23 13:02:05.453 E/mono    (17779): at Android.App.Activity.SetContentView (int) [0x00070] in /Users/builder/data/lanes/monodroid-mlion-monodroid-4.21-series/49a04b96/source/monodroid/src/Mono.Android/platforms/android-19/src/generated/Android.App.Activity.cs:4253 
01-23 13:02:05.453 E/mono    (17779): at Org.Lucasr.TwoWayView.Sample.MainActivity.OnCreate (Android.OS.Bundle) [0x0001d] in c:\Users\guilherme\Documents\Visual Studio 2013\Projects\Org.Lucasr.TwoWayView\Org.Lucasr.TwoWayView.Sample\MainActivity.cs:25 
01-23 13:02:05.453 E/mono    (17779): at Android.App.Activity.n_OnCreate_Landroid_os_Bundle_ (intptr,intptr,intptr) [0x00011] in /Users/builder/data/lanes/monodroid-mlion-monodroid-4.21-series/49a04b96/source/monodroid/src/Mono.Android/platforms/android-19/src/generated/Android.App.Activity.cs:2179 
01-23 13:02:05.453 E/mono    (17779): at (wrapper dynamic-method) object.e4603f87-2e86-4a8a-9cd2-213f87378350 (intptr,intptr,intptr) <IL 0x00017, 0x00043> 
01-23 13:02:05.453 E/mono    (17779):  
01-23 13:02:05.453 E/mono    (17779):   --- End of managed exception stack trace --- 
01-23 13:02:05.453 E/mono    (17779): android.view.InflateException: Binary XML file line #1: Error inflating class Org.Lucasr.Twowayview.Widget.TwoWayView 
01-23 13:02:05.453 E/mono    (17779):   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:757) 
01-23 13:02:05.453 E/mono    (17779):   at android.view.LayoutInflater.inflate(LayoutInflater.java:504) 
01-23 13:02:05.453 E/mono    (17779):   at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
01-23 13:02:05.453 E/mono    (17779):   at android.view.LayoutInflater.inflate(LayoutInflater.java:365) referenceTable GDEF length=670 1 referenceTable GSUB length=7202 1 referenceTable GPOS length=24560 1 
01-23 13:02:05.453 E/mono    (17779):   at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:377) 
01-23 13:02:05.453 E/mono    (17779):   at android.app.Activity.setContentView(Activity.java:2144) 
01-23 13:02:05.453 E/mono    (17779):   at org.lucasr.twowayview.sample.MainActivity.n_onCreate(Native Method) 
01-23 13:02:05.453 E/mono    (17779):   at org.lucasr.twowayview.sample.MainActivity.onCreate(MainActivity.java:28) 
01-23 13:02:05.453 E/mono    (17779):   at android.app.Activity.performCreate(Activity.java:5933) 
01-23 13:02:05.453 E/mono    (17779):   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
01-23 13:02:05.453 E/mono    (17779):   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) 
01-23 13:02:05.453 E/mono    (17779):   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
01-23 13:02:05.453 E/mono    (17779):   at android.app.ActivityThread.access$800(ActivityThread.java:144) 
01-23 13:02:05.453 E/mono    (17779):   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
01-23 13:02:05.453 E/mono    (17779):   at android.os.Handler.dispatchMessage(Handler.java:102) 
01-23 13:02:05.453 E/mono    (17779):   at android.os.Looper.loop(Looper.java:135) 
01-23 13:02:05.453 E/mono    (17779):   at android.app.ActivityThread.main(ActivityThread.java:5221) 
01-23 13:02:05.453 E/mono    (17779):   at java.lang.reflect.Method.invoke(Native Method)

推荐答案

当我在 Xamarin 应用程序中包含的 .dll 中引用绑定库时出现此错误.使用 dexdump.exe,可以看到该类未在 dex 文件中定义.

I got this error when I referenced a bindings libary in a .dll that was included in my Xamarin app. Using dexdump.exe, it was possible to see that the class was not defined in the dex files.

当我还将绑定库引用到主 Xamarin 应用程序时,该类已正确生成并在 classes.dex 中有一个条目.

When I also referenced the bindings libary into the main Xamarin app, the class was properly generated and had an entry in classes.dex.

这篇关于使用 Xamarin 扩充绑定库时出现 ClassNotFoundException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆