JenkinsでCocos2d-xのAndroidアプリをビルドしてみる



## 概要

Jenkinsを使って、AndroidアプリのビルドからHockeyAppへのアップロードを自動化する。
ジョブはスレーブのMacに実行させる。
Gitのリポジトリを監視し、変更があればビルドして、HockeyAppへアップロードする。
今回は Cocos2d-x の Android アプリをビルドする。

### 環境

* master
	* CentOS 6.6 (Final)
	* Jenkins 1.580.1
* slave
	* OS X Yosemite 10.10.1
	* Androidアプリをビルドできる環境

### 前提

* [JenkinsでCocos2d-xのiOSアプリをビルドしてみる](http://qiita.com/kiarina/items/e4210f6f5f30f298e662)


## ジョブを作成する

ビルド手順以外は、iOSアプリのビルドと同じなので [ビルド手順の追加] から。

### ビルド手順を追加する

#### 環境のクリア

```bash
git fetch -p --all
git clean -f -d

rm -rf "${WORKSPACE}/bin/"
rm -rf "${WORKSPACE}/cocos2d/cocos/platform/android/java/bin/"
rm -rf "${WORKSPACE}/cocos2d/cocos/platform/android/java/gen/"
rm -rf "${WORKSPACE}/cocos2d/cocos/platform/android/java/libs/"
rm -rf "${WORKSPACE}/cocos2d/cocos/platform/android/java/local.properties"
rm -rf "${WORKSPACE}/cocos2d/cocos/platform/android/java/res/"
rm -rf "${WORKSPACE}/proj.android/assets/"
rm -rf "${WORKSPACE}/proj.android/bin/"
rm -rf "${WORKSPACE}/proj.android/gen/"
rm -rf "${WORKSPACE}/proj.android/libs/armeabi-v7a/"
rm -rf "${WORKSPACE}/proj.android/local.properties"
rm -rf "${WORKSPACE}/proj.android/obj/"
```

#### ビルドナンバーの変更

```bash
sed \
    -i \
    -e "s/android:versionCode=\"1\"/android:versionCode=\"$BUILD_NUMBER\"/g" \
    "${WORKSPACE}/proj.android/AndroidManifest.xml"
```

#### ビルド

```bash
# Add environment variable COCOS_CONSOLE_ROOT for cocos2d-x
export COCOS_CONSOLE_ROOT=/Applications/Cocos2d-x/v3.3-rc0/tools/cocos2d-console/bin
export PATH=$COCOS_CONSOLE_ROOT:$PATH

# Add environment variable NDK_ROOT for cocos2d-x
export NDK_ROOT=/Applications/Android-NDK
export PATH=$NDK_ROOT:$PATH

# Add environment variable ANDROID_SDK_ROOT for cocos2d-x
export ANDROID_SDK_ROOT=/Applications/Android-SDK
export PATH=$ANDROID_SDK_ROOT:$PATH
export PATH=$ANDROID_SDK_ROOT/tools:$ANDROID_SDK_ROOT/platform-tools:$PATH

# Add environment variable ANT_ROOT for cocos2d-x
export ANT_ROOT=/usr/local/bin
export PATH=$ANT_ROOT:$PATH

cocos compile -p android -m release
```

#### シンボルファイルの作成

```bash
./Scripts/pack_symbols_android.sh release
```

#### HockeyAppにアップロード

```bash
curl \
	-F "status=2" \
	-F "notify=0" \
	-F "notes=Some new features and fixed bugs." \
	-F "notes_type=0" \
	-F "ipa=@bin/release/android/置き換える.apk" \
	-F "dsym=@bin/release/android/symbols.zip" \
	-H "X-HockeyAppToken: 置き換える" \
	https://rink.hockeyapp.net/api/2/apps/置き換える/app_versions/upload
```


## 参考

* [Jenkinsを使ってみよう（Mac OS X＆Linux）](http://www.buildinsider.net/enterprise/jenkins/01)
* [Jenkinsでcocos2d-xのアプリをビルド](http://wonderpla.net/blog/engineer/Jenkins_Cocos2d-x/)
* [Jenkinsでcocos2d-xのiOSアプリをビルド](http://wonderpla.net/blog/engineer/cocos2d-x_jenkins_ios/)
* [xcodebuildについて](http://blog.asial.co.jp/953)
* [xcodebuild - PROVISIONING_PROFILE](http://qiita.com/zaki@github/items/848af16ef650df2f00a2)
* [iOSのリリースまでの流れ](http://qiita.com/takeh1k0/items/017164ae40bad930d505)
* [iOSのプロジェクトをJenkinsでビルドする](http://d.hatena.ne.jp/soutaro/20111203/1322916503)
* [JenkinsをMacで自動起動](http://qiita.com/makoto_kw/items/cbe93d4ebbc35f3b43fd)
* [Eclipseでbuild.xmlを自動生成](http://www.hitachi.co.jp/Prod/comp/soft1/cosminexus/useful/tips/091204_eclipse-create-buildxml.html)