Ошибка при передача jintArray с помощью JNI

Пишу приложение с помощью андроид студии, на Котлине с с++ вставками. Присутствует нативная функция, которая должна возвращать c++ Int[] -> Kotlin Array:

cpp:

extern "C" JNIEXPORT jintArray JNICALL
Java_com_example_cppincludes_MainActivity_getData(
        JNIEnv *env,
        jobject /* this */){

    jintArray to_ret = env->NewIntArray(2);
    jint a[] = {10, 11};
    env->SetIntArrayRegion(to_ret,0,2,a);

    return(to_ret);
}

Kotlin:

external fun getData(): Array<Int>
...
test1_button.setOnClickListener {
    var a = getData()
}

Сборка проекта и запуск происходят успешно. После, по нажатию кнопки приложение вылетает с ошибкой:

A/art: art/runtime/java_vm_ext.cc:470] JNI DETECTED ERROR IN APPLICATION: attempt to return an instance of int[] from java.lang.Integer[] com.example.cppincludes.MainActivity.getData()

В интернете передача массива чисел cpp->Kotlin описана именно так, однако данная ошибка появляется постоянно. Подскажите пожалуйста, как ее исправить.


Ответы (1 шт):

Автор решения: user7860670

Array<Int> это Integer[] в Java, а C функция возвращает int[] в Java, которому соответствует IntArray в котлин. Соответственно сигнатура должна быть

external fun getData(): IntArray
→ Ссылка