我正在构建一个使用 NDK 和 Java 的 Android 应用程序。 该应用程序在 Debug模式下运行良好。但是当我尝试构建发布 apk 时。它开始崩溃。 调试发布APK后我发现
JNI DETECTED ERROR IN APPLICATION: JNI GetMethodID called with pending exception java.lang.ClassNotFoundException: Didn't find class "example.motion.MotionDetectionReturnValue"
这是我的 .cpp 类中的问题
jobject object;
jmethodID constructor;
jclass cls;
cls = env->FindClass("example/motion/MotionDetectionReturnValue");
constructor = env->GetMethodID(cls, "<init>", "(DDDDDDD)V");
object = env->NewObject(cls, constructor, avg.x, avg.y, totalFraction, bottomRightFraction, bottomLeftFraction, topRightFraction, topLeftFraction);
我应该将它附加到java线程或类似的东西上吗?我尝试过,但没有成功
我错过了什么? ..谢谢
最佳答案
调试和发布版本之间的典型区别是后者打开 ProGuard 混淆。这意味着许多类和方法的名称会自动更改。也许,这就是 example.motion.MotionDetectionReturnValue
类所发生的情况。简单的解决方法是保留 JNI 中涉及的类和方法的名称,而不进行混淆。请参阅https://stackoverflow.com/a/24923279/192373 .
更先进的技术也可以保护这些类
关于java - Android NDK : JNI GetMethodID called with pending exception java. lang.ClassNotFoundException:未找到类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57923889/