<< 2017年12月 >>
12
3456789
10111213141516
17181920212223
24252627282930
31
ブログ内検索
AND OR
本文 タイトル タグ
カテゴリ別アーカイブ

ご挨拶(4)

日記(22)

覚書(69)

プロダクト(18)

  Mash Blog Engine(9)

  MASH Time Zone Converter(6)

  Farman(2)

技術(107)

  Perl(17)

  C言語(0)

  C++(8)

  Java(4)

  HTML・CSS(6)

    HTML5・CSS3(5)

  Qt(6)

  Visual Studio(4)

  Windows(12)

  Mac(43)

    Parallels(27)

  Android(11)

  Eclipse(7)

  Linux(31)

    CentOS(14)

    Ubuntu(8)

    Lubuntu(9)

  JavaScript(9)

    jQuery(3)

    jQueryMobile(7)

  Git(6)

    Bitbucket(5)

    GitHub(1)

  サーバ(16)

    さくらのVPS(2)

    Ubuntu Server(13)

  cygwin(2)

  NUI(2)

  電子工作(3)

    Arduino(2)

  C#(2)

  .NET Framework(2)

  データベース(1)

  設計(1)

  Cocos2d-x(1)

健康(15)

  ダイエット(5)

  痛風(2)

ゲーム(11)

  Wii U(1)

英語(3)

  TOEIC(3)

漫画(1)

個人事業主(1)

CoderDojo(2)

月別アーカイブ
最近のエントリ
最近のコメント

Android Studio で Hello Cocos しようとしたらビルドできなかったお話

2016年08月21日日曜日 午後00時33分08秒 | カテゴリ: 覚書, C++, Android, Cocos2d-x

久々にQt始めたばかりですが、作ろうとしているもののハードルが思った以上に高く時間がかかりそうなのと、ちょっと今後の事を考えて、Qt は一時中断して Cocos2d-x を弄り始めたり。

Cocos2d-x は去年の暮れにフリーランスになるため案件探している最中にホントにちょこっと触っただけで、ほぼズブの素人。


ってことでまずは Hello World ならぬ Hello Cocos から始めようとしたところ、Android Studio でハマったので覚書。


環境は下記の通り。

  • Cocos2d-x … v3.10

  • Android Studio … v2.1.3

  • javac … 1.7.0_67

  • Android NDK … r12



まずは以下のコマンドでプロジェクトを作成。

$ cocos new HelloCocos -p jp.mashsoft.HelloCocos -l cpp -d ~/Works/cocos2d-x/

これで ~/Works/cocos2d-x の直下に HelloCocos というフォルダが作られ、その中にプロジェクトが生成されます。


まずは Finder から ~/Works/cocos2d-x/HelloCocos/proj.ios_mac/HelloCocos.xcodeproj をダブルクリックして Xcode を起動してビルド。

HelloCocos Xcode プロジェクトファイル

ソースファイル数が836もあるので、結構時間かかります。

HelloCocos Xcode ソースファイル数

とりあえず無事ビルドできたので、iOSシミュレータで実行。

HelloCocos iOSシミュレータ上で実行

まだ何もしていないのでフレームレートはそこそこ出てますが(それでも30fps切ってますが)、サンプルの3Dモデルグリグリ動かしたりするやつだと、かなりもっさり。

やっぱり iOS 実機欲しいですね。


続いて Android 用ビルド。

一応 Android Studio 対応しているようなので、Android Studio 起動して ~/Works/cocos2d-x/HelloCocos/proj.android-studio を読み込んだところ、ビルドは成功するものの、手元の Android 実機で動かそうとしたら以下のようなエラーが出て起動できず。

08-21 09:26:18.675 18105-18105/jp.mashsoft.HelloCocos E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.UnsatisfiedLinkError: Couldn't load cocos2dcpp from loader dalvik.system.PathClassLoader[dexPath=/data/app/jp.mashsoft.HelloCocos-2.apk,libraryPath=/data/app-lib/jp.mashsoft.HelloCocos-2]: findLibrary returned null
at java.lang.Runtime.loadLibrary(Runtime.java:365)
at java.lang.System.loadLibrary(System.java:535)
at org.cocos2dx.lib.Cocos2dxActivity.onLoadNativeLibraries(Cocos2dxActivity.java:248)
at org.cocos2dx.lib.Cocos2dxActivity.onCreate(Cocos2dxActivity.java:263)
at android.app.Activity.performCreate(Activity.java:5111)

UnsatisfiedLinkError ってことで、どうやらJava側のコードで libcocos2dcpp.so をLoadしようとしたものの、ファイルが見つからずに失敗している様子。

ググって見つけた こちらのエントリ によると、どうもIDEを使ってのビルドはまだできないそうな。


なのでコンソールでカレントディレクトリを ~/Works/cocos2d-x/HelloCocos に移動した上で、下記コマンドでビルド。

Masashi-MBP:HelloCocos mharaki$ cocos run -s ./ -p android --android-studio
Building mode: debug
Using Android Studio project : /Users/mharaki/Works/cocos2d-x/HelloCocos/proj.android-studio
Android platform not specified, searching a default one...
running: '/Applications/android-sdks/tools/android update project -t android-10 -p /Users/mharaki/Works/cocos2d-x/HelloCocos/proj.android-studio/app'
Updated project.properties
Updated local.properties
Updated file /Users/mharaki/Works/cocos2d-x/HelloCocos/proj.android-studio/app/proguard-project.txt
Building native...
NDK build mode: debug
Parse NDK version from file /Applications/android-sdks/ndk-bundle/RELEASE.TXT failed.
NDK_TOOLCHAIN_VERSION: 4.8
running: '/Applications/android-sdks/ndk-bundle/ndk-build -C /Users/mharaki/Works/cocos2d-x/HelloCocos/proj.android-studio/app -j8 NDK_MODULE_PATH=/Users/mharaki/Works/cocos2d-x/HelloCocos/proj.android-studio/../cocos2d:/Users/mharaki/Works/cocos2d-x/HelloCocos/proj.android-studio/../cocos2d/cocos:/Users/mharaki/Works/cocos2d-x/HelloCocos/proj.android-studio/../cocos2d/external NDK_TOOLCHAIN_VERSION=4.8 NDK_DEBUG=1'
Android NDK: ERROR:/Users/mharaki/Works/cocos2d-x/HelloCocos/proj.android-studio/../cocos2d/external/freetype2/prebuilt/android/Android.mk:cocos_freetype2_static: LOCAL_SRC_FILES points to a missing file
Android NDK: Check that /Users/mharaki/Works/cocos2d-x/HelloCocos/proj.android-studio/../cocos2d/external/freetype2/prebuilt/android/arm64-v8a/libfreetype.a exists or that its path is correct
/Applications/android-sdks/ndk-bundle/build/core/prebuilt-library.mk:45: *** Android NDK: Aborting . Stop.
Error running command, return code: 2.

何かごちゃごちゃ出てますが、ようは arm64-v8a/libfreetype.a が存在しないためにビルドエラーになっている様子。

そもそも arm64-v8a はターゲットにする必要もない気がするので、 ~/Works/cocos2d-x/HelloCocos/proj.android-studio/app/jni/Application.mk に下記赤字の部分を追記。(x86 はいらないかも)

APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -DCC_ENABLE_CHIPMUNK_INTEGRATION=1 -std=c++11 -fsigned-char
APP_LDFLAGS := -latomic
APP_ABI := armeabi armeabi-v7a x86
ifeq ($(NDK_DEBUG),1)
APP_CPPFLAGS += -DCOCOS2D_DEBUG=1
APP_OPTIM := debug
else
APP_CPPFLAGS += -DNDEBUG
APP_OPTIM := release
endif


これで再度ビルドしてみたところ、

Masashi-MBP:HelloCocos mharaki$ cocos run -s ./ -p android --android-studio
Building mode: debug
Using Android Studio project : /Users/mharaki/Works/cocos2d-x/HelloCocos/proj.android-studio
Android platform not specified, searching a default one...
running: '/Applications/android-sdks/tools/android update project -t android-10 -p /Users/mharaki/Works/cocos2d-x/HelloCocos/proj.android-studio/app'
Updated project.properties
Updated local.properties
Updated file /Users/mharaki/Works/cocos2d-x/HelloCocos/proj.android-studio/app/proguard-project.txt
Building native...
NDK build mode: debug
Parse NDK version from file /Applications/android-sdks/ndk-bundle/RELEASE.TXT failed.
NDK_TOOLCHAIN_VERSION: 4.8
running: '/Applications/android-sdks/ndk-bundle/ndk-build -C /Users/mharaki/Works/cocos2d-x/HelloCocos/proj.android-studio/app -j8 NDK_MODULE_PATH=/Users/mharaki/Works/cocos2d-x/HelloCocos/proj.android-studio/../cocos2d:/Users/mharaki/Works/cocos2d-x/HelloCocos/proj.android-studio/../cocos2d/cocos:/Users/mharaki/Works/cocos2d-x/HelloCocos/proj.android-studio/../cocos2d/external NDK_TOOLCHAIN_VERSION=4.8 NDK_DEBUG=1'
[armeabi] Compile++ : cocos2dcpp_shared <= main.cpp
make: /Applications/android-sdks/ndk-bundle/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-g++: No such file or directory
[armeabi] Compile++ : cocos2dcpp_shared <= AppDelegate.cpp
make: /Applications/android-sdks/ndk-bundle/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-g++: No such file or directory
[armeabi] Compile++ : cocos2dcpp_shared <= HelloWorldScene.cpp
make: *** [obj/local/armeabi/objs-debug/cocos2dcpp_shared/hellocpp/main.o] Error 1
make: *** Waiting for unfinished jobs....
make: /Applications/android-sdks/ndk-bundle/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-g++: No such file or directory
make: *** [obj/local/armeabi/objs-debug/cocos2dcpp_shared/__/__/__/Classes/AppDelegate.o] Error 1
[armeabi] StaticLibrary : libcocos2d.a
make: *** [obj/local/armeabi/objs-debug/cocos2dcpp_shared/__/__/__/Classes/HelloWorldScene.o] Error 1
make: /Applications/android-sdks/ndk-bundle/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gcc-ar: No such file or directory
make: *** [obj/local/armeabi/libcocos2d.a] Error 1
Error running command, return code: 2.

今度は肝心のコンパイラ(g++)が見つからなくて怒られる…orz

どうもNDKのToolChainのバージョンが食い違っている模様。

NDKのバージョン下げることも考えたのですが面倒なので、 Cocos2d-x のインストールディレクトリ以下の、 tools/cocos2d-console/plugins/plugin_compile/build_android.py というファイルを開き、201行目あたりを以下のように修正。

def get_toolchain_version(self, ndk_root, compile_obj):
ret_version = "4.8"
ret_version = "4.9"


これで見事実機で動作させることができるようになりました。

HelloCocos Android実機で実行


う〜ん、まだ Android Studio の IDE では NDK アプリの開発はできそうにないですね。

昔ながらの adb logcat でプリントデバッグしかないのかなぁ。


やっぱり iOS の実機欲しいなぁ。

ソーシャルゲーム開発している以上、iOS デバイス1台くらいは持っておいた方がよさそうですね。


2016/8/21 20:15 追記

Cocos2d-x の英語サイト の方を見たら、日本語サイトには載っていない v3.12 が!

こっちで改めて試してみたところ、Android Studio の IDE では UnsatisfiedLinkError で状況変わらず。

Application.mk に APP_ABI := armeabi-v7a を追記したところ、 build_android.py は修正せずにビルド成功し、実機で実行することができました。

なお APP_ABI := armeabi とした場合は relocation overflow in R_ARM_THM_CALL というエラーが出てビルドに失敗しました。

ちょっとエラーの内容については調べ切れていませんが、とりあえず実機で動くし、build_android.py を修正しなくても大丈夫という点では、v3.12 の方がよいかもしれません。

コメント投稿

投稿されたコメントは承認後に表示されます

誹謗中傷、公序良俗に反するコメントの投稿はご遠慮ください

コメントは投稿者の許可無く削除される場合があります

名前(必須)

メールアドレス(非公開)

URL

タイトル

本文(必須)タグ一覧

Cookieに名前とメールアドレスを保存

コメント

コメントはありません