如何在Android设备上调试cocos2d-x 3本机代码

时间:2014-06-20 19:08:15

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

我找不到任何食谱/教程如何构建调试为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

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

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

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.

1 个答案:

答案 0 :(得分:24)

以下是在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目录中)
  7. 如果有效,那么恭喜!但在此步骤中,您可能会看到以下错误消息:

    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. 这是项目ndk-build DUMP_APP_ABI目录中调用的jni命令的结果:

      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:正在中止。 。停止。

    2. 如您所见,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(注意复制路径而不是我的路径)
      2. 就是这样。现在在设备上运行游戏,cd proj.android,调用ndk-gdb,您应该可以使用gdb进行调试。

        我已经超过20天亲自寻找这种教程了。我希望你已经享受调试了。 :)感谢@VikasPatidar对ndk-build DUMP_APP_ABI步骤的帮助!


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

        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
        

        它打印崩溃转储。