Странная Android Kotlin JNI особенность может кто-нибудь объяснить - PullRequest
0 голосов
/ 29 апреля 2020

Я использую последние версии, и я озадачен тем, что подписи JNI, приведенные ниже, не передают значения параметров в мою реализацию C ++. Это Kotlin функция?

- external fun fff(data:ByteArray,bitmapfile:String)   
- external fun hello(msg:String):String
- external fun addnum2(a:Int, b:Int)
- external fun addnum3(a:Int, b:Int,desc:String)
- external fun addnum4(a:Int, b:Int,desc:String):Int
- external fun addnum5(desc:String,a:Int, b:Int):Int

Я нашел только то, что нативные типы a и b работают правильно и возвращают сумму. Но как только я добавлю больше параметров, таких как строка, ниже приведено сообщение об ошибке:

Лучше всего предположить, что Kotlin пытается делегировать вызов, и объект теряет область видимости, вызывая ошибку. Внутри C ++ он не мог прочитать передаваемую строку «hello world», которая выглядит как ноль. Поэтому я попытался вернуть значение, такое, что вызывающая сторона заблокирует и сохранит область действия, но все еще нет согласованного объяснения, потому что ошибка сохраняется. Я выполняю пошаговую отладку в Android studio 3.6.3

Вот лог https://gist.github.com/25da55ca5269539e5a884e22d2a3dca5

Вот kotlin:

var msg = "hello"   
addnum5(msg,2,4)

Вот C ++:

extern "C"
JNIEXPORT jint JNICALL
Java_dx_wtf_MainActivity_addnum5(JNIEnv *env, jobject thiz, jstring desc, 
jint a, jint b) {

    const char *message = env->GetStringUTFChars(desc, 0);
    int sum = 0;
    sum = a + b;
    LOGI("*** ENTRY POINT ***");
    env->ReleaseStringUTFChars(desc, message);
    return sum;
}

Параметры не распространяются. И вышеуказанную ошибку JNI ERROR (app bug): attempt to use stale Local 0x5 (should be 0x1) я не понимаю. Я закомментировал весь impl тело C ++ и жестко закодированный return 69;, и все же ошибка сохраняется = параметры не распространяются.

Выше была ошибка при использовании телефона Oppo F9. Поэтому я использовал другой телефон Huawei, и ниже ошибка:

java_vm_ext.cc:570] JNI DETECTED ERROR IN APPLICATION: use of invalid jobject 0x4
...