【发布时间】:2021-03-04 16:51:58
【问题描述】:
我正在开发一个 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]]
我在谷歌上搜索并没有发现太多关于系统应用程序的不同之处。系统应用环境与常规应用环境有何不同?
请注意,上面两行代码是通过JNI接口从java包装代码中调用的。因此, (Shape) 类不可能没有加载,因为 Shape 类和调用类在同一个库中(同一个 .aar 文件)。
【问题讨论】:
-
检查apk文件是否真的在
/system/app/AA/AA.apk而不是其他位置。 -
是的,apk 就在那个位置
标签: java android c++ java-native-interface