Cocos-2dx V.2 の64ビット化
Google Play では2021/8から、64ビット化されていないアプリは排除されることになっています。
“Google Play”のアプリは64bit対応が必須へ ~Googleが移行のロードマップを公開 - 窓の杜
今さらCocos-2dxをいじるとかいう徒労はしたくないのが本音ですが、やらないとストアから排除されてしまうので、仕方なく重い腰を上げました。
案の定、かなりの時間を食われて、もう64ビット化は諦めようと何度も思ったのですが、何とか移行に成功したのでその過程を記録に残します。
2021年の今どきにCocos-2dx v2の新規記事ですよ?これはとても貴重ですからね。
環境
macOs Catalina 10.15.6
Android Studio 3.4
Cocos-2dx V.2.2.6
●Eclipse→Android Studio
Cocos-2dxの64ビット化と直接関係はないのですが、そもそもがEclipseで開発していたので、まずはこれをAndroid Studioに移行しました。基本的にはAndroid Studioのインポート機能を使って、 出てくるエラーを潰していったらビルドに成功しました。
●Cocos-2dx 64ビット化
EclipseではNDKはr11cを使っていたのですがエラーが出て、どうもr10c にしないといけない模様。この辺、関連ページをEvernoteに保存していたはずなのですが、見当たらず。。
まあ、それでNDK r10cをダウンロードしてこようとしたら、なんと10c~10eだけは拡張子binファイルという、何やら古いMacのパッケージ形式らしく、なんと完全64ビット化されたCatalinaでは解凍ができない。
うちにある新旧Mac(Mini2014, 2018)はどちらもCatalinaにバージョンアップ済み。解凍できない!ってことで、Mini2014をタイムマシンを使って一晩かけてHigh Sierraに戻して解凍。
NDK r10c にしたら今度は以下のエラー。
↓
Parameter specified as non-null is null: method com.android.build.gradle.internal.cxx.configure.JsonGenerationVariantConfiguration., parameter ndkVersion
調べたら、r11以降のNDKのルートディレクトリにあるsource.propertiesファイルを同じくr10のルートにコピればいいらしい。中身は特に書き換えなくても大丈夫でした。
gradle - Android Studio 3.2.1 - NDK r10e sync fail? - Stack Overflow
自分の場合はAdMobのRewardのエラーも出ていたのだけれど、これはGoogle Mobile Adsのモジュールの問題はソースとバージョンがうまく合っていなかった模様。
File→File→Project Structure… のDependenciesからplay-services-adsのバージョンをいろいろ試して、12にしたところうまくいきました。
cocosの64ビットライブラリのコピーは基本的に以下のサイトを参考にその通りにしました。
個人的に引っかかったのは、gradle.propertiesでPROP_APP_ABI=armeabi-v7a:arm64-v8aとすれば問題ないはずなのに、なぜかMIPSやら余計なものまでリンクしようとする動作。
原因はGradleファイルでabiFiltersの2行がコメントアウトされていたから。なんで?
あと、非常に悩まされたのがopenssl/ssl.hファイルが無いと言われるエラー。
cocos2d-x-2.2.6/external/libwebsockets/android/include/libwebsockets.h:247:25: fatal error: openssl/ssl.h: No such file or directory
ちゃんとopensslフォルダもv3からexternalフォルダにコピってきたし、ssl.hファイルだってあるのに。
libwebsockets.hからの参照でエラーになってるから、websocketsのビルドに問題があると思っていろいろ調べて試したけど、結局のところそのさらに上の呼び元のextentions/networkフォルダのcppファイルとhファイルをすべてv3→v2でコピーしたらビルドが通りました(ここすごい時間かかったよー)。
少なくとも丸4,5日くらいは潰したと思いますが、なんとかCocos-2dx V2の64ビット化に成功しました。もう、願わくばこれ以上の修正を要求するようなことは勘弁してください、ストア様…