Search code examples
android-ndkjava-native-interface

JNI How to concatenate two string arrays in C++ native function


I'm going to use JNI to implement C++ native function that receives two string arrays, concatenate them into one string array, and return the big string array. Actually, I'm going to extend THIS to string arrays. How can I complete the following codes?

Java side code:

String [] strarrayA={"abc", "def"}, strarrayB = {"123","456"};
String[] strarrayC = strarrayFromJNI(strarrayA, strarrayB);

public native String[] strarrayFromJNI(String[] first, String[] second);

Native side code:

jarray
Java_com_androidMexample_MainActivity_strarrayFromJNI(
    JNIEnv *env, jobject /* this */, jarray a, jarray b){

    jsize alen = env->GetArrayLength(a);
    jsize blen = env->GetArrayLength(b);

    ...
    (How can I concatenate a and b to obtain c, result <- a, b ?)

    return c;
}

How can I obtain the returned string array with strarrayC = {"abc", "def", "123", "456"}? Thanks in advance.


Solution

  • If you absolutely have to, it could go like this:

    jobjectArray ab = env->NewObjectArray(alen+blen, env->FindClass("java/lang/String"), 0);
    jsize i;
    for(i=0;i<alen;i++)
        env->SetObjectArrayElement(ab, i, env->GetObjectArrayElement(a, i));
    for(i=0;i<blen;i++)
        env->SetObjectArrayElement(ab, alen+i, env->GetObjectArrayElement(b, i));
    

    But you could do the same in Java. It won't be noticeably slower, but much easier to read and understand.