0
Help us understand the problem. What are the problem?

posted at

updated at

Cocos2d-x v4移行 Android編

前回に引き続き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...

Screen Shot 2021-10-02 at 19.45.36.png

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 参考

前の記事 Cocos2d-x v4移行 iOS編

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
0
Help us understand the problem. What are the problem?