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基本数据和字符串处理

posted @ 2017-07-27 16:18  环球移动团队  阅读(1768)  评论(0)    收藏  举报