作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
代码
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 商店获取崩溃报告
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 传递给此方法之前已经 checkin 我的代码的原因。
最佳答案
我在虾米手机上遇到了类似的问题。这是格式化字符串的问题,在 native 堆栈跟踪之前,我遇到了以下错误:
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()
有问题的代码是格式化字符串(恰好是字符串格式化的最后一个参数):
__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));
关于java - Android JNI 调用方法 GetStringUTFLength 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53539350/
代码 std::string abc(const char* param) { JNIEnv *pJNIEnv = GetJNIEnv(); //TODO : for testing
我是一名优秀的程序员,十分优秀!