JNI NewStringUTF在android中崩溃

时间:2016-09-30 13:15:23

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

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正在崩溃此功能。

是否有更新的版本?我找到了这么多解决方案,但没有运气。任何人都可以帮助我吗?

提前谢谢。

1 个答案:

答案 0 :(得分: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项目的路径