cocos2d-x v4でのプロジェクト作成方法(mac)

#環境
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}
を追記する。

```CocosConfigDepend.cmake
# 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を編集する。
一番下に下記の二行を追記する。

```CMakesLists.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プロジェクトを開いて、左上でプロジェクト名のターゲットを選んで実行ボタンを押す。

![スクリーンショット 2020-08-21 22.23.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37640/1aaa45df-55ab-0683-4b17-2a6d00377546.png)


###Android設定

Android Studioがなければインストールする。
https://developer.android.com/studio?hl=ja
Android Studio Arctic Fox 2020.3.1 Patch4を使用。

####SDK等のインストール

Android Studioを実行する。
Configure->SDK Managerを開く。
![スクリーンショット 2020-08-19 11.11.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37640/51c6b876-ffd8-e22f-140d-d6ac01ac0612.png)

Android SDK->SDKPlatformから必要そうなSDKを選んでOKを押す。

![スクリーンショット 2020-08-19 11.15.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37640/ffc1594c-f7ff-1d41-3512-91c7d1f69159.png)

SDKToolsからNDK、CMakeなどにチェックを入れてOKを押す。

![スクリーンショット 2020-08-19 11.18.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37640/12f4e6e5-2b65-02de-9b0e-950256e68659.png)

####バーチャルデバイスのインストール

SDK Managerは閉じて、Configure->AVD Managerを開く
Create Virtual Deviceを押す。
Pixel 3aか何かを選択してインストールする。

###プロジェクトをAndroid Studioで開く

Android Studioを起動してimport projectを選択する。

![スクリーンショット 2020-08-19 11.24.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37640/be8487cf-e586-4150-113a-09add89a5347.png)

プロジェクト内のproj.androidフォルダを選択しopenする。

はじめてプロジェクトを開くとgradleやら何やらを勝手にダウンロードするので完了するまで待つ。
完了すると

```
NDK not configured. 
Download it with SDK manager.
```

と表示される。

File->Project Structure->SDK Locationを開く

![スクリーンショット 2020-08-19 11.38.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37640/c9429c10-bf1a-50d1-ad81-4a306268c568.png)

Android NDK Locationのドロップダウンを開くと、パスが自動で入力されるが、OKを押すとNDK does not contain any platformsというエラーが出た。
よくわからないのでNDKはそのままにした。

Project SturctureのProjectタブからAndroid Gradle Plugin VersionとGradle Versionを選択。
新しいものを選んだ。
![スクリーンショット 2022-01-03 17.48.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37640/1b188fcf-9e69-8c77-5c11-657b94863539.png)
OKを押す。

gradle.propertiesを開いてPROP_APP_ABIの部分を編集する。

```
PROP_APP_ABI=armeabi-v7a:arm64-v8a
```
x86を含めると、Google Play Consoleへアップロードした時に「このリリースは Google Play の 64 ビット要件に準拠していません。」というエラーになるので注意。

![スクリーンショット 2020-10-02 21.46.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37640/2cc75438-67f5-9c86-39f0-8c26a978d566.png)

app/build.gradleの最後にあるcompileをimplementationに書き換える。

```build.gradle
//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' }
```

三角の実行ボタンを押すとバーチャルデバイスでアプリが実行されるはず。

![スクリーンショット 2020-08-19 11.43.32aaa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37640/e18dcf11-11c5-4319-df6d-87a4284caef8.png)

#参考

https://youtu.be/GKT_40cc-a0
https://github.com/cocos2d/cocos2d-x/issues/20608