環境
macOS Monterey
cocos2d-x 4.0
c++のプロジェクトを作ってiOSとAndroidのセットアップを行う。
ダウンロード
cocos2d-xをダウンロードする。
https://www.cocos.com/en/cocos2dx/download
ダウンロードしたzipファイルを展開する。
セットアップ
cocos2d-x-4-1.0というような名前のフォルダができるので、それを任意の場所に移動する。
ターミナルを開き、cdコマンドでフォルダに移動する。
setup.pyを実行する。
$ cd cocos2d-x-4-1.0
$ ./setup.py
setup.pyを実行するとNDK_ROOT等の入力を求められるがとりあえず無視する。
最後に下記のようなメッセージが表示される。
Please execute command: "source /Users/username/.zshrc" to make added system variables take effect
書いてあるコマンドをコピペして実行する。パスは環境によって異なる。
source /Users/username/.zshrc
CMakeのインストール
homebrewでCMakeをインストールする。
homebrewがない場合はまずhomebrewをインストールする。
https://brew.sh/index_ja
上記のページに表示されているコマンドをコピーしてターミナルに貼り付け実行する。
CMakeをインストールする。
brew install cmake
CocosConfigDepend.cmakeの修正
このままだとXcodeでビルドエラーが起きるので、
cocos2d-x-4-1.0/cmake/Modules/CocosConfigDepend.cmakeを修正する。
# Locate system libraries on iOSの後の部分を変更する。
find_library(WEBKIT_LIBRARY WebKit)の後ろに
find_library(ICONV_LIBRARY iconv)
find_library(Z_LIBRARY z)
を追記する。
"/usr/lib/libz.dylib"
"/usr/lib/libiconv.dylib"
の二行をコメントアウトして、代わりに
${ICONV_LIBRARY}
${Z_LIBRARY}
を追記する。
# Locate system libraries on iOS
find_library(UIKIT_LIBRARY UIKit)
find_library(OPENGLES_LIBRARY OpenGLES)
find_library(CORE_MOTION_LIBRARY CoreMotion)
find_library(AVKIT_LIBRARY AVKit)
find_library(CORE_MEDIA_LIBRARY CoreMedia)
find_library(CORE_TEXT_LIBRARY CoreText)
find_library(SECURITY_LIBRARY Security)
find_library(CORE_GRAPHICS_LIBRARY CoreGraphics)
find_library(AV_FOUNDATION_LIBRARY AVFoundation)
find_library(WEBKIT_LIBRARY WebKit)
# edit
find_library(ICONV_LIBRARY iconv)
find_library(Z_LIBRARY z)
# edit
list(APPEND PLATFORM_SPECIFIC_LIBS
${UIKIT_LIBRARY}
${OPENGLES_LIBRARY}
${CORE_MOTION_LIBRARY}
${AVKIT_LIBRARY}
${CORE_MEDIA_LIBRARY}
${CORE_TEXT_LIBRARY}
${SECURITY_LIBRARY}
${CORE_GRAPHICS_LIBRARY}
${AV_FOUNDATION_LIBRARY}
${WEBKIT_LIBRARY}
${COCOS_APPLE_LIBS}
#edit
${ICONV_LIBRARY}
${Z_LIBRARY}
#"/usr/lib/libz.dylib"
#"/usr/lib/libiconv.dylib"
#edit
)
プロジェクトの作成
プロジェクトを作ってiOSとAndroidのセットアップをする。
任意の場所でcocos newコマンドを実行するとcocos2d-xのプロジェクトが作成される。
仮にプロジェクト名はCocosTest、パッケージ名はcom.mydomain.cocostestとする。
パッケージ名は、(自分が持っているドメイン名を逆にしたもの).(プロジェクト名)のようにするのが一般的らしい。
言語はC++とする。
cocos new CocosTest -l cpp -p com.mydomain.cocostest
iOS設定
プロジェクトのルートにあるCMakeLists.txtを編集する。
一番下に下記の二行を追記する。
set_xcode_property(${APP_NAME} SKIP_INSTALL "NO")
set_xcode_property(${APP_NAME} INSTALL_PATH "$(LOCAL_APPS_DIR)")
v3ではxcodeprojファイルが自動で作成されていたがv4では自分で作る必要がある。
プロジェクトフォルダの中にios-buildフォルダを作成し、その中でcmakeを実行する。
cd CocosTest/
mkdir ios-build
cd ios-build
cmake .. -GXcode -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos
テスト実行する時はios-build内のXcodeプロジェクトを開いて、左上でプロジェクト名のターゲットを選んで実行ボタンを押す。
Android設定
Android Studioがなければインストールする。
https://developer.android.com/studio?hl=ja
Android Studio Arctic Fox 2020.3.1 Patch4を使用。
SDK等のインストール
Android Studioを実行する。
Configure->SDK Managerを開く。
Android SDK->SDKPlatformから必要そうなSDKを選んでOKを押す。
SDKToolsからNDK、CMakeなどにチェックを入れてOKを押す。
バーチャルデバイスのインストール
SDK Managerは閉じて、Configure->AVD Managerを開く
Create Virtual Deviceを押す。
Pixel 3aか何かを選択してインストールする。
プロジェクトをAndroid Studioで開く
Android Studioを起動してimport projectを選択する。
プロジェクト内のproj.androidフォルダを選択しopenする。
はじめてプロジェクトを開くとgradleやら何やらを勝手にダウンロードするので完了するまで待つ。
完了すると
NDK not configured.
Download it with SDK manager.
と表示される。
File->Project Structure->SDK Locationを開く
Android NDK Locationのドロップダウンを開くと、パスが自動で入力されるが、OKを押すとNDK does not contain any platformsというエラーが出た。
よくわからないのでNDKはそのままにした。
Project SturctureのProjectタブからAndroid Gradle Plugin VersionとGradle Versionを選択。
新しいものを選んだ。
OKを押す。
gradle.propertiesを開いてPROP_APP_ABIの部分を編集する。
PROP_APP_ABI=armeabi-v7a:arm64-v8a
x86を含めると、Google Play Consoleへアップロードした時に「このリリースは Google Play の 64 ビット要件に準拠していません。」というエラーになるので注意。
app/build.gradleの最後にあるcompileをimplementationに書き換える。
//dependencies { compile 'com.google.android.gms:play-services-base:16.1.0' }
//dependencies { compile 'com.google.android.gms:play-services-ads:20.1.0' }
dependencies { implementation 'com.google.android.gms:play-services-base:18.0.1' }
dependencies { implementation 'com.google.android.gms:play-services-ads:20.5.0' }
三角の実行ボタンを押すとバーチャルデバイスでアプリが実行されるはず。
参考
https://youtu.be/GKT_40cc-a0
https://github.com/cocos2d/cocos2d-x/issues/20608