FC2ブログ

Eclipse + ADT & Cocos2d-x で作ったプロジェクトを Android Studio に移行する


注意:
表題の必要が出てきたので、試してみるつもりですが、上手く行かないことは想定済み。
何をやってダメだったか、あとで検証するための工程メモみたいなものなので、斜め読みしてマネしないで下さい。


環境:
Cocos2d-x 3.11
旧Cocos2d-x 3.6
Android Studio 2.11
pd-for-android (PdCore) 1.0.1
MacOSX


1. cocos new で、新たにプロジェクトを作る
既存のプロジェクトを cocos new で生成したときは、proj.android-studio というフォルダが作られていなかったので、新たに cocos new する必要がありそげ。
上手くすれば、Classes と Resources の中身を入れ替えるだけでいいんじゃね? とか、虫の良いことを考える。


2. Android Studio へプロジェクトの読み込み
いつもの手順、「Open an existing Android Studio project」 で proj.android-studio を読み込む。

3. proj.android-studio/app/jni/Android.mk と Application.mk の書き換え
こちらもいつもの手順。

Android.mk

LOCAL_SRC_FILES := hellocpp/main.cpp \
                  ../../../Classes/AppDelegate.cpp \
                   ../../../Classes/HelloWorldScene.cpp



CPP_FILES := $(shell find $(LOCAL_PATH)/../../../Classes -name *.cpp)
LOCAL_SRC_FILES := hellocpp/main.cpp
LOCAL_SRC_FILES +=$(CPP_FILES:$(LOCAL_PATH)/%=%)


に書き換え。


LOCAL_STATIC_LIBRARIES += cocos_extension_static

$(call import-module, extensions)


をそれぞれの位置に追加。

Application.mk


APP_PLATFORM = android-14

APP_ABI:=armeabi armeabi-v7a x86


を追加。


4. Android Studio の Terminal から cocos compile -p android --android-studio の実行 & Android Studio で Build > Clean project して Run
Cocos2d-x のロゴと「Hello World」の表示を確認。


5. pd-for-android(pd-core-1.0.1.aar) の読み込みと、build.gradle へ compile 'org.puredata.android:pd-core:1.0.1' の追記。
詳しい手順はこちら。一応、Run して動作確認。


6. Classes と Resources を、旧プロジェクトから新プロジェクトへコピペして cocos compile -p android --android-studio する
Run する。当然エラー。


7. 旧プロジェクト/proj.android/src/org/cocos2dx/cpp/AppActivity.java の内容を、新プロジェクトの AppActivity.java にコピペして Run
当然、エラー。見たことがあるようなエラーだったので、File > Project Structure で、アプリの Dependencies に appcompat-v7 と、support-v4 を追加してみる。
ついでに、アプリの build.gradle の、compileSdkVersion と targetSdkVersion を 23 に変更。


8. 旧プロジェクト/proj.android/AndroidManifest.xml の内容から、必要な箇所をコピペして Run
当然、エラーが出るものの、エラー内容が変わる。
自作の JNI 関数が解決できないと言われているもよう。


9. おっと、忘れた。Pd パッチを拡張子なしで、proj.android-studio/app/res/raw にコピペしなきゃ。ってか、旧プロジェクトporj.android/res フォルダの中身を、proj.android-studio/app/res へコピペ。

で、Run 。debug/AndroidManifest.xml の android:icon="@mipmap/ic_launcher" の ic_launcher と同じ名前がないと言ってるもよう。
うむ、res/drawable-xxxx の中には icon.png ってファイルしかないからね。
そう言われれば、Eclipse のときに ic_launcher の 名前を変えるというような作業をやったような気がするようなしないような。
Android Studio ではどうやるのか良く分からないので、android:icon="@mipmap/ic_launcher" の ic_kauncer を icon に書き換えて Clean project してみるも、手動で書き換えらないようなので、同じエラーが出る。
しょうがないので、icon.png を ic_launcher.png にリネームして Clean project 。
けど、エラーが変わらず。

以前、テストで新規作成してたアプリの .proj.android-studio/app/res を確認すると、drawable-xxxx が、mipmap-xxxx になっていたので、フォルダ名を変更。


10. つまり、res/drawable-xxxx/ic_launcher を、res/mipmap-xxxx/ic_launcher.png に変更して、Clean project して Run。
Error:The number of method references in a .dex file cannot exceed 64K.
Learn how to resolve this issue at https://developer.android.com/tools/building/multidex.html

ネッツ検索で、こちら様のサイト を参考にして、アプリの AndroidManiest.xml と build.gradle に追加。

AndroidManifest.xml

    <application

        android:name="android.support.multidex.MultiDexApplication"
    >



アプリの build.gradle

    defaultConfig {

        // Enabling multidex support.
        multiDexEnabled true
    }


dependencies {

    compile 'com.android.support:multidex:1.0.0'
}



で、Run したら、一応、実行できました。
基本、コピペで行けそうなので、良かった。

ダイアログ関係で、ちょっと表示系が変わっているのは cocos のバージョンが違うからかしら?


Android Studio 2.1 で Cocos2d-x を使ってみる【cpp ファイルの編集】


Android Studio 2.1 で Cocos2d-x を使ってみる【悲しいお知らせ】 で書きましたが、プロジェクトのClassフォルダ内の cppと h を編集するには、 別途エディターで編集するか、こちら様 の 「Classes内のソースの修正、ビルド」で紹介されているように New window でプロジェクトを開いてやるしかないみたい。

なんとか、同一の Window 内で処理できないものかとネッツ検索したところ、こちら様 を発見。

バージョンの違いからか、ちょっと手順が違ったので、備忘録。

settings.gradle で Classes と Resources を include してパスを設定するのは同じ。

setteings.gradle


で、結果を確認したけど、どうもエクスプローラーに表示されないみたいので、

Gradle projects をリフレッシュしてみた。

Gradle Projects


で、確認してみたら、Classes と Resources が追加されたので、

赤丸のドロップダウン・メニューを、 Android から Project に変更。

AS projects


すると、フォルダを開けるようになるので、編集したいファイルをダブル・クリックすると、エディターにファイルが追加され、編集可能になります。

編集したあとは、Android Studio の Terminal から cocos compile -p android --android-studio でコンパイル。

それから、Run すれば良いはずなんですが、結構な頻度で、「No Changes to deploy」が出る。

そしたら、Build > Clean Project して、再び Run 。

なんの拍子か分からないけど、たまにプロジェクト・エクスプローラーから、Classes と Resources が消えちゃうことがあるので、そういうときは慌てずに Gradle projects をリフレッシュ。

Android Studio 2.1 で Cocos2d-x を使ってみる【悲しいお知らせ】


というわけで、今週はAndroid Studio と Cocos2d-x 、pd-for-android の開発環境を整備しようとしていたわけでが、とてもガッカリすることが判明。

Android Studio では、Cocos2d-x の cocos new で生成した proj.android-studio を読み込んでも、cpp と h ファイルの編集は勿論、ビルドも出来ないことが判明。
まぁ、ビルドに関しては、Android Studio に Terminal がついているので、cocos コマンドを入力すれば何とかなりそうな気もするんですが、cpp 、h ファイルは新規にプロジェクトを作って別ウィンドウで編集するとかしなければならないみたいです。

うーん、まぁ、確かに考えてみれば、そうなんですけど、これはちょっと使いづらいなぁ・・・。

テストで、cpp を書き変えてみたんだけど cocos compile してから Android Studio で Run しても、実行結果が変わらないんですよねぇ。
そして、Android Studio を日本語化しよう としたんだけど、こちらも起動時にクラッシュするし・・・。

どうにも、これではワークフローってヤツが・・・。
まだまだ、道のりは遠いのであった。


Android Studio 2.1 で Cocos2d-x 3.11 を使ってみる


ということで、こちら の続き。

cocos new して出来た proj.android-studio を、Android Studio に読み込んで、実行すれば良いのかと思ってたらそうでもなかった。

まず、仮想デバイス用のライブラリを作成するのに、cocos コマンドを使ってコンパイルする必要があるようです。

Android Studio の Terminal から

cocos compile -p android --android-studio



で、例のごとく、コンパイルエラーが出てつまずくわけです。

まず、Classes フォルダがないよ! と言われているので、Android.mk を修正。

proj.android-studio/app/jni/Android.mk

LOCAL_PATH が、proj.android-studio/app/jni になっているようなので、

$(call import-add-path,$(LOCAL_PATH)/../../cocos2d)
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/cocos)
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/cocos/audio/include)

LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes

となっていたのを

$(call import-add-path,$(LOCAL_PATH)/../../../cocos2d)
$(call import-add-path,$(LOCAL_PATH)/../../../cocos2d/external)
$(call import-add-path,$(LOCAL_PATH)/../../../cocos2d/cocos)
$(call import-add-path,$(LOCAL_PATH)/../../../cocos2d/cocos/audio/include)

LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../../Classes

と修正。
※ ../を一個追加して、一応、external も追加。
※※これって、Android Studio のターミナルを使っているからかも知れない。
別途、ターミナルを起動して、ディレクトリーを移動してからコンパイルをかければ問題なかったかも。

これで、Classes フォルダを見つけてくれたようですが、まだコンパイル・エラーが残ってる。

name space がどうしたこうしたと言ってるようです。
インターネッツを検索すると、どうも NDK のバージョンに問題ある模様。

つーか、Android Studio さんが、「これ、オススメ」というので、自動でインストールしたバージョンではコンパイルできないみたい。

SDK/ndk-bundle フォルダにダウンロードされたヤツ(r12かな?)。

で、昨日、書き換えた .bash_profile を、android-ndk-r8e に書き換えて、コンパイル。
一応、コンパイルはできたものの、「ある条件ではクラッシュするかもよ?」的な警告が出たので、またまた NDK_ROOT を書き換える。

今度は r11c 。
r12 の時と同じエラー。

最終的に r10d に書き換えて、source ~/.bash_profile ツッターン!!

コンパイルしたら、エラーが取れました!

で、ADV で実行しようとしたんだけど、Android Studio さんが、「強くオススメ」してくれる x86 の ABI を指定すると、ADV は起動するのものの、「Waiting for target device to come online」から抜けてくれない。

しょうがないので、ABI を armeabi-v7a に変更して、トライ。

やっと出た出た、Cocos2d-x ロゴ。

pd-for-android のライブラリーの組み込みの確認は明日にしよう。




Android Studio で Cocos2d-x と pd-for-android を使ってみる


というわけで、試してみました。

良いのか悪いのか分かりませんが、先日、Cocos2d-x のバージョンを上げておいた ので、わけも分からず、これまで通りに、

cocos new MyGame -p com.mydomain.mygame -l cpp -d /MyProjDir

とやってみたら、MyGame プロジェクトの中に「proj.android-studio」ってのがあったので、Android Studio にインポート。

左ペインの Gradle Script に build.gradle(Module: MyGame) があったので、pd-for-android の公式に書いてあった

dependencies {
compile 'org.puredata.android:pd-core:1.0.1'

// ... other dependencies
}



を追加。
「Sync Now」したら、一瞬、pd-for-android なんちゃらかんちゃら aar がどうしたこうしたというメッセージが見えたような気がする。
これでいいのかね? ま、検証するこっちゃな。

あ、cocos new する前に、NDK_ROOT を Android Studio で保存場所に指定したフォルダに指定し直しておいた。念のため。

export NDK_ROOT= ~/sdk/ndk-bundle



ビルドはいけてそうだけど、AVD が起動しないんだった。x86使えって言われたけど、どうやってダウンロードするんだっけ?