cocos2d-xのAndroid Studioプロジェクトをビルドする際に注意すること

リリースしてしばらく放置していたライツアウトゲームに致命的な不具合があり、それを修正するために開発環境を再構築しました。
今はAndroid SDK ManagerからGoogle Play ServiceのEclipseプロジェクトが入手できないとのことなので、仕方なくAndroid Studioを使うことに。
その際にいくつかはまったことがあったので備忘録として残しておきます。

スポンサーリンク

環境

不具合修正のために準備した開発環境は以下となります。

  • Android Studio 2.1
  • cocos2d-x v3.9

cocos2d-xはv3.11ではサウンドが正常に再生されないという不具合があり、v3.12ではゲーム中になぜか強制終了するというよくわからない状態だったので、自分の過去の環境で動作確認が取れているv3.9を使用しました。

はまった点

Android Studioでcocos2d-xのプロジェクトをビルドする際にはまったのは以下の点です。

  • Gradleのバージョンが古いって怒られる
  • アプリ名がlibcocos2dxになる
  • AndroidManifestに記載したバージョン情報が反映されない
  • 少し古いAndroidだとアプリが起動時にクラッシュする

これらの事象を解決するために、いくつか設定ファイルの類を書き換える必要があります。

解決策

Gradleのバージョンが古いって怒られる問題

Android Studioが新しくてcocos2d-xが古いからなのか、ビルドをしようとすると以下のエラーが発生しました。

Error:Gradle version 2.10 is required. Current version is 2.4. If using the gradle wrapper, try editing the distributionUrl in プロジェクトのパス\gradle\wrapper\gradle-wrapper.properties to gradle-2.10-all.zip

ざっくり翻訳すると「Gradleのバージョンは2.10が必須だけど、環境は今2.4を使ってるからgradle-wrapper.propertiesのdistributionUrlをgradle-2.10-all.zipに書き換えてね。」ということらしいです。
これは書いてある通りにgradle-wrapper.propertiesを修正したら解決しました。

アプリ名がlibcocos2dxになる問題

cocos newコマンドで作成されたAndroid Studioプロジェクトをビルドすると以下の状態のアプリが出来上がります

ランチャー上の表示名:アプリ名
アプリ情報の名前:libcocos2dx

これだとアプリ管理からアンインストールする際に対象のアプリが見つけにくくなるため、アプリ情報としての名前を書き換える必要があります。
書き換える箇所は以下となります。
1.libcocos2dx側AndroidManifest.xml
修正前

<application android:allowBackup="true" android:label="libcocos2dx">

修正後

<application android:allowBackup="true">

2.アプリ側AndroidManifest.xml
修正前

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher">

修正後

    <application
        android:allowBackup="true"
        android:label="@string/app_name"
        android:icon="@mipmap/ic_launcher">

AndroidManifestに記載したバージョン情報が反映されない問題

Android Studioプロジェクトをcocos compileする場合、AndroidManifest.xmlではなくbuild.gradleの値を使用します。
そのため、下記のbuild.gradleのdefaultConfigを必要に応じて書き換える必要があります。
プロジェクトのパス\app\build.gradle

書き換える項目はと内容は以下となります。

項目
minSdkVersion 最低動作保証APIレベル(例:15)
targetSdkVersion コンパイルAPIレベル(例:23)
versionCode 新規アプリならそのまま、更新なら現在の値+1
versionName ユーザに見せるバージョン情報

少し古いAndroidだとアプリが起動時にクラッシュする問題

実はこの問題が発端となり、アプリを修正することになりました。
問題の原因を見つけようとLogcatを見てみると以下のエラーが出力されてました。

java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol “srand” referenced by “libcocos2dcpp.so”…

このエラーが発生した場合はApplication.mkに以下の1行を追加すればいいらしいです。

APP_PLATFORM := android-15

このとき指定する値はminSdkVersionと同じになるようにしてください。

まとめ

Android Studioでcocos2d-x(cpp)の開発するは大変なので個人的にはUnityで開発したほうがいいと思いました。

はじめてでもよくわかる! Cocos2d-xゲーム開発集中講義 [v3.10対応]
超初心者でも大丈夫! はじめてのAndroidプログラミング Android Studio 2対応