Сбой при возврате из функции Android ndk на Samsung Galaxy S2.
В моем Java-коде я вызываю функцию NDK, и иногда (это может быть один из 20 случайных случаев) приложение зависает (ANR) сразу после возвращения из NDK. В журнале написано
12-05 04:19:59.760: D/AndroidRuntime(5607): Shutting down VM
12-05 04:19:59.760: W/dalvikvm(5607): threadid=1: thread exiting with uncaught exception (group=0x40015578)
12-05 04:19:59.775: W/dalvikvm(5607): threadid=14: thread exiting with uncaught exception (group=0x40015578)
Иногда несколько строк Java-кода выполняются до того, как это произойдет. Я попытался полностью очистить функцию NDK и удалить все параметры из нее безрезультатно. Функция вызывается из отдельного потока Java.
На других телефонах (HTC Desire HD, HTC Legend и др.) Я не видел этой проблемы.
Это мой код Java, который вызывает функцию ndk:
private static native void ndkFunctionN(
byte[] filePath1N, byte[] filePath2N,
byte[] filePath3N, byte[] tmpDirN, JavaClass callerN,
byte[] param5N, byte[] param6N, byte[] param7N);
public static void javaFunction(
File file1, File file2, File file3, String tmpDir,
JavaClass caller, String param5, String param6, String param7)
{
try {
byte[] filePath1N = file1.getPath().getBytes("UTF-8");
byte[] filePath2N = file2.getPath().getBytes("UTF-8");
byte[] filePath3N = file3.getPath().getBytes("UTF-8");
byte[] tmpDirN = tmpDir.getBytes("UTF-8");
byte[] param5N = appClassName.getBytes("UTF-8");
byte[] param6N = param6.getBytes("UTF-8");
byte[] param7N = param7.getBytes("UTF-8");
mergeAndDumpN(
filePath1N, filePath2N, filePath3N, tmpDirN,
caller, param5N, param6N, param7N);
} catch (UnsupportedEncodingException e) {
MyLog.e(e);
}
}
Это код C ++:
JNIEXPORT void JNICALL Java_com_package_name_ClassName_ndkFunctionN (
JNIEnv* env, jobject thiz,
jbyteArray filePath1N, jbyteArray filePath2N,
jbyteArray filePath3N, jbyteArray tmpDirN,
jobject callerN, jbyteArray param5N,
jbyteArray param6N, jbyteArray param7N)
{
}