gradleでCocos2d-x3.0alpha1のアプリをbuildしてAndroidのapkを作成する
はじめに
gradleいいよ!最近ハマってます。 Javaライクなshellスクリプトな感じなのかな?と思ったら、pluginが充実していてAndroidのbuildType分けでversion変えたりソースフォルダの向き先を変えたりできて、とても重宝してます。
AndroidStudioもまだ0.4.0でツンデレだけど今後が楽しみです。
今回は、Cocos2d-xの3.0alpha1で作ったプロジェクトをgradleでbuildして実機にinstallしちゃいます。 ちょっとやることが多いので、gradle慣れてない人は辛いかも;;
前提
- MacOS
- gradleがインストール済み(v1.9)
- pythonがインストール済み
- android ndkとsdkのpathが通っている
- Cocos2d-x3.0alpha1(alpha0とかだとpathが異なるので注意)
やること一覧
- build.gradleの作成
- proj.android/build.gradleの作成
- cocos/2d/platform/android/javaをサブプロジェクトとして組み込む(以降、libcocosと呼ぶ)
- modules/libcocos/build.gradleの作成
- settings.gradleの作成
build.gradleの作成
プロジェクト直下にbuild.gradleを作成します。
$ tree -L 1 . ├── Classes ├── Resources ├── build.gradle ★作成 ├── modules ├── proj.android ├── proj.ios_mac ├── proj.linux └── proj.win32
中身は一旦空でもいいんだけどあとで書くのもあれなので、先にlibcocosの設定を書いておく。
build.gradle
project(':modules:libcocos') { buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.7.+' } } }
proj.android/build.gradleの作成
copyNativeLibsらへんがミソ。 これでcocos2d-xのlib.soをアプリのパッケージング時に含むことができるようになる。
proj.android/build.gradle
buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.7.+' } } apply plugin: 'android' dependencies { compile project(':modules:libcocos') } android { compileSdkVersion 19 buildToolsVersion '19.0.0' sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] aidl.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] } } } // https://gist.github.com/khernyo/4226923 task copyNativeLibs(type: Copy) { // libs/armeabi下にある*.soをすべてbuild/libs/armeabi下にコピーする from(new File('libs/armeabi')) { include '**/*.so' } into new File(buildDir, 'libs/armeabi') } // compileTask呼び出し時にcopyNativeLibsを呼び出すように指定 tasks.withType(Compile) { compileTask -> compileTask.dependsOn copyNativeLibs } tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask -> pkgTask.jniFolders = new HashSet<File>() pkgTask.jniFolders.add(new File(buildDir, 'libs')) } // cleanの前にcleanCopyNativeLibsを依存するように指定 clean.dependsOn 'cleanCopyNativeLibs'
libcocosをサブモジュールに組み込む
プロジェクトの直下で以下のシンボリックリンクを生成する。
$ ln -s ../../../cocos/2d/platform/android/java modules/libcocos
libcocos/build.gradleの作成
module/libcocos/build.gradle
apply plugin: 'android-library' android { compileSdkVersion 19 buildToolsVersion "19.0.0" defaultConfig { minSdkVersion 8 targetSdkVersion 8 } sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] aidl.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] } } }
settings.gradleの作成
$ tree -L 1 . ├── Classes ├── Resources ├── build.gradle ├── modules ├── proj.android ├── proj.ios_mac ├── proj.linux ├── proj.win32 └── settings.gradle ★作成
settings.gradle
include ':proj.android', ':modules:libcocos'
これで準備は完了。
ビルド手順
プロジェクト直下で以下のコマンドを実行でビルドとインストールが行える。
$ gradle clean $ ./proj.android/build_native.sh clean $ ./proj.android/build_native.sh $ gradle installDebug
環境できてから記憶をたどってブログに書き起こしたので、もしかしたら抜けがあるかも。。。
eclipseに依存する開発スタイルからオサラバできるのは素敵ですね。
(別にeclipseをdisってるわけではないです!ecipseはとても素敵なIDEですよ( ^ω^))
2014/02/19 追記
kimukou_26さんに色々補足して頂いてとても参考になりました! http://d.hatena.ne.jp/kimukou_26/20140205/