【问题标题】:How to debug cocos2d-x 3 native code on android device如何在android设备上调试cocos2d-x 3原生代码
【发布时间】:2014-08-11 14:43:36
【问题描述】:

我找不到任何食谱/教程如何在调试中构建一个适用于 Android 的 cocos2d-x 3.1 项目以及如何直接在设备上调试它。请指出步骤帮助。

我做了什么,我有什么问题:

  • cd proj.android
  • cocos compile -p android -m debug --ndk-mode NDK_DEBUG=1(使用调试信息构建)
  • cocos run -p android -m debug 部署在设备上
  • 在设备上运行应用程序
  • cd jni
  • ndk-gdb

我得到这个错误:

Nareks-MacBook-Pro:jni Narek$ ndk-gdb
jni/Android.mk:67: *** Android NDK: Aborting.    .  Stop.
ERROR: The device does not support the application's targetted CPU ABIs!
       Device supports:  armeabi-v7a armeabi
       Package supports: Android NDK: 

Application.mk我已经加了:

APP_ABI := armeabi armeabi-v7a
APP_PLATFORM := android-10

但它没有帮助。我做错了什么?

编辑:添加在项目jni 目录中调用的ndk-build DUMP_APP_ABI 命令的结果:

Nareks-MacBook-Pro:jni Narek$ ndk-build DUMP_APP_ABI 
Android NDK: /Users/Narek/NoorGames/Games/test2/proj.android/jni/Android.mk: Cannot find module with tag '.' in import path    
Android NDK: Are you sure your NDK_MODULE_PATH variable is properly defined ?    
Android NDK: The following directories were searched:    
Android NDK:         
/Users/Narek/NoorGames/Games/test2/proj.android/jni/Android.mk:67: *** Android NDK: Aborting.    .  Stop.

【问题讨论】:

  • 您能检查一下proj.android\obj\local\armeabiproj.android\obj\local\armeabi-v7adirectories 中是否有为各个ABI 生成的obj 文件吗?
  • @VikasPatidar 在这些目录中我有一些 .a.so 文件 (libcocos2d.a, libcocos2dcpp.so, libbox2d.a) 以及两个目录:objsobjs_debug。在每个目录中,我都有以下目录box2d_static, cocos2dcpp_shared, cocos_extension_static...。在其目录中,有其他目录的目标文件和目标文件。这是正确的吗?
  • 使用ndk-build DUMP_APP_ABI 找到正确的ABI,然后在Application.mk 中更改它同时确保APP_PLATFORM 与在设备上运行相同。例如android-10 适用于 Android 2.3.3 是运行设备的版本,然后还更新 AndroidManiefest.xml 以更正目标和最低版本。将它们设置为android:minSdkVersion="10" android:targetSdkVersion="10" 保持相同。我已经在 Eclipse 中尝试使用带有 NDK-r9d 的 cocos2dx 3.0 版本。
  • @VikasPatidar 感谢您的帮助。请在我的编辑问题文本中查看ndk-build DUMP_APP_ABI的结果。
  • @VikasPatidar 我认为你救了我的命 :) 使用 ndk-build DUMP_APP_ABI 后,我看到 NDK_MODULE_PATH 不见了。我打电话给cocos compile -p android -m debug --ndk-mode NDK_DEBUG=1。此命令显示应设置的NDK_MODULE_PATH。我已将NDK_MODULE_PATH 导出为/Users/Narek/NoorGames/Games/test2/proj.android/../cocos2d:/Users/Narek/NoorGames/Games/test2/proj.android/../cocos2d/cocos:/Users/Narek/NoorGames/Games/test2/proj.android/../cocos2d/external,它解决了问题。

标签: c++ cocos2d-x cocos2d-x-3.0


【解决方案1】:

这是在 Android 设备上调试 cocos2d-x 3.x 的分步教程。如果您做得更好,请更正或优化我的步骤。

  1. cd proj.android
  2. cocos compile -p android -m debug --ndk-mode NDK_DEBUG=1(使用调试信息构建)
  3. cocos run -p android -m debug 在设备上部署(有时它会重建,我不知道为什么)。此命令会卸载以前的安装,安装新安装并在设备上运行应用。
  4. 确保在proj.android/libs/armeabi 目录中有以下文件gdb.setup, gdbserver, libcocos2dcpp.so
  5. 还要确保在/proj.android/jni/obj/local/armeabi 目录中有app_process, gdb.setup, libc.so, linker
  6. ndk-gdb(重要!这应该在项目目录中调用,而不是在jni 目录中)

如果成功了,那么恭喜!但是在这一步你可能会看到这样的错误信息:

Nareks-MacBook-Pro:proj.android Narek$ ndk-gdb
jni/Android.mk:67: *** Android NDK: Aborting.    .  Stop.
ERROR: The device does not support the application's targetted CPU ABIs!
       Device supports:  armeabi-v7a armeabi
       Package supports: Android NDK: 

别担心 :)。让我们看看有什么问题:

  1. 这是在项目的jni 目录中调用ndk-build DUMP_APP_ABI 命令的结果:

    Nareks-MacBook-Pro:jni Narek$ ndk-build DUMP_APP_ABI Android NDK:/Users/Narek/NoorGames/Games/test2/proj.android/jni/Android.mk:找不到带有标签“。”的模块在导入路径中
    Android NDK:您确定您的 NDK_MODULE_PATH 变量定义正确吗?
    Android NDK:搜索了以下目录:
    Android NDK:
    /Users/Narek/NoorGames/Games/test2/proj.android/jni/Android.mk:67:*** Android NDK:中止。 .停下来。

如您所见,NDK_MODULE_PATH 不见了。要获取该值,请执行以下操作。转到编译代码的步骤。在执行命令cocos compile -p android -m debug --ndk-mode NDK_DEBUG=1 的第一行中,您可以看到如下内容:

Runing command: compile
Building mode: debug
building native
NDK build mode: NDK_DEBUG=1
The Selected NDK toolchain version was 4.8 !
running: '/Users/Narek/NoorGames/android-ndk-r9d/ndk-build -C /Users/Narek/NoorGames/Games/test2/proj.android -j1 NDK_MODULE_PATH=/Users/Narek/NoorGames/Games/test2/proj.android/../cocos2d:/Users/Narek/NoorGames/Games/test2/proj.android/../cocos2d/cocos:/Users/Narek/NoorGames/Games/test2/proj.android/../cocos2d/external'
  1. 从上面的日志中复制您会看到NDK_MODULE_PATH 的必要值。执行以下命令export NDK_MODULE_PATH=/Users/Narek/NoorGames/Games/test2/proj.android/../cocos2d:/Users/Narek/NoorGames/Games/test2/proj.android/../cocos2d/cocos:/Users/Narek/NoorGames/Games/test2/proj.android/../cocos2d/external(注意复制你的路径不是我的)

就是这样。现在在设备上运行游戏,cd proj.android,调用ndk-gdb,您应该可以使用 gdb 进行调试了。

我个人找这种教程已经20多天了。我希望你已经喜欢你的调试了。 :) 感谢@VikasPatidar 对ndk-build DUMP_APP_ABI 步骤的帮助!


EDIT1: 正如 Vikas 所说,您可以在 Android.mk 文件中添加 NDK_MODULE_PATH,如下所示:

NDK_MODULE_PATH := $(LOCAL_PATH)/../../../../cocos
NDK_MODULE_PATH += $(LOCAL_PATH)/../../../../external

EDIT2:如果您的应用在此处崩溃,这是一种通过阻止直接调试来调查问题的非常强大且简单的方法:

adb logcat | $NDK_ROOT/ndk-stack -sym $PROJECT_PATH/obj/local/armeabi

它打印故障转储。

【讨论】:

  • 谢谢你——尤其是最后一个 EDIT2。以前从未见过。
  • 我的项目构建成功。但是在 proj.android/libs/armeabi 目录中,我没有文件 gdb.setup、gdbserver。我只有 libcocos2dcpp.so。我如何获得它们?
  • @John -m debug --ndk-mode NDK_DEBUG=1 不创建该文件?
  • 不,它没有。我有 cocos2d-x v 3.7、NDK r10c 和 Android SDK 22。NDK 工具链版本是 4.9。我不知道这些是否重要,因为我之前没有制作任何安卓应用程序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-05
  • 1970-01-01
  • 1970-01-01
  • 2015-08-23
  • 1970-01-01
相关资源
最近更新 更多