java - Android NDK : JNI GetMethodID called with pending exception java. lang.ClassNotFoundException:未找到类

标签 java android android-ndk

我正在构建一个使用 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/

相关文章:

android - Android SQLite 中的选择语句

opengl-es - eglQuerySurface 给出错误的大小

java - 在 JComboBox 中添加水平滚动条不起作用

java - 如何从 Java 读取 Oracle 数据库中的 CLOB 列

android - 在 eclipse 中导入 javax.microedition

android - 这个 opengl 漫反射着色器使我的纹理透明

android - Qt Creator 5.8 Android开发NDK x64位错误 "No Rule to make target.."

compiler-errors - 为android交叉编译openvswitch

Java线程访问另一个线程

java - HashMap 难点