使用挂起异常java.lang.ClassNotFoundException调用JNI GetMethodID
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用挂起异常java.lang.ClassNotFoundException调用JNI GetMethodID相关的知识,希望对你有一定的参考价值。
我正在开发一个android库(.aar),它主要包含本机代码和一些java代码,主要是为应用程序代码提供java接口。
我有一个使用该库的演示应用程序,一切正常。
现在我给这个图书馆一个应该是OEM的人。他们正在开发一个利用这个库的(系统)应用程序。在他们的例子中,本机库在以下代码中抛出异常。
shapeClass = env->FindClass("xx/yy/zz/Shape");
addMethod = env->GetMethodID(shapeClass, "addPoint", "(FF)V");
这是他们得到的错误
JNI DETECTED ERROR IN APPLICATION: JNI GetMethodID called with pending exception java.lang.ClassNotFoundException: Didn't find class "xx.yy.zz.Shape" on path: DexPathList[[zip file "/system/app/AA/AA.apk"],nativeLibraryDirectories=[/system/app/AA/lib/arm, /system/app/AA/AA.apk!/lib/armeabi-v7a, /system/lib, /vendor/lib, /system/lib, /vendor/lib]]
我用谷歌搜索,并没有找到系统应用程序的不同之处。系统应用环境与常规应用环境有何不同?
请注意,代码的上面两行是从java包装器代码通过JNI接口调用的。因此,没有机会加载(Shape)类,因为Shape类和调用类在同一个库中(相同的.aar文件)。
答案
系统应用程序必须将其本机库保留在/ system / lib或/ vendor / lib目录中。在某些情况下,本机库可能嵌入在APK文件中,但随后应用程序清单必须声明
android:extractNativeLibs=”false”
以上是关于使用挂起异常java.lang.ClassNotFoundException调用JNI GetMethodID的主要内容,如果未能解决你的问题,请参考以下文章
spring中的class配置不能使用properties中的字符串
Intellij 在运行 Ivy Project 时无法找到类