Superdry Memorandom :-p

旧「superdry memorandum :-D」です

Hudsonでの署名自動化

Androidアプリ開発においてCIツールHudsonで分散ビルドするようにするプロジェクトは多いと思うんですが、署名自動化についてメモ。(今はJenkinsですね。でも以下はHudsonですすめたいと思います)

Build Secret Pluginについて

アプリをAndroidマーケットから配信するためにはリリースモードでコンパイルして作成されるAPKファイルに秘密鍵の署名で署名する必要があります。これは keytoolで秘密鍵を生成し、jarsignerで署名する手間が発生します。けどHudsonには「Build Secret Plugin」という便利なプラグインがあって、これは秘密鍵と秘密情報をzipファイルで圧縮してHudsonサーバへアップロードすることで、APKファイル作成の都度の署名するとかのめんどくさい手順が省けます。

前提

ここでは以下の名称での例を示します。適宜読み替えてください。

手順

0. Hudsonのプラグインの設定から「Build Secret Plugin」をインストールします。
1. keytoolを使って、keystoreファイルを作成する。

$ keytool -genkey -keystore hudson.keystore \ -validity 10000 -alias hudson

2. パスワード情報などを入れた「keystore.properties」ファイルを作成する。(changeitの箇所はパスワードに置き換えてください)

key.store.password=changeit
key.alias=hudson
key.alias.password=changeit

3. 二つのファイル「hudson.keystore」と「keystore.properties」をzipで圧縮する。

$ zip secret.zip hudson.keystore keystore.properties

4. [Hudsonの設定]-[システムの設定]-[ビルド環境]の[Build Secret]にチェックをつけ、[Environment variable]に「KEY」と入力する。3.で作成したsecret.zipファイルをアップロードし、設定を保存する。

5. Hudsonプロジェクトの設定において、[ビルド]の[シェルの実行]で以下のように秘密鍵のロードするスクリプトを記述する。

cd $WORKSPACE
echo sdk.dir=/android-sdk-mac_86 > ./HelloAndroid/local.properties
cat $KEY/key.properties >> HelloAndroid/local.properties
echo key.store=$KEY/hudson.keystore >> HelloAndroid/local.properties

6.[ビルド手順の追加]で[Antの呼び出し]を選択し、Hudsonの初期設定でのANT_HOME名を[使用するAnt]に設定する。[高度な設定]ボタンをクリックし[ターゲット]に releaseを設定する。[ビルドファイル]の欄には、HelloAndroidのbuild.xmlのパスを指定する。

以上の設定を行い保存します。これで署名付きAPKファイルが HelloAndroid/bin配下に作成されます。

確認

APKファイルが正しく署名されているかを確認するには、以下のようにjarsignerコマンドで確認することができます。

$ jarsigner -verify -verbose  HelloAndroid-release.apk

実行結果は以下のようになります。

$ jarsigner -verify -verbose .HelloHudson-release.apk
        (中略)
jar が検証されました。

署名がうまくできていない場合は、警告が表示されます。その場合は警告メッセージを確認してください。

最後に宣伝

Software Design (ソフトウェア デザイン) 2011年 03月号 [雑誌]

Software Design (ソフトウェア デザイン) 2011年 03月号 [雑誌]

Software Design (ソフトウェア デザイン) 2011年 03月号 [雑誌]に記事を書きました。Hudsonでの署名自動化は紙面の都合上のせられなかったものです。他にもライブラリ化や難読化ツールProguard、ActivityテストやStrictModeなど、ちょっとしっておいたら便利という技術情報をまとめて書いてあります。よろしかったらぜひお手にとってみてください。