Как сгенерировать исключение из C при использовании Android NDK? - PullRequest
0 голосов
/ 06 марта 2019

В моем приложении произошел случайный сбой глубоко внутри слоя 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) 

Я собираюсь изменить утверждение в моей обертке утверждения, чтобы вместо этого выдать исключение.

Я видел предложения от: Как создать исключение в C? и не уверен, что оно применимо для Android (переносимость также и на iOS.).

Ответы [ 2 ]

1 голос
/ 07 марта 2019

Вы можете выбросить Java Exception, например, 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 */
}
1 голос
/ 06 марта 2019

Вы хотите уточнить, что вы имеете в виду создание исключения Java, для которого вы хотите JNI.В частности, функция JNI ThrowException .

Любые документы, которые вы найдете о выдаче исключений из JNI, будут применяться к Android.(Но все это не будет работать на iOS.)

...