【问题标题】:JNIEnv->FindClass() fails in JNI_OnLoad [duplicate]JNIEnv->FindClass() 在 JNI_OnLoad 中失败 [重复]
【发布时间】:2012-04-18 05:08:50
【问题描述】:

可能重复:
How do I load my own Java class in C on Android?
Application works in debug / run from Eclipse, but .APK gives .classNotFoundException when parsing XML layout that contains a custom View

在 Android 中,我通过以下方式访问原生 C 库:

System.loadLibrary("testlib");

加载本地库。 在 JNI_OnLoad() 函数中,它试图找到一个 Java 胶水代码类:

JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved) {
        JNIEnv *env;
        jclass k;
        jint r;

        r = vm->GetEnv ((void **) &env, JNI_VERSION_1_4);
        k = env->FindClass ("com/test/android/aclass");

FindClass() 失败,并抛出 NoClassDefFoundError 异常。 知道为什么我无法从 C 代码中看到我的 Java 类吗?

我在另一个测试应用程序中使用了同一个库,并且它可以正常工作(因此我确信该库可以正常工作)。我不明白为什么一个应用程序可以找到 java 类,而另一个不能。

【问题讨论】:

  • com/test/android/aclass 类在哪里定义?在项目本身还是在混入的jar文件中?
  • 好文章——感谢您的链接。但最后发现我的问题是proguard.cfg。当我禁用 proguard 时,它现在正在工作。

标签: android java-native-interface


【解决方案1】:

找到答案。
我的线索是,如果我通过 eclipse 运行它会运行良好,并且只有在创建 .apk 文件时才会出现这个问题。

我在这里找到了解决方案:Application works in debug / run from Eclipse, but .APK gives .classNotFoundException when parsing XML layout that contains a custom View

【讨论】:

    猜你喜欢
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-10
    • 2015-07-10
    • 1970-01-01
    • 2018-02-02
    相关资源
    最近更新 更多