AndroidアプリをDockerでビルドしてみた〜その後〜

Posted by rhoboro on 2016-11-20

少し前に書いたこちらの記事の続きです。
AndroidアプリをDockerでビルドしようという旨の記事で、今回は前回のものに少し改良を加えた話を書きます。 というか、少し前の話だと思っていましたがもう4ヶ月になろうとしているのですね...

前回のおさらいと課題

前回の記事では、DockerfileとMakefileを組み合わせて、make apkコマンドでAndroidアプリをDockerを使ってビルドするところまで行いました。
みんなDockerを入れるだけでアプリのビルドができて素敵ですね!
ただ、前回時点では課題としてブランチやビルドフレーバーを固定にしていたので、今回はそこをコマンドで指定できるようにしてみました。

ちなみに、アップデートしようと思ったきっかけですが、仕事でこのやり方で(Dockerで)ビルドしていいという許可が下りたことと、同じタイミングでPyCon JP 2016のアプリを別の方が使うという話がでてきたためです。
(ちなみに仕事の方は後輩がやる気出していたので、結局私は手を出さずにこの情報だけ共有しておまかせ中)

変更点

変更後のファイルはこちらにあります。
これまでmake apkだけだったのが、
make apk BRANCH=develop VARIANTS=assembleDebugになりました。(わーい

変更点は下記の3点です!

  • 環境変数をDockerfileに記述
  • ビルド対象のブランチを指定可能に
  • ビルドする際のBuild Variantsを指定可能に

まず、1点目の環境変数について。 前回は下記のようなちょっとトリッキーな方法で渡していました(実際のストア版ビルド時もこうしました)が、 Dockerで環境変数を使う場合はDockerの機能を使えばいいのでDockerfile内のENVコマンドで渡すようにしました。

GOOGLE_MAP_APIKEY_DEBUG='<YOUR_GOOGLE_MAP_APIKEY>' FABRIC_APIKEY='<YOUR_FABRIC_APIKEY>' ./gradlew clean assembleDebug

2点目、3点目は先ほどのコマンドにあるように、それぞれBRANCH、VARIANTSパラメータとしてビルド時に渡せるようにしました! どちらもbuild用のスクリプトを改良して、引数でビルド対象ブランチとビルドタスクを受け取れるように変更し、その引数となるパラメータはMakefile内で定義しています。

これにより、任意のブランチ、任意のBuild Variantsを指定できるようになったので、一気に利用範囲が拡大できたかなと思います。

まとめ

最初からこうして入ればよかったですねw
一応前回のものと比べて、格段に使いやすくなったので、今回の変更で実際の業務でもある程度使えるものになったかなと思います。
また、特にこのアプリ固有の設定というものはないです。 したがって、Dockerfile内で定義している依存関係さえ対象アプリのものに書き換えれば、大抵のAndroidプロジェクトで使えます!
今後もこういった地味に嬉しい工夫はたくさんしていきますので、よろしくお願いします。