【问题标题】:Cocos2d-x crash when adding code to Android.mkCocos2d-x 在向 Android.mk 添加代码时崩溃
【发布时间】:2014-08-02 02:56:55
【问题描述】:

我在迁移到 Cocos2d-x 3.x 时遇到了可怕的麻烦。一切都在 iOS 上完美运行(当然可以......)但在 Android 上启动时崩溃。

我得到的错误是:

********** Crash dump: **********
Build fingerprint: 'samsung/yakjuxw/maguro:4.2.1/JOP40D/I9250XWMA2:user/release-keys'
pid: 22977, tid: 22977, name: WOOOHOO  >>> WOOOHOO <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000000
Stack frame #00  pc 00a33fd0  /data/app-lib/WOOOHOO-1/libcocos2dcpp.so (_JavaVM::GetEnv(void**, int)+28)
Stack frame #01  pc 00a34608  /data/app-lib/WOOOHOO-1/libcocos2dcpp.so (cocos2d::JniHelper::cacheEnv(_JavaVM*)+44)
Crash dump is completed

我的尝试

首先我尝试运行 Cocos2d-x 附带的 cpp 测试(来自 cocos2d-x-3.2.zip 的干净提取)。它们工作正常。

然后我尝试使用cocos 命令从头开始创建一个新项目。它编译并工作。我用 3.1 和 3.2 都试过了。

然后我尝试将我自己的资源添加到这个项目中。这就是事情变得奇怪的地方。我可以添加一些文件,但添加它们都不起作用。即使从未从默认 AppDelegate 调用代码...同样的事情发生在 3.1 和 3.2 中。

对 Android.mk 的修改

我对 proj.android/jni/Android.mk 文件所做的唯一修改是将-fexceptions 添加到APP_CPPFLAGS。

对 Android.mk 的修改

我对 proj.android/jni/Android.mk 文件所做的唯一修改是添加这些行来搜索代码

CPP_FILE_LIST := $(LOCAL_PATH)/hellocpp/main.cpp
CPP_FILE_LIST += $(wildcard $(LOCAL_PATH)/../../Classes/*.cpp)
CPP_FILE_LIST += $(wildcard $(LOCAL_PATH)/../../Classes/**/*.cpp)
CPP_FILE_LIST += $(wildcard $(LOCAL_PATH)/../../Classes/**/**/*.cpp)
CPP_FILE_LIST += $(wildcard $(LOCAL_PATH)/../../Classes/libs/jansson-2.6/*.c)
LOCAL_SRC_FILES := $(CPP_FILE_LIST:$(LOCAL_PATH)/%=%)

LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes \
                    $(LOCAL_PATH)/../../Classes/map \
                    $(LOCAL_PATH)/../../Classes/menus \
                    $(LOCAL_PATH)/../../Classes/util \
                    $(LOCAL_PATH)/../../Classes/worlds \
                    $(LOCAL_PATH)/../../Classes/libs/jansson-2.6

并取消注释

LOCAL_WHOLE_STATIC_LIBRARIES += cocostudio_static

$(call import-module,editor-support/cocostudio)

因为我使用了新 ui 命名空间中的一些小部件。

怎么了?我想不通...

【问题讨论】:

    标签: android cocos2d-x cocos2d-x-3.0


    【解决方案1】:

    您是否尝试过为 Android 调试构建? https://stackoverflow.com/a/24351602/629118你可能会得到 SIGSEGV 的堆栈跟踪。

    然后我尝试将我自己的资源添加到这个项目中。这就是事情变得奇怪的地方。我可以添加一些文件,但添加它们都不起作用。即使从未从默认 AppDelegate 调用代码...

    听起来您的来源可能有问题。即使您的应用程序的其他部分从未调用源,它也可能发生。全局构造函数被自动调用。此外,由于 Android 运行时,重新启动应用程序时永远不会清除静态变量。所以分而治之。尽可能少地添加代码、构建和启动。重复一遍。

    【讨论】:

    • 太棒了!非常感谢! :) 我在匿名命名空间中有一些全局变量,在初始化时,它们调用了一个尚未准备好的 Cocos2d-x 库函数。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-06
    相关资源
    最近更新 更多