Не уверен насчет комментария @ Алекса, так как я не смог его попробовать.
Я нашел этот обходной путь,
Java Side:
Класс пользовательского объекта, ClassA имеет этот класс Объект массива ClassB , как показано ниже.
public ClassB objb [] = новый ClassB [размер];
Теперь вместо того, чтобы просто отправлять объект ClassA в JNI, я отправил объект ClassA и ClassB по отдельности.
Начиная с JNI, он не принимает тип пользовательского объекта из SDK 26.
* 1 028 * SENDA (obja); * * тысяча двадцать-девять
sendB (obja.objb [0]);
JNI Сторона:
ClassA a;
//sendA function for classA similiar as below.
extern "C"
JNIEXPORT jint JNICALL
Java_<PATH_TO_FUNCTION>_sendB(JNIEnv *env,jobject instance,jobject BObj) {
LOGD(TAG,"sendB: START");
jclass jBClass=env->FindClass("com/< path to class separated by '/' >");
// int Field jbid
jfieldID jbid = env->GetFieldID(jBClass, "bId", "I");
jint bId = env->GetIntField(BObj, jbid);
obja.objb[0].bId = (int) bId;
LOGI(TAG, "\t bId[%d]: %d ", 0, obja.objb[0].bId);
return 0;
}
Для итераций вы можете использовать для цикла на стороне java и отправлять итератор в качестве параметра sendA () и sendB () для JNI.
Кроме того, существует способ сериализации объекта в строку и десериализации его обратно в объект со стороны JNI. Но, будучи новичком в JNI, я не был достаточно уверен в себе десериализовать объект массива на стороне JNI.