, std::string jbyte, java- java jstring, ++ jni. , 170k , , emoji , ... . , , Android 5.x, , . Android 4.x , .
++ - :
jstring JniHelper::getjString(const char *input) {
JniMethodInfo minfo;
bool hasMethod = JniHelper::getStaticMethodInfo (minfo, APPTAG_JNI_PACKAGE_NAME, "convertCStringToJniSafeString", "([B)Ljava/lang/String;");
if (!hasMethod)
{
return minfo.env->NewStringUTF("");
}
else
{
string nativeString = std::string(input);
jbyteArray array = minfo.env->NewByteArray(nativeString.length());
minfo.env->SetByteArrayRegion(array,0,nativeString.length(),(jbyte*)nativeString.c_str());
jstring str = (jstring)minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID, array);
minfo.env->DeleteLocalRef(array);
return str;
}
}
java java :
public static String convertCStringToJniSafeString(byte[] input) {
try {
String nativeString = new String(input, "UTF-8");
return nativeString;
} catch (UnsupportedEncodingException e) {
Log.e(APPTAG, "Couldn't convert the jbyteArray to jstring");
return "";
}
}
jstring ( UTF8) , - , , .
, - ... , ...