java - JNI GetMethodID 调用时出现未决异常 java.lang.ClassNotFoundException

标签 java android c++ java-native-interface

我正在开发一个 android 库 (.aar),它主要包含 native 代码和一些 java 代码,主要用于为应用程序代码提供 java 接口(interface)。

我有一个使用该库的演示应用程序,一切正常。

现在我给这个图书馆一个应该是 OEM 的人。他们正在开发一个利用这个库的(系统)应用程序。在他们的例子中, native 库在以下代码中抛出异常。

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]]

我用谷歌搜索并没有发现系统应用程序有什么不同。系统应用程序环境与常规应用程序环境有何不同?

请注意,以上两行代码是通过 JNI 接口(interface)从 java 包装器代码中调用的。所以 (Shape) 类不可能没有加载,因为 Shape 类和调用类在同一个库中(同一个 .aar 文件)。

最佳答案

系统应用程序必须将其 native 库保存在/system/lib 或/vendor/lib 目录中。在某些情况下,原生库可能嵌入到 APK 文件中,但应用 list 必须声明

android:extractNativeLibs=”false” 

关于java - JNI GetMethodID 调用时出现未决异常 java.lang.ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55833765/

相关文章:

java - 图像不断重复,尽管它已经是随机的

java - 如何让我的 .bat 文件运行 java 命令

java apache poi 日期格式和空白单元格处理

java - Android - NullPointerException SimpleAdapter - 固定部分 ListView?

android - 有没有办法提示用户输入android上的输入法?

android - Android 布局中扭曲的 ProgressBar 微调器

c++ - 扩展基类并维护引用

java - 计算球的最大高度(级别: newbie)

c++ - 离散事件模拟在 windows 和 linux 中生成不同的结果

c++ - 是否可以为 AVR 编写一个 constexpr 舍入函数?