Android JNI 使用NDK出现 input is not valid Modified UTF-8
崩溃条件:使用(*env)->NewStringUTF(env, result);
原因:https://stackoverflow.com/questions/12127817/android-ics-4-0-ndk-newstringutf-is-crashing-down-the-app
解决办法:
1、返回jbytearray,然后交由java层面处理
2、不使用系统自带的方法NewStringUTF,而是采用反射的方法:
jstring charToJstring(JNIEnv *envPtr, char *src) { JNIEnv env = *envPtr; jsize len = strlen(src); jclass clsstring = env->FindClass(envPtr, "java/lang/String"); jstring strencode = env->NewStringUTF(envPtr, "UTF-8"); jmethodID mid = env->GetMethodID(envPtr, clsstring, "<init>", "([BLjava/lang/String;)V"); jbyteArray barr = env->NewByteArray(envPtr, len); env->SetByteArrayRegion(envPtr, barr, 0, len, (jbyte *) src); return (jstring) env->NewObject(envPtr, clsstring, mid, barr, strencode); }
代码来自:https://github.com/weizongwei5/AESJniEncrypt/blob/master/aesjni/src/main/jni/JNIEncrypt.c
另外可参考 NDK开发 - JNI基本数据和字符串处理。

浙公网安备 33010602011771号