使用挂起异常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 时无法找到类

pg数据库数据表异常挂起

使用挂起异常java.lang.ClassNotFoundException调用JNI GetMethodID

Julia 在 HTTP WebSocket 块中挂起异常

休眠约束违反异常挂起sql server