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

Я не смог найти ни одной кулинарной книги/руководства по сборке в отладке проекта 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

но это не помогло. Что я делаю неправильно?

EDIT: Добавление результата команды 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.

person Narek    schedule 20.06.2014    source источник
comment
Можете ли вы проверить, созданы ли файлы obj для соответствующих ABI в каталогах proj.android\obj\local\armeabi и proj.android\obj\local\armeabi-v7a?   -  person Vikas Patidar    schedule 21.06.2014
comment
@VikasPatidar в этих каталогах у меня есть несколько файлов .a и .so (libcocos2d.a, libcocos2dcpp.so, libbox2d.a), а также два каталога: objs и objs_debug. В каждом из этих каталогов у меня есть следующие каталоги box2d_static, cocos2dcpp_shared, cocos_extension_static.... В свою очередь в этих каталогах находятся объектные файлы других каталогов с объектными файлами. Это правильно?   -  person Narek    schedule 21.06.2014
comment
используйте 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.   -  person Vikas Patidar    schedule 21.06.2014
comment
@VikasPatidar спасибо за вашу помощь. См. результат ndk-build DUMP_APP_ABIв моем тексте вопроса о редактировании.   -  person Narek    schedule 22.06.2014
comment
@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, и это решило проблему.   -  person Narek    schedule 22.06.2014
comment
Рад, что сработало!!! Я обычно добавляю этот путь в файл Android.mk. Вот пример pastebin.com/Pd3gY1p3.   -  person Vikas Patidar    schedule 22.06.2014
comment
@VikasPatidar Спасибо. Но разве этот путь не должен быть установлен в терминале, где я вызываю ndk-gdb? И второй вопрос: что обозначает APP_PLATFORM? Это минимальный Android API или какое приложение должно быть скомпилировано?   -  person Narek    schedule 22.06.2014
comment
1) Я думаю, вам не нужно указывать NDK_MODULE_PATH в качестве аргумента в терминале или командной строке. Вместо этого вы должны установить его либо в системных переменных, либо в файле mk. Если вы используете несколько версий cocos2dx, рекомендуется использовать их. 2) Я использовал APP_PLATFORM в качестве целевой платформы, используемой в local.properties   -  person Vikas Patidar    schedule 22.06.2014


Ответы (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 шагом!


EDIT1: Как прокомментировал Викас, вы можете добавить 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

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

person Narek    schedule 22.06.2014
comment
Спасибо за это - особенно последний EDIT2. Никогда раньше такого не видел. - person John O'Connor; 04.09.2014
comment
Мой проект построен успешно. Но в каталоге proj.android/libs/armeabi у меня нет файлов gdb.setup, gdbserver. У меня есть только libcocos2dcpp.so. Как мне их получить? - person Rahul Iyer; 11.08.2015
comment
@John -m debug --ndk-mode NDK_DEBUG=1 не создает эти файлы? - person Narek; 11.08.2015
comment
Нет, это не так. У меня есть cocos2d-x v 3.7, NDK r10c и Android SDK 22. Версия NDK Toolchain — 4.9. Я не знаю, имеет ли это какое-либо значение, поскольку раньше я не делал никаких приложений для Android. - person Rahul Iyer; 11.08.2015