一个JNI错误出现在quick cocos中
A JNI error met in quick-cocos
我用quick-cocos2d-x编写了一个应用程序。该应用程序在过去18个月运行良好。但今天,一个未知的错误出现了,它总是在谷歌上完成付款时崩溃。
我找到了挤压发生的位置。
xxx.java
myApp.this.runOnGLThread(new Runnable() {
@Override
public void run() {
Log.d(TAG, obj.toString());
C.androidPaymentFinished(obj.toString());
}
});
该函数是一个本地静态函数,用于调用CPP部分。
C.java
class C{
public static String void androidPaymentFinished(String data);
// other functions
}
main.cpp
void Java_com_company_util_C_androidPaymentFinished(JNIEnv* env, jobject thiz, jstring data) {
const char* str1 = jstringTostring2(data);
PlatformAPI::googlePayFinish(str1);
}
在使用JNI链接CPP部件期间。
JNI DETECTED ERROR IN APPLICATION: use of invalid jobject 0x9bbbfe80
上面的错误日志显示出来,程序崩溃了。
但奇怪的是,该应用程序以前从未崩溃,代码也从未更改。当崩溃发生时,其他代码相同的应用程序甚至一次都没有崩溃。
以前有人遇到过这种情况吗?
附加
我认为错误发生在java代码试图调用本机函数的时候。无论CPP部分做什么,程序总是在几秒钟后崩溃。我对cpp代码进行了注释,并使其成为一个空白函数,但程序仍然崩溃了。
我确信输入是有效的。在调用C.androidPaymentFinished(data)之前,我输出了一个日志,并且data是一个有效的JSON样式String。
{"status":"ok","newCredits":222839450,"newGems":10,"newTickets":600,"stopIndex":5,"reward":100000,"sku":"com.company.app.item.000001"}
我发现C.java中的androidPaymentFinished()实际上不返回void,而是返回String(我为之前发布了错误的描述而道歉)。所以CPP部分的返回与Java部分的返回不同。这会导致内存泄漏并导致崩溃。
相关文章:
- Qt Quick-如何仅从c++代码与qml属性交互
- 使用的未初始化局部变量'Quick'
- Qt Quick,如何更改 Ui 源代码?
- 我可以将cocos项目导入虚幻4吗?
- Qt Quick - 如何在 qml 接口中使用继承自 QQuickPaintedItem 的 c++ 类?
- 如何在cocos-2dx中隐藏ios13中的状态栏
- 禁用优化后,quick-bench.com 基准测试要快得多
- 如何使用 cocos creator 在 Cocos2d-X/Cocos2d-JS 中调用 javascript 函数并
- 为什么"quick sorting"算法的这两种变体在性能上差异如此之大?
- Qt Quick + CMake + 自定义 QObject 导致对"vtable"的未定义引用
- 通过CMake在没有Qt Creator的情况下构建Qt5 Quick项目
- 如何拦截Qt Quick qml事件
- CMake,QT Quick & Visual Studio:"qrc:/main.qml:-1 File not found"
- 在Raspbian lite上运行Qt Quick(EGLFS)
- Qt Quick 2 Qml:将文本准确地放在圆圈的中心
- 为什么 Cocos 2D-X v3 在 C++ 中如此频繁地使用指针
- QT Quick (QML) assemble mac-.bundle -> 不是使用 macdeployqt 时的动态库错误
- 从QML(Qt Quick应用程序)调用C++方法
- 在Windows 8上设置COCOS 2DX游戏开发环境中的错误
- 一个JNI错误出现在quick cocos中