Android JNI вызывает метод GetStringUTFLength при сбое - PullRequest
0 голосов
/ 29 ноября 2018

Код

std::string abc(const char* param)
{
    JNIEnv *pJNIEnv = GetJNIEnv();

    //TODO : for testing
    jstring jstr = pJNIEnv->NewStringUTF("Ñandú");  //can pass param also
    std::string result = convertJStringToString(pJNIEnv, jstr);


    return result;
}


std::string convertJStringToString(JNIEnv *env, jstring str) {
    const jsize len = env->GetStringUTFLength(str);
    const char *strChars = env->GetStringUTFChars(str, (jboolean *) 0);
    std::string Result(strChars, len);
    env->ReleaseStringUTFChars(str, strChars);
    return Result;
}

Получение отчета о сбое в Play Store

pid: 0, tid: 0 >>> x.abc.xyz <<<

backtrace:
  #00  pc 0000000000071914  /system/lib64/libc.so (tgkill+8)
  #01  pc 000000000001e058  /system/lib64/libc.so (abort+88)
  #02  pc 0000000000456740  /system/lib64/libart.so (_ZN3art7Runtime5AbortEPKc+528)
  #03  pc 0000000000456eb8  /system/lib64/libart.so (_ZN3art7Runtime7AborterEPKc+24)
  #04  pc 000000000054a840  /system/lib64/libart.so (_ZN7android4base10LogMessageD1Ev+912)
  #05  pc 00000000002e6534  /system/lib64/libart.so (_ZN3art9JavaVMExt8JniAbortEPKcS2_+1732)
  #06  pc 00000000002e683c  /system/lib64/libart.so (_ZN3art9JavaVMExt9JniAbortFEPKcS2_z+204)
  #07  pc 0000000000363b30  /system/lib64/libart.so (_ZN3art3JNI18GetStringUTFLengthEP7_JNIEnvP8_jstring+816)
  #08  pc 00000000001e205c  /data/app/x.abc.xyz-Sor8tcKXEtf7w-3TH6bZFw==/lib/arm64/libnative-lib.so (_Z22convertJStringToStringP7_JNIEnvP8_jstring+44)

Невозможно понять, почему это сбой, в основном сбой на Android 8.0.Пожалуйста, не говорите, что передайте значение jstring NULL - это причина, по которой я уже проверил свой код перед передачей jstring в этот метод.

...