Android NDK:JNI GetMethodID被调用,带有挂起的异常java。lang.ClassNotFoundException:未找到类
我正在构建一个使用NDK和Java的安卓应用程序。 该应用程序在调试模式下工作正常。但当我尝试构建发布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线程或类似的东西上吗。我试过了,但没有成功
我错过了什么。。谢谢
# 1 楼答案
调试版本和发布版本之间的典型区别在于后者启用ProGuard模糊处理。这意味着许多类和方法的名称会自动更改。很可能,类
example.motion.MotionDetectionReturnValue
就是这样发生的。简单的修复方法是保留JNI中涉及的类和方法的名称,而不进行混淆。见https://stackoverflow.com/a/24923279/192373更先进的技术也允许保护这些类