在 JNI 中追加多个 jstring 的最简单方法是什么?

What may be the easiest way to append multiple jstrings in JNI?

我正在开发一个 android 应用程序,我需要在其中附加 5-6 个 jstring,并希望 return 在本机代码中添加一个 jstring。字符串就像...

jstring1= "Hello, "
jstring2= "How"
jstring3= "are"
jstring4= "you"
jstring5= "today?"

我想 return 一个 jstring,例如 "Hello, how are you today?" 我只是想知道最简单的方法。

首先,你做一个StringBuilder:

jclass cls_StringBuilder = env->FindClass("java/lang/StringBuilder");
jmethodID ctr_StringBuilder = env->GetMethodID(cls_StringBuilder, "<init>", "(I)V");
jobject stringBuilder = env->NewObject(cls_StringBuilder, ctr_StringBuilder, 100);

然后逐个字符串追加:

jmethodID mid_StringBuilder_append = env->GetMethodID(cls_StringBuilder, "append", "(Ljava/lang/String;)Ljava/lang/StringBuilder;");
for (auto str: { jstring1, jstring2, jstring3, jstring4, jstring5 }) {
  env->CallObjectMethod(stringBuilder, mid_StringBuilder_append, str);
}

终于抓取了StringBuilder的内容:

jmethodID mid_StringBuilder_toString = env->GetMethodID(cls_StringBuilder, "toString", "()Ljava/lang/String;");
jstring final = (jstring) env->CallObjectMethod(stringBuilder, mid_StringBuilder_toString);
return final;