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:
- JNI cambiar C a C ++
- Recortar video como whatsapp
- Pasar una cadena al código C en Android NDK
- Uso de la biblioteca compartida existente (.so) en la aplicación de Android
- Mi codificador JNI JPEG para Android es muy lento
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.
- Android NDK Exception failed: dlopen failed: no se puede localizar el símbolo "_ZN7Tangram11setPositionEdd" referenciado por "libtangram.so"
- ¿Cómo acceder a recursos (como sonido, imágenes, etc) directamente desde código nativo usando Android-NDK?
- Recuperar android.os.Build ... propiedades del sistema mediante la aplicación puramente nativa de Android
- No se encontró ninguna implementación para Native UnsatisfiedLinkError Exception Android JNI
- Cómo imprimir los mensajes de registro con el marco de Android
- JNI se bloquea al llamar a CallVoidMethod
- Invocación de funciones nativas de la biblioteca portada
- Cómo pasar una estructura como un argumento a la función java o volver a java de jni
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; }
- ¿Por qué el límite de frecuencia de anuncios de AdMob no funciona?
- Múltiples hilos de lectura desde el mismo socket