小编tes*_*est的帖子

Android JNI 异常处理

我需要一个在 JNI 代码中实现的异常处理。我不擅长 jni,找不到任何好的例子。因此,请为此提供完整的示例。

这就是我正在做的:

jint JNI_OnLoad(JavaVM* vm, void* reserved) {
    jint result = -1;
    g_JavaVM = vm;

    if (vm->GetEnv((void **) &envLocal, JNI_VERSION_1_6) != JNI_OK) {

        return -1;
    }

    jclass clazz;
    **clazz = envLocal->FindClass("com/graphics/myclass/MyClass");**
    if (clazz == NULL)
        __android_log_print(ANDROID_LOG_ERROR, "MyClass",
                "clazz value is null");
    g_clazz = (jclass) envLocal->NewGlobalRef(clazz);

    // STEP 3/3 : Delete the no longer needed local reference
    envLocal->DeleteLocalRef(clazz);
    result = JNI_VERSION_1_6;
    return result;
}
Run Code Online (Sandbox Code Playgroud)

现在我需要如果这个 MyClass 不可用(因为应用程序开发人员没有相应的 jar 文件),那么不应该有任何应用程序崩溃。当使用 System.LoadLibrary("libmyclass.so") 和这个 "com/graphics/myclass/MyClass" 类加载库时,将调用 JNI_OnLoad。

目前,如果此 jar 未包含在应用程序中,则会导致应用程序崩溃并出现以下异常

F/art …
Run Code Online (Sandbox Code Playgroud)

java-native-interface android exception android-ndk

4
推荐指数
1
解决办法
4854
查看次数