【问题标题】:JNI NewStringUTF crashes in androidJNI NewStringUTF 在 android 中崩溃
【发布时间】:2016-09-30 13:15:22
【问题描述】:
A/art(30231): art/runtime/check_jni.cc:65]     string: 'LevelScore11�
 art/runtime/check_jni.cc:65] '
 art/runtime/check_jni.cc:65]     in call to NewStringUTF   
A/art(16684): art/runtime/check_jni.cc:65]     from void org.cocos2dx.lib.Cocos2dxRenderer.nativeRender()
     A/art(16684): art/runtime/check_jni.cc:65]   native: #08 pc 003e93f8  /data/app/com.xxxxxxxxxx/lib/arm/libcocos2dcpp.so (_ZN7_JNIEnv12NewStringUTFEPKc+40)
     art/runtime/check_jni.`enter code here`cc:65]   native: #09 pc 003efc8c  /data/app/xxxxxxxxxxxxx/lib/arm/libcocos2dcpp.so (_Z19setIntegerForKeyJNIPKci+112)
     art/runtime/check_jni.cc:65]   native: #10 pc 005cd8b8  /data/app/xxxxxxxxxxx/lib/arm/libcocos2dcpp.so (_ZN7cocos2d11UserDefault16setIntegerForKeyEPKci+40)
     art/runtime/check_jni.cc:65]   native: #11 pc 003d62a8  /data/app/xxxxxxxxxxxx/lib/arm/libcocos2dcpp.so (???)
     art/runtime/check_jni.cc:65]   native: #12 pc 004553f4  /data/app/xxxxxxxxxxxx/lib/arm/libcocos2dcpp.so (_ZN7cocos2d8CallFunc7executeEv+156)
     art/runtime/check_jni.cc:65]   native: #13 pc 0045534c  /data/app/xxxxxxxxxxxx/lib/arm/libcocos2dcpp.so (_ZN7cocos2d8CallFunc6updateEf+40)

对于许多文件,我在调用时遇到错误

NewStringUTF 函数

APP 在这个函数处崩溃。

有更新的版本吗?我找到了很多解决方案,但没有运气。谁能帮帮我?

提前谢谢你。

【问题讨论】:

  • 发布您创建的整个 JNI 调用及其导致此崩溃的原因,以便我们查看您做了什么。
  • @IulianVărzaru 我无法找到导致错误的文件
  • 第 13 个字符不是 utf8 字符,因此会导致 NewStringUTF 函数崩溃。尝试在创建字符串之前转储 char*。
  • @SimonMarquis 我该如何转储它?有什么选择吗?

标签: android java-native-interface cocos2d-x cocos2d-android


【解决方案1】:

从我从您的错误中可以看出,并且由于您没有对 JNI 执行任何其他操作,因此当您尝试将整数保存到 UserDefaults 时似乎正在发生错误:

A/art(16684): art/runtime/check_jni.cc:65]   native: #08 pc 003e93f8  /data/app/com.xxxxxxxxxx/lib/arm/libcocos2dcpp.so (_ZN7_JNIEnv12NewStringUTFEPKc+40)
     art/runtime/check_jni.`enter code here`cc:65]   native: #09 pc 003efc8c  /data/app/xxxxxxxxxxxxx/lib/arm/libcocos2dcpp.so (_Z19setIntegerForKeyJNIPKci+112)
     art/runtime/check_jni.cc:65]   native: #10 pc 005cd8b8  /data/app/xxxxxxxxxxx/lib/arm/libcocos2dcpp.so (_ZN7cocos2d11UserDefault16setIntegerForKeyEPKci+40

因此,如果您以某种方式放置一个字符串而不是 int,请检查您在哪里调用 UserDefault 到 setIntegerForKey,它应该是:

cocos2d::UserDefault::getInstance()->setIntegerForKey("key", 0);

或者如果你想保存一个字符串:

cocos2d::UserDefault::getInstance()->setStringForKey("userCards", "value);

更新

好的,试试这个并在此处发布结果,这样我们就可以确切地看到正在发生的事情:

cd $ANDROID_NDK
adb logcat | ./ndk-stack -sym $PROJECT_PATH/obj/local/armeabi

地点:

$ANDROID_NDK 是您的 android NDK 的路径

$PROJECT_PATH 是你的 cocos2d-x android 项目的路径

【讨论】:

  • 谢谢你的帮助。但我没有在 setIntegerForKey 中设置任何字符串。错误也可能是 UTF-8 编码,但尚未找到解决方案。你能告诉我在哪里可以找到我的 check_jni .cc 文件吗?
  • 您正在将任何内容保存到 UserDefaults 中?
  • 是的,我在 UserDefaults 中保存值,我在 setIntegerForKey 中保存整数值。我没有在 setIntegerForKey 中保存任何字符串。
  • 不知道没有看到您保存到 UserDefaults 或任何其他 JNI 调用的实际代码或部分我不能确切地说出您的问题。
猜你喜欢
  • 1970-01-01
  • 2012-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-29
  • 1970-01-01
相关资源
最近更新 更多