コード

Android Studioを使わないでアプリをビルドするCUI(Docker)環境構築

  • 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は以下のようになります。

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をインストールします。

# 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のバージョンを指定します。この数値を変更すれば別のバージョンのものをインストールできます。

# 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を使ってインストールする際に必要となるファイルです。このタイミングで作っておきます。

# 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を指定する必要があります。

# 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を使うとより軽量なイメージが作れると思います。時間があれば挑戦してみたいと思います。

-コード
-,