前回に引き続きCocos2d-xのv4への移行を行なっていきます
4.Androidのビルド
Androidは3.17でCMakeが導入されているので3.17から
することは64bit対応とAndroidX対応程度ですが
今回はCMakeに習熟していない方のためにCMakeList.txtを
再起的参照でソースを読み込むように変更したいと思います
それ以前のバージョンから移行する場合にはCMake対応する必要があります
CMakeList.txt,build.gradleをそれぞれv4から取得してきて
dependanciesを移せば移行できると思います
確認環境
あくまで動作確認環境なので
必須のものもそうでないものも混ざっています
- Android Studio 4.1.2
- Android SDK 9.0 Pie (API Level 28)
- Android SDK Build-tools 28.0.3
- NDK 21.1.6352462
- CMake 3.18.1
- Android SDK Platform tools 28.0.1
4.1 build.gradleの修正
[11_gradel]
proj.android/build.gradleを修正していきます
gradleツールのバージョンをあげます
ここではbuildscript > dependanciesの
com.android.tools.build:gradleを3.1.0から4.1.1
に修正します
classpath 'com.android.tools.build:gradle:3.1.0'
->
classpath 'com.android.tools.build:gradle:4.1.1'
また、画像のようにrepositoriesにgoogle()がない場合は
追加してください
4.2 gradle-wrapper.propertiesの修正
proj.android/gradle/gradle-wrapper.propertiesを修正します
gradleのバージョンをあげます
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip
4.3 CMakeバージョンの指定
前回iOS対応でCMakeバージョンを3.15以上に指定しているので
AndroidStudioのCMakeのバージョンと一致しない場合があります
その場合はCMakeのバージョンを指定します
proj.android/app/build.gradleを修正します
android > externalNativeBuild > cmake
にバージョンを指定します
下記のように修正します
externalNativeBuild {
if (PROP_BUILD_TYPE == 'ndk-build') {
ndkBuild {
path "jni/Android.mk"
}
}
else if (PROP_BUILD_TYPE == 'cmake') {
cmake {
path "../../CMakeLists.txt"
version "3.18.1"
}
}
}
4.4 64bit対応
proj.android/gradle.propertiesを修正します
PROP_APP_ABIにarm64-v8aを追加します
下記のようになるはずです
PROP_APP_ABI=armeabi-v7a:arm64-v8a
4.5 AndroidX対応
これはAndroidStudioの機能でAndroidX対応がありますので実行します
Refactor -> Migrate to AndroidX...
4.6 SimpleAudioEngineが必要な場合
CMakeListsltxtのtarget_include_directoriesにpathを追加します
${COCOS2DX_ROOT_PATH}/cocos/editor-support/cocostudio
target_include_directoriesは次のようになります
target_include_directories(${APP_NAME}
PRIVATE Classes
PRIVATE ${COCOS2DX_ROOT_PATH}/cocos/audio/include/
PRIVATE ${COCOS2DX_ROOT_PATH}/cocos/editor-support/cocostudio)
4.7 CMakeのソース再帰取得
ファイル指定している部分を再帰的に取得するように修正します
CMakeLists.txtの該当箇所を
list(APPEND GAME_SOURCE
Classes/AppDelegate.cpp
Classes/HelloWorldScene.cpp
)
list(APPEND GAME_HEADER
Classes/AppDelegate.h
Classes/HelloWorldScene.h
)
次のように変更します
# get source files recursive
file(GLOB_RECURSE GAME_SOURCE Classes/*.cpp Classes/*.c)
list(LENGTH GAME_SOURCE GAME_SOURCE_count)
message(STATUS "[INFO] Found ${GAME_SOURCE_count} cpp files.")
# get header files recursive
file(GLOB_RECURSE GAME_HEADER Classes/*.h Classes/*.hpp)
list(LENGTH GAME_HEADER GAME_HEADER_count)
message(STATUS "[INFO] Found ${GAME_HEADER_count} header files.")
# get headr dir
MACRO(HEADER_DIRECTORIES return_list)
FILE(GLOB_RECURSE new_list Classes/*.h Classes/*.hpp)
SET(dir_list "")
FOREACH(file_path ${new_list})
GET_FILENAME_COMPONENT(dir_path ${file_path} PATH)
SET(dir_list ${dir_list} ${dir_path})
ENDFOREACH()
LIST(REMOVE_DUPLICATES dir_list)
SET(${return_list} ${dir_list})
ENDMACRO()
HEADER_DIRECTORIES(header_dir_list)
list(LENGTH header_dir_list header_dir_list_count)
message(STATUS "[INFO] Found ${header_dir_list_count} header directories.")
header_dir_listはヘッダファイルのパスをリスト化したものです
これもtarget_include_directoriesしましょう
target_include_directories(${APP_NAME}
PRIVATE Classes
PRIVATE ${COCOS2DX_ROOT_PATH}/cocos/audio/include/
PRIVATE ${COCOS2DX_ROOT_PATH}/cocos/editor-support/cocostudio
PRIVATE ${header_dir_list}
)
プラットフォームにおいてファイルを除外する必要がある場合があります
次のように指定して除外します
絶対パスでないとちゃんと削除してくれないので取得して
GAME_SOURCEから削除しています
# file to remove
get_filename_component(full_path_test_cpp ${CMAKE_CURRENT_SOURCE_DIR}/Classes/test.cpp ABSOLUTE)
list(REMOVE_ITEM GAME_SOURCE "${full_path_test_cpp}")
4.7 Compile
Android Studioでビルドしてみましょう
ビルドが通るはずです
4.8 参考