Как отлаживать собственный код cocos2d-x 3 на устройстве Android

#c #cocos2d-x #cocos2d-x-3.0

#c #cocos2d-x #cocos2d-x-3.0

Вопрос:

Я не смог найти ни одной кулинарной книги / руководства по сборке в debug для создания проекта cocos2d-x 3.1 для Android и как отлаживать его непосредственно на устройстве. Пожалуйста, помогите, указав шаги.

Что я делаю и какие у меня проблемы:

  • 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. Можете ли вы проверить, есть ли obj-файлы, созданные для соответствующих ABI в proj.androidobjlocalarmeabi и proj.androidobjlocalarmeabi-v7a каталогах?

2. @VikasPatidar в этих каталогах у меня есть несколько .a .so файлов and ( libcocos2d.a, libcocos2dcpp.so, libbox2d.a ), а также два каталога: objs and objs_debug . В каждом из этих каталогов у меня есть следующие каталоги box2d_static, cocos2dcpp_shared, cocos_extension_static... . В свою очередь, в этих каталогах есть объектные файлы других каталогов с объектными файлами. Правильно ли это?

3. используйте ndk-build DUMP_APP_ABI , чтобы найти правильный ABI, а затем измените его, Application.mk также убедитесь APP_PLATFORM , что он работает так же, как и на устройстве. например, android-10 для Android 2.3.3 — это версия запущенного устройства, затем также обновите AndroidManiefest.xml до правильной целевой и минимальной версий. Установите их как android:minSdkVersion="10" android:targetSdkVersion="10" одинаковые. Я пробовал использовать версию cocos2dx 3.0 с NDK-r9d в Eclipse.

4. @VikasPatidar спасибо за вашу помощь. Пожалуйста, посмотрите результат ndk-build DUMP_APP_ABI в моем редактируемом тексте вопроса.

5. @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 , и это решило проблему.

Ответ №1:

Вот пошаговое руководство по отладке cocos2d-x 3.x на устройстве Android. Пожалуйста, исправьте или оптимизируйте мои шаги, если вы сделаете это лучше.

  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. вот результат 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: прерывание. . Стоп.

Как вы можете видеть 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 шагом!


РЕДАКТИРОВАНИЕ 1: как прокомментировал Викас, вы можете добавить 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
 

Он выводит аварийный дамп.

Комментарии:

1. Спасибо за это — особенно за последнее ПРАВКА2. Никогда раньше этого не видел.

2. Мой проект успешно собран. Но в каталоге proj.android/ libs/armeabi у меня нет файлов gdb.setup, gdbserver. У меня есть только libcocos2dcpp.so . Как мне их получить?

3. @John -m debug --ndk-mode NDK_DEBUG=1 не создает эти файлы?

4. Нет, это не так. У меня есть cocos2d-x версии 3.7, NDK r10c и Android SDK 22. Версия NDK Toolchain — 4.9. Я не знаю, имеет ли это какое-либо значение, поскольку я раньше не создавал никаких приложений для Android.