テクノモンキーのアプリ開発日記

テクノモンキーの開発ブログです。iOS、Android、Unity、Cocos2d-xなどアプリ開発関連のTipsやアプリ開発に役立つ情報を発信します。

【cocos2d-x】Android版の64bit化に関するメモ

2019年8月1日からGoogle Playで公開するアプリが64bit化必須になったことで、アプリ開発の仕事でAndroidアプリの64bit化を行う機会が増えました。

先日、cocos2d-xで作られたアプリのAndroid版を64bit化する事があったので、今後のためにメモとして残しておきたいと思います。

 

cocos2d-xのバージョンは3.16です。

 

【cocos2d-x】Android版の64bit化対応方法

discuss.cocos2d-x.org

上記の記事が大変参考になりました。

 

変更する箇所は2箇所です。

 

1.下記の場所にあるgradle.propertiesの「PROP_APP_ABI」を修正

 

ProjectFile⁩>⁨proj.android-studio⁩ >gradle.properties

PROP_APP_ABI=armeabi-v7a:arm64-v8a

 

2.下記の場所にある⁨Application.mkの「APP_ABI」を修正

 

ProjectFile> ⁨proj.android-studio⁩> ⁨app⁩> ⁨jni⁩> ⁨Application.mk

APP_ABI := armeabi-v7a arm64-v8a

 

上記で紹介した記事ではこちらの2箇所を修正すればOKでした。

試しにやってみたところ、以下のようなエラーが出てビルドエラーになりました。

 

[arm64-v8a] Compile++      : cocos_extension_static <= CCPUDoStopSystemEventHandlerTranslator.cpp

  [arm64-v8a] Compile++      : cocos_extension_static <= CCPUEventHandler.cpp

  [arm64-v8a] Compile++      : cocos_extension_static <= CCPUEventHandlerManager.cpp

  [arm64-v8a] Compile++      : cocos_extension_static <= CCPUEventHandlerTranslator.cpp

  [arm64-v8a] Compile++      : cocos_extension_static <= CCPUObserver.cpp

  [arm64-v8a] Compile++      : cocos_extension_static <= CCPUObserverManager.cpp

  [arm64-v8a] Compile++      : cocos_extension_static <= CCPUObserverTranslator.cpp

  [arm64-v8a] Compile++      : cocos_extension_static <= CCPUOnClearObserver.cpp

  [arm64-v8a] Compile++      : cocos_extension_static <= CCPUOnClearObserverTranslator.cpp

  [arm64-v8a] Compile++      : cocos_extension_static <= CCPUOnCollisionObserver.cpp

  [arm64-v8a] Compile++      : cocos_extension_static <= CCPUOnCollisionObserverTranslator.cpp

  [arm64-v8a] Compile++      : cocos_extension_static <= CCPUOnCountObserver.cpp

  [arm64-v8a] Compile++      : cocos_extension_static <= CCPUOnCountObserverTranslator.cpp

  [arm64-v8a] Compile++      : cocos_extension_static <= CCPUOnEmissionObserver.cpp

  [arm64-v8a] Compile++      : cocos_extension_static <= CCPUOnEmissionObserverTranslator.cpp

  [arm64-v8a] Compile++      : cocos_extension_static <= CCPUOnEventFlagObserver.cpp

  [arm64-v8a] Compile++      : cocos_extension_static <= CCPUOnEventFlagObserverTranslator.cpp

  [arm64-v8a] Compile++      : cocos_extension_static <= CCPUOnExpireObserver.cpp

  [arm64-v8a] Compile++      : cocos_extension_static <= CCPUOnExpireObserverTranslator.cpp

  [arm64-v8a] Compile++      : cocos_extension_static <= CCPUOnPositionObserver.cpp

  [arm64-v8a] Compile++      : cocos_extension_static <= CCPUOnPositionObserverTranslator.cpp

  [arm64-v8a] Compile++      : cocos_extension_static <= CCPUOnQuotaObserver.cpp

  [arm64-v8a] Compile++      : cocos_extension_static <= CCPUOnQuotaObserverTranslator.cpp

  [arm64-v8a] Compile++      : cocos_extension_static <= CCPUOnRandomObserver.cpp

  [arm64-v8a] Compile++      : cocos_extension_static <= CCPUOnRandomObserverTranslator.cpp

  [arm64-v8a] Compile++      : cocos_extension_static <= CCPUOnTimeObserver.cpp

  [arm64-v8a] Compile++      : cocos_extension_static <= CCPUOnTimeObserverTranslator.cpp

  [arm64-v8a] Compile++      : cocos_extension_static <= CCPUOnVelocityObserver.cpp

  [arm64-v8a] Compile++      : cocos_extension_static <= CCPUOnVelocityObserverTranslator.cpp

  [arm64-v8a] Compile++      : cocos_extension_static <= CCPUBehaviour.cpp

  [arm64-v8a] Compile++      : cocos_extension_static <= CCPUBehaviourManager.cpp

  [arm64-v8a] Compile++      : cocos_extension_static <= CCPUBehaviourTranslator.cpp

  [arm64-v8a] Compile++      : cocos_extension_static <= CCPUSlaveBehaviour.cpp

  [arm64-v8a] Compile++      : cocos_extension_static <= CCPUSlaveBehaviourTranslator.cpp

  [arm64-v8a] Compile++      : audioengine_static <= AudioEngine-inl.cpp

  [arm64-v8a] Compile++      : audioengine_static <= AudioEngine.cpp

  [arm64-v8a] Compile        : audioengine_static <= format.c

  [arm64-v8a] Compile++      : audioengine_static <= minifloat.cpp

  [arm64-v8a] Compile        : audioengine_static <= primitives.c

  [arm64-v8a] Compile++      : audioengine_static <= Utils.cpp

  [arm64-v8a] Compile++      : audioengine_static <= mp3reader.cpp

  /app_Android/cocos2d/cocos/audio/android/mp3reader.cpp: In function 'bool resync(mp3_callbacks*, void*, uint32_t, off64_t*, uint32_t*)':

  /app_Android/cocos2d/cocos/audio/android/mp3reader.cpp:229:43: error: 'memcmp' was not declared in this scope

               if (memcmp("ID3", id3header, 3)) {

                                             ^

  /app_Android/cocos2d/cocos/audio/android/mp3reader.cpp:274:48: error: 'memcpy' was not declared in this scope

                   memcpy(buf, tmp, remainingBytes);

                                                  ^

  make: *** [/app_Android/proj.android-studio/app/build/intermediates/ndkBuild/release/obj/local/arm64-v8a/objs/audioengine_static/mp3reader.o] Error 1

  make: *** Waiting for unfinished jobs....

 

上記のエラー内容や、エラー発生場所から、cocos2d-xライブラリのビルド中のエラーっぽいです。

 

【cocos2d-x】Android版の64bit化に関するメモ

色々調べたところ、上記のようなエラーが出る場合は、

#include <cstring>

を読み込ませればOKらしいです。

何回か上記に似たエラーが出ましたが、cstringを読み込ませれば解消されるエラーでした。

 

一通りのビルドが通り、無事apkが作成できたので、

先日知った64bit対応済みアプリか確認する方法で、64bit対応できている事が確認できました。

 

関連:

develop.hateblo.jp

 

cocos2d-xのビルドってかなり時間がかかるので、ビルドエラーが出ないかヒヤヒヤします....

なにはともあれとりあえず64bit化対応ができてよかったです。

 

もしこの記事がこれからcocos2d-xアプリの64bit化対応を行う人の参考になれば嬉しいです。

 

関連:

【Unity】Android版の64bit対応でやるべきこと - テクノモンキーのアプリ開発日記

【Unity】Androidの64bit対応版アプリをアップロードしても32bitアプリとして認識される場合の対処法 - テクノモンキーのアプリ開発日記