Я пытаюсь вызвать String.getBytes()
метод для получения байтового массива в JNI из строкового объекта.JNI имеет методы CallByteMethod
, CallByteMethodV
и CallByteMethodA
, которые возвращают jbyte, но у него нет методов для возврата байтового массива java.
Я попытался вызвать метод CallByteMethod
, но я получаю ошибку
JNI ОБНАРУЖИЛА ОШИБКУ В ПРИЛОЖЕНИИ: использование удаленной локальной ссылки 0xd5ec7fe1
Другой код, который я пробовал, использовал приведение jbytearray, подобное этому
jbyteArray keyBytes = (jbyteArray)(*env)->CallByteMethod(env, stringValue, getBytesMId);
, так как в IDE появилось предупреждение
Получение указателя из целого числа без приведения.
, но затем я получаю другую ошибку, которая говорит
JNI ОБНАРУЖЕНО ОШИБКА В ПРИЛОЖЕНИИ: возвращаемый тип CallByteMethod не соответствует байту [] java.lang.String.getBytes ()
Ниже мой код:
JNIEXPORT jstring JNICALL
Java_net_jni_test_MainActivity_callTest(JNIEnv *env, jobject instance) {
jstring stringValue = "test";
jclass stringClass = (*env)->FindClass(env, "java/lang/String");
jmethodID getBytesMId = (*env)->GetMethodID(env, stringClass, "getBytes", "()[B");
jbyteArray keyBytes = (*env)->CallByteMethod(env, stringValue, getBytesMId);
return (*env)->NewStringUTF(env, "1111");
}