我的应用程序在C ++ / C NDK层深处随机崩溃。回溯对Google Play控制台没有帮助。
这是回溯:
#00 pc 000000000004bba8 /system/lib/libc.so (tgkill+12)
#01 pc 000000000001aa13 /system/lib/libc.so (abort+54)
#02 pc 000000000001f2f9 /system/lib/libc.so (__libc_fatal+24)
#03 pc 000000000001aedd /system/lib/libc.so (__assert2+16)
我正在考虑在我的断言包装中将assert更改为引发异常。
我从How to throw an exception in C?看了一些建议,但不确定它是否适用于Android(也适用于iOS)。
答案 0 :(得分:0)
您想弄清楚您的意思是抛出Java异常,而您想要Java异常。特别是JNI ThrowException function。
您发现有关从JNI引发异常的任何文档都将适用于Android。 (但是这些都无法在iOS上使用。)
答案 1 :(得分:0)
您可以引发Java异常,例如IllegalArgumentException
,来自JNI层,如下所示:
//JNIEnv *env,
jclass jcls = env->FindClass("java/lang/IllegalArgumentException");
env->ThrowNew(jcls, "Argument cannot be null.");
此外,您可以在JNI层中检查异常状态,如下所示:
//JNIEnv *env,
jboolean flag = env->ExceptionCheck();
if (flag) {
env->ExceptionClear();
/* code to handle exception */
}