Android의 기본 C++ 코드에서 오류를 catch하려고합니다. 문서에 따르면 FindClass는 클래스 이름을 찾을 수 없을 때 NULL을 반환합니다. 하지만 FATAL EXCEPTION: main java.lang.NoClassDefFoundError: fake/class
이 있고 실행은 if 문에 도달하지 않습니다.Android에서 캐치 예외 NDK C++ 코드
#include <string.h>
#include <jni.h>
extern "C"
void Java_com_example_MainActivity_testError(JNIEnv *env, jobject) {
jclass clazz = env->FindClass("fake/class");
// never gets here
if (clazz == NULL) {
return;
}
}
또한이 예외는 try-catch 블록을 건너 뛰고 응용 프로그램을 중단합니다. 내 자바 코드 :
static {
System.loadLibrary("native-lib");
}
public native void testError();
...
try {
testError();
} catch (Exception e) {
// exception never get cought
}
이 또한 내가
cppFlags '-fexceptions'
를 사용합니다. 이 예외를 잡거나 앱에서 오류가 발생하지 않도록 복구하는 적절한 방법이 있습니까?
https://docs.oracle.com/javase/8/docs/technotes/guides/jni/spec/functions.html#FindClass 참 고 : NoClassDefFoundError : 요청한 클래스 또는 인터페이스에 대한 정의를 찾을 수없는 경우 . JNI에는 Java 예외가 던져지고 처리되는지 확인하는 메소드가 있습니다. Java 예외는, JNI 메소드가 복귀 할 때까지 「액티브하게」되지 않습니다. –
java.lang.NoClassDefFoundError는 java.lang.Exception에서 파생되지 않고 java.lang.Error에서 파생됩니다. 따라서 예외가 발견되지 않는 것입니다. https://docs.oracle.com/javase/7/docs/api/java/lang/NoClassDefFoundError.html –
을 참조하십시오. '-fexceptions' 플래그를 언급 했으므로 Java 및 C++ 예외를 혼동하지 마십시오. 완전히 완료되었습니다 별개의 짐승들. – zenzelezz