Вот пошаговое руководство по отладке cocos2d-x 3.x на устройстве Android. Пожалуйста, исправьте или оптимизируйте мои шаги, если вы сделаете это лучше.
cd proj.android
cocos compile -p android -m debug --ndk-mode NDK_DEBUG=1
(для сборки с отладочной информацией)
cocos run -p android -m debug
для развертывания на устройстве (иногда он перестраивается, и я не знаю, почему). Эта команда удаляет предыдущую установку, устанавливает новую и запускает приложение на устройстве.
- убедитесь, что в каталоге
proj.android/libs/armeabi
у вас есть следующие файлы gdb.setup, gdbserver, libcocos2dcpp.so
- также убедитесь, что в каталоге
/proj.android/jni/obj/local/armeabi
у вас есть app_process, gdb.setup, libc.so, linker
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:
Не волнуйся :). Давайте посмотрим, что не так:
вот результат команды 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'
- скопируйте из лога выше вы видите нужное значение
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
proj.android\obj\local\armeabi
иproj.android\obj\local\armeabi-v7a
? - person Vikas Patidar   schedule 21.06.2014.a
и.so
(libcocos2d.a, libcocos2dcpp.so, libbox2d.a
), а также два каталога:objs
иobjs_debug
. В каждом из этих каталогов у меня есть следующие каталогиbox2d_static, cocos2dcpp_shared, cocos_extension_static...
. В свою очередь в этих каталогах находятся объектные файлы других каталогов с объектными файлами. Это правильно? - person Narek   schedule 21.06.2014ndk-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.2014ndk-build DUMP_APP_ABI
в моем тексте вопроса о редактировании. - person Narek   schedule 22.06.2014ndk-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.2014ndk-gdb
? И второй вопрос: что обозначаетAPP_PLATFORM
? Это минимальный Android API или какое приложение должно быть скомпилировано? - person Narek   schedule 22.06.2014APP_PLATFORM
в качестве целевой платформы, используемой вlocal.properties
- person Vikas Patidar   schedule 22.06.2014