Недавно достаточное количество времени промучался с собиранием кокосовского проекта под android. И так небольшое количество туториалов, статей и видео зарубежных коллег, да и эти не точны, а вероятно относятся к старым версиям, поэтому и не работают. А на русском инструкций практически нет, а которые есть в основном бесполезны. Так как проблему сборки я решил, то хочу поделиться решением. Для особо внимательных – да да я снова занимаюсь разработкой игры.
И так, я предполагаю, что проект cocos2d-x у вас уже создан и вы уже посмотрели как выглядит этот проект на windows, к слову сборка именно под windows очень простая, достаточно открыть win32 проект в Visual Studio и скомпилить. Под android не так просто, нам понадобится Android Studio. Устанавливаем через Android Studio одну из актуальных Android SDK, и ещё ставим NDK, все эти действия легко делаются в Tools->Android->SDK Manager. Добавляем в переменную среды Path путь до cmake, cmake находится в папке с Android SDK %LocalAppData%\Android\sdk\cmake\3.10.2. 4988404\bin (название папки с версией вероятно у вас может быть другое, сами посмотрите какое у вас). JDK нам устанавливать не нужно, в пакете Android Studio оно уже есть.
Выбираем NDK (если возникнут какие-то проблемы, то вероятно нужны ещё другие компоненты что на скрине, но у меня они уже были установлены)

Ставим путь до cmake

Теперь нам надо исправить следующие файлы: CMakeLists.txt (лежит в корне кокос проекта) и Android.mk (лежит в proj.android/app/jni). Если у вас HelloWorld проект и больше не добавляли никаких классов, то можно пропустить этот шаг. Суть в том, что нужно добавить недостающие пути к исходникам в эти файлы. В CMakeLists.txt нужно добавить и .cpp и .h файлы. В Android.mk добавить только все .cpp файлы, а также прописать все директории в которых есть .h файлы.
Пример исправлений в файле CMakeLists.txt:
| Code | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
| <...> - тут остальная часть файла, которую менять не надо
list(APPEND GAME_SOURCE
Classes/AbstractGameObject.cpp
Classes/AppDelegate.cpp
Classes/ChoiceMenu.cpp
Classes/Contestant.cpp
Classes/dragonBones/animation/Animation.cpp
Classes/dragonBones/animation/AnimationState.cpp
Classes/dragonBones/animation/BaseTimelineState.cpp
Classes/dragonBones/animation/TimelineState.cpp
Classes/dragonBones/animation/WorldClock.cpp
Classes/dragonBones/armature/Armature.cpp
Classes/dragonBones/armature/Bone.cpp
Classes/dragonBones/armature/Constraint.cpp
Classes/dragonBones/armature/DeformVertices.cpp
Classes/dragonBones/armature/Slot.cpp
Classes/dragonBones/armature/TransformObject.cpp
<...> - тут ещё куча файлов .cpp
)
list(APPEND GAME_HEADER
Classes/AbstractGameObject.h
Classes/AppDelegate.h
Classes/ChoiceMenu.h
Classes/Contestant.h
Classes/dragonBones/animation/Animation.h
Classes/dragonBones/animation/AnimationState.h
Classes/dragonBones/animation/BaseTimelineState.h
Classes/dragonBones/animation/IAnimatable.h
Classes/dragonBones/animation/TimelineState.h
Classes/dragonBones/animation/WorldClock.h
Classes/dragonBones/armature/Armature.h
Classes/dragonBones/armature/Bone.h
Classes/dragonBones/armature/Constraint.h
Classes/dragonBones/armature/DeformVertices.h
Classes/dragonBones/armature/IArmatureProxy.h
Classes/dragonBones/armature/Slot.h
Classes/dragonBones/armature/TransformObject.h
<...> - тут ещё куча файлов .h
)
<...> - остальная часть файла, которую менять не надо |
|
Пример исправлений в файле Android.mk:
| Code | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
| <…> – тут остальная часть файла, которую менять не надо
LOCAL_SRC_FILES := hellocpp/main.cpp \
../../../Classes/AbstractGameObject.cpp \
../../../Classes/AppDelegate.cpp \
../../../Classes/ChoiceMenu.cpp \
../../../Classes/Contestant.cpp \
../../../Classes/dragonBones/animation/Animation.cpp \
../../../Classes/dragonBones/animation/AnimationState.cpp \
../../../Classes/dragonBones/animation/BaseTimelineState.cpp \
../../../Classes/dragonBones/animation/TimelineState.cpp \
../../../Classes/dragonBones/animation/WorldClock.cpp \
../../../Classes/dragonBones/armature/Armature.cpp \
../../../Classes/dragonBones/armature/Bone.cpp \
../../../Classes/dragonBones/armature/Constraint.cpp \
../../../Classes/dragonBones/armature/DeformVertices.cpp \
../../../Classes/dragonBones/armature/Slot.cpp \
../../../Classes/dragonBones/armature/TransformObject.cpp \
<…> – тут ещё куча файлов .cpp
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../../Classes \
$(LOCAL_PATH)/../../../dragonBones/ \
$(LOCAL_PATH)/../../../dragonBones/animation \
$(LOCAL_PATH)/../../../dragonBones/armature \
$(LOCAL_PATH)/../../../dragonBones/core \
$(LOCAL_PATH)/../../../dragonBones/events \
$(LOCAL_PATH)/../../../dragonBones/factories \
$(LOCAL_PATH)/../../../dragonBones/geom \
$(LOCAL_PATH)/../../../dragonBones/model \
$(LOCAL_PATH)/../../../dragonBones/parsers \
$(LOCAL_PATH)/../../../dragonBones/cocos2dx \
$(LOCAL_PATH)/../../../dragonBones/textures \
$(LOCAL_PATH)/../../../Classes/rapidjson \
$(LOCAL_PATH)/../../../Classes/rapidjson/error \
$(LOCAL_PATH)/../../../Classes/rapidjson/internal \
$(LOCAL_PATH)/../../../Classes/rapidjson/msinttypes \
<…> – тут ещё остальные директории
<…> – остальная часть файла, которую менять не надо |
|
Лайфхак как добавить исходные файлы если у вас их очень много. Зайдите в cmd в папку с исходниками, наберите:
| Code | 1
| dir /B /s | find ".cpp" |
|
Выведет список всех .cpp в проекте, осталось только подкорректировать текст автозаменой и добавить пути в CMakeLists.txt и в Android.mk.
Почти готово, теперь открываем папку proj.android в Android Studio как проект. Главное иметь достаточно места на диске, сборка съест около 2-3 гигов. Нажимаем Build->Build APK в Android Studio, ждём минут 15, после можем радоваться собранному APK. В итоге всё достаточно просто если есть инструкция.
Источник: https://catplusplus.ru/blog/build_cocos2dx_android
|