Manejo de excepciones de Android JNI

Necesito un manejo de excepciones implementado en código JNI. No soy bueno en jni y no puedo encontrar ningún buen ejemplo. Por lo tanto, proporcione un ejemplo completo de esto.

Esto es lo que estoy haciendo:

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; } 

Ahora tengo una necesidad donde si este MyClass no está disponible (porque el revelador de la aplicación no tiene el archivo jar correspondiente) entonces, no debe haber ninguna caída de la aplicación. JNI_OnLoad se llamará al cargar una biblioteca usando System.LoadLibrary ("libmyclass.so") y esta clase "com / graphics / myclass / MyClass".

Actualmente, si este tarro no está incluido en la aplicación, esto causa que la aplicación se bloquee con una excepción por debajo

 F/art (14708): sart/runtime/check_jni.cc:65] JNI DETECTED ERROR IN APPLICATION: JNI NewGlobalRef called with pending exception 'java.lang.ClassNotFoundException' thrown in unknown throw location F/art (14708): sart/runtime/check_jni.cc:65] in call to NewGlobalRef F/art (14708): sart/runtime/check_jni.cc:65] from java.lang.String java.lang.Runtime.nativeLoad(java.lang.String, java.lang.ClassLoader, java.lang.String) F/art (14708): sart/runtime/check_jni.cc:65] "main" prio=5 tid=1 Runnable 

Lo que necesito es más bien esta excepción manejada por android en algún lugar, debe manejarse en JNI_OnLoad para que la aplicación no se bloquee. No quiero manipulación de excepciones por java.

Por lo que mi pensamiento es si capturar excepción lanzada por "clazz = envLocal-> FindClass (" com / graphics / systemOp / SystemOp ");" Ser manejado en JNI_OnLoad después de esto.

¿Puede alguien sugerir un ejemplo (complete uno) porque no puedo implementarlo. Con el código fuente completo por favor. Pregúnteme si necesita más información.

Puede llamar al siguiente código después de realizar operaciones jni que pueden lanzar:

 bool checkExc(JNIEnv* env) { if(env->ExceptionCheck()) { env->ExceptionDescribe(); // writes to logcat env->ExceptionClear(); return true; } return false; } 
  • JNI- java.lang.UnsatisfiedLinkError: Método nativo no encontrado
  • Generación de archivos .so en Android Studio 1.0.2 con NDK
  • Biblioteca no encontrada debido a targetSdkVersion (armeabi-v7a y libcryptopp.so)
  • ¿Qué es el método Descriptor / signature para byte byte array usando JNI?
  • Biblioteca binaria preconfigurada nativa en Android Studio con el complemento experimental de Gradle
  • La compilación con NDK da error para los archivos de encabezado incluidos correctamente
  • Pasar un objeto Java a C ++ a través de JNI y luego volver a Java, a través de void *
  • Definir macro para registrar error con archivo y línea en android
  • Incluye la biblioteca Boost C ++ en android
  • ¿Cómo utilizar Java con NDK Android?
  • Cambiar Actividad con JNI Llamar o usar Openfeint provoca App-Crash
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.