経緯
- KotlinでAndroid開発をやっているが、毎度AndroidStudioでビルドするのが面倒になってきた
- gitlabを使ってるのでついでにgitlabciを使ってみよう(別プロジェクトでrunner設定済みだったので今回必要なさそう)
- まずは手動でコンテナからビルドできるか試してみよう
Dockerインストール
最近手に入れた開発用Macなので、まだDockerが入っていませんでしたorz
ここは特に書くことないので省略します
コンテナ起動まで
今回はopenjdk8を使用します
理由はgitlabciのAndroid用テンプレートYAMLにデフォルトとして使われているのがこいつだったのと、JAVAのパッケージとかをインストールする手間が省けるからです(だから使われてるんだと思うけど)
まずはいつも通りpullします
バージョン指定は必須です
docker pull openjdk:8-jdk
そしてコンテナ起動します
docker run -it openjdk:8-jdk
必要なパッケージインストール
上記まで行うと自動的にコンテナの中に入れると思うので、パッケージをインストールしていきます
apt-get --quiet update --yes
apt-get --quiet install --yes wget tar unzip lib32stdc++6 lib32z1
export ANDROID_COMPILE_SDK=28
export ANDROID_BUILD_TOOLS=29.0.3
export ANDROID_SDK_TOOLS=6514223
export ANDROID_HOME="/android-home"
install -d $ANDROID_HOME
wget --output-document=$ANDROID_HOME/cmdline-tools.zip https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_SDK_TOOLS}_latest.zip
pushd $ANDROID_HOME
unzip -d cmdline-tools cmdline-tools.zip
popd
export PATH=$PATH:${ANDROID_HOME}/cmdline-tools/tools/bin/
sdkmanager --version
yes | sdkmanager --sdk_root=${ANDROID_HOME} --licenses || true
sdkmanager --sdk_root=${ANDROID_HOME} "platforms;android-${ANDROID_COMPILE_SDK}"
sdkmanager --sdk_root=${ANDROID_HOME} "platform-tools"
sdkmanager --sdk_root=${ANDROID_HOME} "build-tools;${ANDROID_BUILD_TOOLS}"
chmod +x ./gradlew
コンソールでエラーが出ていないかの確認と、念の為printenvで環境変数の確認くらいはやっても良いと思います
git clone
ビルドするソースコードをコンテナ内に持ってきます
ここはcloneするだけなので省略
ビルド実行
ビルド自体は簡単で、Gradleのコマンドを叩くだけです
./gradlew assemble
variantsとflavorを使いたい人はコマンドを変更してください
こちらを参考にさせていただきました
ただ、このままだとエラーになってうまく行かないです
私はここで躓いてしまったので、そのポイントを2点紹介いたします
local.properties作成
ビルドした際に下記のエラーが発生しました
「SDK location not found. Define location with an ANDROID_SDK_ROOT environment variable or by setting the sdk.dir path in your project's local properties file at」
「local propertiesにSDKの場所が書かれてない」的なエラーに見えます
言われたとおりlocal propertiesを探したのですが見つかりませんでした
AndroidStudioをのときは勝手に作られてた(多分)ので意識してなかったのですが、どうやらlocal propertiesを作り、SDKの場所を記載しないといけないようです
そもそもvimを入れてなかったのでそこからです^^;
apt-get install vim
アプリのトップフォルダに移動して
vi local.properties
中身はこんな感じです
## This file is automatically generated by Android Studio.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.
#
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
#Wed Jan 07 15:34:05 JST 2015
sdk.dir=/android-home
これで再度ビルドコマンドを叩きましたが、今度は別のエラーが
メモリ上限解放
次のエラーは
「Could not connect to kotlin daemon. Using fallback strategy.」
という内容
調べてみると、メモリが上限まで行ってデーモンちゃんが死んじゃったみたいです
Macのステータスバーにあるクジラのマークをクリックして、dockerのアプリから設定を変更して上限メモリを増やしてあげます
やり方の詳細はこちらを参考にさせていただきました
ビルド成功!!
ようやく「BUILD SUCCESSFUL」の文字が!
ビルドの際に署名を聞かれなかったことが気になってるので、そこに関しては後日追記したいと思います
Debugだからかなーと思いましたが、AndroidStudioでビルドするときはReleaseでもDebugでも署名必要なのでなんとも言えませんね
今回はdockerfileを作りませんでした
理由はgitlabci.yamlに記載するからです
次回は
- gitlabciからcommit時に自動ビルド
- variantsとflavorを指定してビルド
あたりができたらなと思います
以上です
お付き合いいただきありがとうございました
※全体的にこちらも参考にさせていただきました