【发布时间】:2019-09-13 12:44:10
【问题描述】:
我正在构建一个使用 NDK 和 Java 的 android 应用程序。 该应用程序在调试模式下运行良好。但是当我尝试构建发布 apk 时。它开始崩溃。 调试发布APK后发现
在应用程序中检测到 JNI 错误:调用 JNI GetMethodID 并挂起 异常 java.lang.ClassNotFoundException: 找不到类 "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 线程或类似的东西。我试过了,但我没有得到它
我错过了什么? ..谢谢
【问题讨论】:
-
“我应该将它附加到 java 线程” 没有更多上下文就不可能说。如果对本机代码的调用源自 Java,并且您以这种方式获得了
JNIEnv*,那么您不应该自己附加线程。如果这是在纯本机线程上,则需要附加它。 -
您应该阅读错误消息,而不是对附加到线程进行疯狂的猜测。你有一个
ClassNotFoundExfeotuon。这有一个可预测的原因,与线程无关。显然FindClass()失败了,您的代码省略了检测,而是继续进行,就好像没有错误一样。您必须对您进行的每个 JNI 调用进行错误检查并做出相应的反应。 -
@user207421 我找到了类似错误的答案:stackoverflow.com/a/44440800/7555345 ..这就是为什么我对将它附加到 Java 线程感到困惑..无论如何我认为我不会
标签: java android android-ndk