LoginSignup
1
0

More than 3 years have passed since last update.

OpenJDKのDockerコンテナを使ってKotlinアプリのビルドを行う

Last updated at Posted at 2020-10-17

経緯

  • 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を指定してビルド

あたりができたらなと思います

以上です
お付き合いいただきありがとうございました

※全体的にこちらも参考にさせていただきました

1
0
0

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
1
0