首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android JNI调用方法GetStringUTFLength JNI

Android JNI调用方法GetStringUTFLength JNI
EN

Stack Overflow用户
提问于 2018-11-29 20:42:45
回答 1查看 474关注 0票数 2

代码

代码语言:javascript
复制
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上的崩溃报告

代码语言:javascript
复制
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传递给这个方法之前已经在代码中签入的原因。

EN

回答 1

Stack Overflow用户

发布于 2020-07-28 16:39:58

我在夏米手机上也遇到过类似的问题。这是格式化字符串的问题,在本机堆栈跟踪之前,我得到了以下错误:

代码语言:javascript
复制
2020-07-28 10:35:51.321 6978-6978/cookbook.chapter2 A/okbook.chapter: art_method.cc:530] Check failed: found_virtual Didn't find oat method index for virtual method: int android.icu.text.DecimalFormat_ICU58_Android.getMinimumIntegerDigits()

有问题的代码是格式化字符串(恰好是字符串格式化的最后一个参数):

代码语言:javascript
复制
__android_log_print(ANDROID_LOG_INFO, "native", "UTF-8 string with Chinese characters: %s, string length (number of bytes) %d=%d", newStr, newStrLen, strlen(newStr));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53539350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档