У меня есть проект андроида, который использует библиотеку C++, и мне нужно отправить массив объектов в код C++.JNI массив объектов доступа от ошибки C
Это мой Java нативный код связывают
class MyLib {
public static native void testArray(String[] array);
}
Это, как я называю это
...
MyLib.testArray(new Object[20]);
...
И это мой C++ JNI код:
JNIEXPORT void JNICALL Java_com_android_mypackage_MyLib_testArray(JNIEnv * env, jobjectArray arr) {
__android_log_print(ANDROID_LOG_INFO,"test","test array!!!!!!!!");
int count = env->GetArrayLength(arr);
__android_log_print(ANDROID_LOG_INFO,"test","array length %d", count);
for (int i=0; i<count; i++) {
__android_log_print(ANDROID_LOG_INFO,"test","--- get item %d", i);
jstring jkey = (jstring) env->GetObjectArrayElement(arr, i);
__android_log_print(ANDROID_LOG_INFO,"test","item %d", i);
env->DeleteLocalRef(jkey);
}
}
Когда я исполняю что , logcat показывает это, и исполнение заканчивается сигшевым 11
JNI WARNING: jarray arg has wrong type (expected array, got Ljava/lang/Class;) in Lcom/android/mypackage/MyLib;.testArray:([Ljava/lang/Object;)V (GetArrayLength)
Любые идеи, почему моя ссылка на массив является ссылкой на класс? У меня нет проблем с массивами родных типов, только с объектами.