クラウド上でアプリをビルドしたい!CodeBuildでAndroidアプリをビルドするときのTips

クラウド上でアプリをビルドしたい!CodeBuildでAndroidアプリをビルドするときのTips
目次

CodeBuild の小ネタです。AWS CodeBuildはyamlの定義に従ってビルド処理をマネージドサービスです。 今回はAndroidアプリをCodeBuildでビルドする時のTipsを紹介します。

ビルド対象のAndroid SDKを指定する

まず、Androidアプリをビルドする必要なのはAndroid SDKですね。 CodeBuildでのビルド時にもインストールされている必要がありますので、設定方法を説明します。

AWS提供のイメージを使う

一番簡単なのが、AWSが提供しているコンテナイメージをそのまま使う方法です。 サポートされているイメージをAWS CLIで確認してみましょう。

1aws codebuild list-curated-environment-images

json形式でデータが返ってきます。中を見ると、コンテナのイメージ名が含まれていることがわかります。 (以下のサンプルでいうと、 aws/codebuild/eb-java-7-amazonlinux-64:2.1.3 がそれにあたります。) このイメージ名はCodeBuildの設定を行う際に使います。

 1{
 2    "platforms": [
 3        {
 4            "platform": "AMAZON_LINUX",
 5            "languages": [
 6                {
 7                    "language": "JAVA",
 8                    "images": [
 9                        {
10                            "name": "aws/codebuild/eb-java-7-amazonlinux-64:2.1.3",
11                            "description": "AWS ElasticBeanstalk - Java 7 Running on Amazon Linux 64bit v2.1.3",
12                            "versions": [
13                                "aws/codebuild/eb-java-7-amazonlinux-64:2.1.3-1.0.0"
14                            ]
15                        },
16(以下略)

以前は aws/codebuild/android-java-8:26.1.1 のようにAndroidイメージが提供されていたのですが、少し仕様が変わったようですね。

CodeBuild のビルド仕様に関するリファレンス を確認すると、「 ubuntu/standard/2.0 を使って、 buildspec.yml 内の runtime-versions で指定しなさい」と記載されているので、そのようにします。

1phases:
2  install:
3    runtime-versions:
4      java: openjdk8
5      android: 28

ただし、ubuntu/standard/2.0 が2019/05現在でサポートしているのはAndroid 28.x なので、古いバージョンは指定できないことに注意が必要です。

複数のAndroid SDK、または古いSDKが必要な場合

CodeBuildがデフォルトで提供しているAndroid SDK 以外のバージョンを使いたい場合には、buildspec.yml 内で個別にインストールする必要があります。 以下では install フェーズに sdkmanager コマンドを使って任意のバージョンをインストールしています。 指定方法は sdkmanager --list で出力されたものに限ります。

1  install:
2    commands:
3      - sdkmanager --list
4      - sdkmanager "build-tools;26.0.0"

CodeBuildの標準出力を日本語化する

CodeBuildのジョブを設定した実際に動かしてみると、文字化けしていることがあります。 これはUbuntuのイメージの中に日本語化パックが入っていないことが原因なので、個別にインストールしましょう。

以下がサンプルコードです。 language-pack-ja-baselanguage-pack-ja をインストール後、有効化しています。

 1phases:
 2  install:
 3    commands:
 4      - apt-get -y update
 5      - apt-get -y install language-pack-ja-base language-pack-ja
 6  pre_build:
 7    commands:
 8      - locale-gen ja_JP.UTF-8
 9      - /usr/sbin/update-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja"
10      - export LANG=ja_JP.UTF-8
11      - export LANGUAGE=”ja_JP:ja”

参考にさせていただいたサイト