Я использую последние версии, и я озадачен тем, что подписи 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