- android studioが不要なandroidアプリのビルド環境を作りたい
- 今の環境を残したままSDKやNDKバージョンが違う環境を作りたい
- Android Studioを立ち上げると起動が遅いので嫌気がさしている
Dockerコンテナを使ってビルド環境を作ると、そういった課題を解決することができます。
ゴール
最終的にAndroidアプリがビルドできる以下の環境を構築します。
- ホストOS: Windows 10 64bit
- Docker for Windows:18.09.2
- ゲストOS:Ubuntu16 16.04
- Android SDK:24と28
- Android NDK:リビジョン16b
- CMake:3.6.411459
- gcc/g++:4.9
NDKに関して、2019/5月時点でのNDKの最新の安定版はリビジョン19cですが、今回はリビジョン16bを使います。というのも、リビジョン18からgccが非サポートとなり、代わってclangが正式サポートとなっています。今回はCMakeとgccを使いたいため、リビジョン16bを利用します。
Dockerfile
先に結論を書きます。最終的に作成したDockerfileは以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | FROM ubuntu:16.04 # Install sudo RUN apt-get update ¥ && apt-get -y install sudo ¥ && user add -m android && echo "android:android" | chpasswd && adducer android sudo # Install 32bit lib RUN sudo apt-get -y install lib32stdc++6 lib32zl # Environment variables ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64 # Install Java8 RUN apt-get install -y software-properties-common curl ¥ && add-apt-repository -y ppa:openjdk-r/ppa ¥ && apt-get update ¥ && apt-get install -y openjdk-8-jdk # Environment variables ENV ANDROID_COMPILE_SDK="24" ¥ ANDROID_BUILD_TOOLS="28.0.3" ¥ ANDROID_SDK_TOOLS_REV="4333796" ¥ ANDROID_CMAKE_REV="3.6.411459" ¥ ANDROID_CMAKE_REV_3_10="3.10.2.49884404" ¥ ANDROID_HOME=/usr/local/android-sdk-linux ¥ ANDROID_NDK=/usr/local/android-sdk-linux/ndk-bundle ENV PATH $ANDROID_HOME/platform-tools:$ANDROID_NDK:$ANDROID_HOME/tools/bin:$PATH ARG SDK_TOOL_VERSION=sdk-tools-linux-${ANDROID_SDK_TOOLS_REV} # install wget, unzip RUN apt-get update ¥ && apt-get install -y --no-install-recommends ¥ wget ¥ unzip # install android sdk tools RUN cd /usr/local ¥ && 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 ¥ && mkdir -p $HOME/.android ¥ && touch ~/.android/repositories.cfg # install tools RUN yes | sdkmanager --licenses > /dev/null ¥ && yes | sdkmanager --update ¥ && yes | sdkmanager 'tools' ¥ && yes | sdkmanager 'platform-tools' ¥ && yes | sdkmanager 'build-tools;'$ANDROID_BUILD_TOOLS ¥ && yes | sdkmanager 'platforms;android-'$ANDROID_COMPILE_SDK ¥ && yes | sdkmanager 'platforms;android-28' ¥ && yes | sdkmanager 'extras;android;m2repository' ¥ && yes | sdkmanager 'extras;google;google_play_services' ¥ && yes | sdkmanager 'extras;google;m2repository' ¥ # install cmake, ndk ARG CMAKE_REV_3_6=cmake;$ANDROID_CMAKE_REV RUN yes | sdkmanager $CMAKE_REV_3_6 ¥ && yes | sdkmanager --channel=3 --channel=1 'cmake;'$ANDROID_CMAKE_REV_3_10 ¥ && yes | sdkmanager 'ndk-bundle' # update Android NDK version RUN cd $ANDROID_HOME ¥ && wget https://dl.google.com/android/repository/android-ndk-r16b-linux-x86_64.zip ¥ && unzip android-ndk-r16b-linux-x86_64.zip ¥ && rm android-ndk-r16b-linux-x86_64.zip ¥ && rm -r ndk-bundle ¥ && mv android-ndk-r16b ndk-bundle |
解説
Open JDKのインストール
JavaをビルドするためにOpen JDKをインストールします。
1 2 3 4 5 6 7 8 | # Environment variables ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64 # Install Java8 RUN apt-get install -y software-properties-common curl ¥ && add-apt-repository -y ppa:openjdk-r/ppa ¥ && apt-get update ¥ && apt-get install -y openjdk-8-jdk |
インストールするライブラリのバージョン指定
sdk-tools、cmake、ndkのバージョンを指定します。この数値を変更すれば別のバージョンのものをインストールできます。
1 2 3 4 5 6 7 8 | # Environment variables ENV ANDROID_COMPILE_SDK="24" ¥ ANDROID_BUILD_TOOLS="28.0.3" ¥ ANDROID_SDK_TOOLS_REV="4333796" ¥ ANDROID_CMAKE_REV="3.6.411459" ¥ ANDROID_CMAKE_REV_3_10="3.10.2.49884404" ¥ ANDROID_HOME=/usr/local/android-sdk-linux ¥ ANDROID_NDK=/usr/local/android-sdk-linux/ndk-bundle |
Android SDKのインストール
zipをwgetでダウンロードして解凍します。最後の2行はsdk-toolsを使ってインストールする際に必要となるファイルです。このタイミングで作っておきます。
1 2 3 4 5 6 7 8 | # install android sdk tools RUN cd /usr/local ¥ && 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 ¥ && mkdir -p $HOME/.android ¥ && touch ~/.android/repositories.cfg |
ビルドツールのインストール
先ほどダウンロードしたsdk-toolsを使って各種ツールをダウンロードします。yes | sdkmanagerとすることでsdkmanagerを使うと求められる同意を承認しています。
build-toolsだけあればビルドできそうな気がしますが、adb等の各種ツールも一緒にダウンロードしています。
ターゲットとするAPIによって$ANDROID_COMPILE_SDKを指定する必要があります。
1 2 3 4 5 6 7 8 | # install tools RUN yes | sdkmanager --licenses > /dev/null ¥ && yes | sdkmanager --update ¥ && yes | sdkmanager 'tools' ¥ && yes | sdkmanager 'platform-tools' ¥ && yes | sdkmanager 'build-tools;'$ANDROID_BUILD_TOOLS ¥ && yes | sdkmanager 'platforms;android-'$ANDROID_COMPILE_SDK ¥ && yes | sdkmanager 'platforms;android-28' ¥ |
最後に
今回作成した環境を用いれば、Android Studioで作成したプロジェクトであればbuild.shを叩くとandroidアプリ(apk)が作成できると思います。またCMakeを用いることでc++向けのライブラリをビルドすることもできます。
今回はubuntuをベースに作成しましたが、少々容量が大きくなってしまいました。alpineを使うとより軽量なイメージが作れると思います。時間があれば挑戦してみたいと思います。