LoginSignup
32

More than 3 years have passed since last update.

DockerでAndroidアプリのビルド環境を作る

Last updated at Posted at 2018-12-15

「PORT」アドベントカレンダー 15日目
新卒エンジニアの@kichinagaです。
業務では、主にサーバーサイドや、アプリの開発を行っています。

最近、SlackからGithubのAndroidのプロジェクトをDeploygateにデプロイするための前準備として、DockerでAndroidアプリのビルド環境を作成したので、それについて書きます。

元イメージ

なるべく容量を抑える為にalpineイメージを使用しました。
またglibcの入っているイメージを使用しました。
glibcの入ったイメージを使用しているのは、普通のalpineイメージだとappt周りで失敗する為です。

Dockerfile
FROM frolvlad/alpine-glibc:alpine-3.8

パッケージのインストール

jdkなど、必要なものがいくつかあるので、それらのパッケージをインストールします。

Dockerfile
RUN apk update && \
    apk upgrade && \
    apk --no-cache --virtual .build add \
    bash \
    openjdk8 \
    wget 

環境変数, Pathの設定

次にjdkや、sdk toolsのパスや、ビルドするAndroidのバージョンの設定を行います

Dockerfile
## ENV settings
ENV JAVA_HOME /usr/lib/jvm/java-1.8-openjdk
ENV SDK_TOOL_VERSION=sdk-tools-linux-4333796
ENV ANDROID_HOME=/usr/local/android-sdk-linux
ENV BUILD_TOOLS_VERSION=28.0.3
ENV PLATFORMS_VERSION=android-28
ENV PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/tools/bin

SDK Toolのインストール

sdkmanagerコマンドを使えるように、sdk toolsをインストールします。
公式サイトからlinux用のsdk toolsをwgetでダウンロードし、unzipで指定の場所にsdk toolsを展開します。
展開した後はsdk toolsのzipは必要なくなるので、容量削減の為に削除しましょう。

Dockerfile
# install android sdk tools
RUN mkdir $ANDROID_HOME && \
  wget "https://dl.google.com/android/repository/${SDK_TOOL_VERSION}.zip" && \
  unzip -d $ANDROID_HOME $SDK_TOOL_VERSION.zip && \
  rm -rf $SDK_TOOL_VERSION.zip

ライセンスの認証

sdk toolsは使用する為にライセンスに同意する必要があります。
sdkmanager --licensesコマンドで全てのライセンスに同意できます。
ライセンスは複数あり、同意時にはyを押す必要があるので、yesコマンドで同意します。
また、Warning: File ~/.android/repositories.cfg could not be loaded.という警告が出るので、あらかじめ~/.android/repositories.cfgを作成しておきます。

Dockerfile
# agree sdkmanager licenses
RUN mkdir ~/.android && \
    touch ~/.android/repositories.cfg
RUN yes | sdkmanager --licenses

ビルドツールのインストール

最後に、Androidアプリのビルドツール群をsdkmanagerからインストールします。

Dockerfile
# install android tools and more
RUN sdkmanager "tools" "build-tools;${BUILD_TOOLS_VERSION}" "platforms;${PLATFORMS_VERSION}" "platform-tools" "extras;android;m2repository"

これで、Androidビルド用のDockerイメージが作成できました。

Dockerfile

今までのをまとめた物です

Dockerfile
FROM frolvlad/alpine-glibc:alpine-3.8

## install package
RUN apk update && \
    apk upgrade && \
    apk --no-cache --virtual .build add \
    bash \
    openjdk8 \
    wget 

## ENV settings
ENV JAVA_HOME /usr/lib/jvm/java-1.8-openjdk
ENV SDK_TOOL_VERSION=sdk-tools-linux-4333796
ENV ANDROID_HOME=/usr/local/android-sdk-linux
ENV BUILD_TOOLS_VERSION=28.0.3
ENV PLATFORMS_VERSION=android-28
ENV PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/tools/bin

# install android sdk tools
RUN mkdir $ANDROID_HOME && \
  wget "https://dl.google.com/android/repository/${SDK_TOOL_VERSION}.zip" && \
  unzip -d $ANDROID_HOME $SDK_TOOL_VERSION.zip && \
  rm -rf $SDK_TOOL_VERSION.zip

# agree sdkmanager licenses
RUN mkdir ~/.android && \
    touch ~/.android/repositories.cfg
RUN yes | sdkmanager --licenses

# install android tools and more
RUN sdkmanager "tools" "build-tools;${BUILD_TOOLS_VERSION}" "platforms;${PLATFORMS_VERSION}" "platform-tools" "extras;android;m2repository"

おまけ

上のdockerfileをイメージ化しておき、androidのプロジェクト直下に下のbuild.shを置いて次のコマンドを実行すると、Docker上でbuildを行い、deploygateにデプロイしてくれます。

build.sh
#!/bin/bash

./gradlew clean && \
./gradlew dependencies && \
./gradlew assembleDebug

curl \
  -F "token=[deploygeteのtoken]" \
  -F "file=@/project/app/build/outputs/apk/debug/app-debug.apk" \
  -F "message=sample" \
  https://deploygate.com/api/users/[ユーザー名]/apps
コマンド

$ docker run -v `pwd`:/project -w /project -t [コンテナ名] sh /project/build_debug.sh

参考

AlpineベースのAndroidビルド環境のDockerイメージを作成した

最後に

本当はSlackでdeployまでやりたかったんですが、時間的に厳しかったです...
CIにも流用できそうなので、Slack deployも含めて、時間を作って手を伸ばしたいと思います。



PORT 株式会社では、自社サービスを支えてくれる優秀な Ruby エンジニアを募集しています(Ruby エンジニア以外も)。
もくもく会も行なっていますので、ぜひ一緒にもくもくしましょう!

PORT Advent Calendar はまだまだ続きます。乞うご期待!

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
32