user icon

Android プロジェクトを Linux CUI 環境でビルドする

ちょっと分かり辛いタイトルですが、この記事では Android プロジェクトを Linux CUI 環境でビルドします。

前提

Vagrant (VirtualBox) 上で Arch Linux を使用して試していますが、Ubuntu や CentOS でも手順に大きな差は無いはずです。但しメモリを割と食うので 2GB 程度割いておいたほうがいいかもしれません。

$ vagrant init terrywang/archlinux
# Vagrantfile

  config.vm.provider "virtualbox" do |vb|
    # Customize the amount of memory on the VM:
    vb.memory = "2048"
  end
$ vagrant up && vagrant ssh

ビルド対象は support library や Play Services が使用されている以下のプロジェクトを試します。
googlesamples/android-play-location: BasicLocationSample

$ git clone git@github.com:googlesamples/android-play-location.git

JDK が入っていない場合は入れておきます。

# Arch Linux

# https://aur.archlinux.org/packages/jdk/
$ curl -LO https://aur.archlinux.org/cgit/aur.git/snapshot/jdk.tar.gz \
       && tar -zxf jdk.tar.gz \
       && cd jdk
# PKGBUILD、.install を確認する
$ makepkg -sri

SDK のインストール

Linux 版の SDK アーカイブを確認し、ダウンロードします。ここは色々やっていると容量が大きくなっていって仮想マシンの場合はディスクを食い潰しやすいので、/vagrant 配下に置いてホストマシンに容量を委ねたほうがいいかもしれません。

$ cd /vagrant
# 執筆時点の最新
$ curl -LO http://dl.google.com/android/android-sdk_r24.3.4-linux.tgz
$ tar -zxf android-sdk_r24.3.4-linux.tgz
# 環境変数を設定
$ export ANDROID_HOME=/vagrant/android-sdk-linux

次に SDK 内で必要な項目をダウンロードします。platform、build-tools、また必要に応じて support library、Play Services を使用する場合はそれぞれ extra-android-m2repository、extra-google-m2repository を取得します。

$ cd $ANDROID_HOME

# 使用する platform、build-tools の名前を確認
$ ./tools/android list sdk --all
# GUI の無い環境の場合、--no-ui が無いとエラー
# google-m2repository は --all が無いと入らないので注意
$ ./tools/android update sdk --no-ui --all --filter android-23,build-tools-23.0.1,extra-android-m2repository,extra-google-m2repository

aapt が見つからない問題

リソース xml ファイルを処理する aapt が 32bit アプリケーションなので 64bit OS ではビルドが通らない場合があります。

java.io.IOException: Cannot run program "/vagrant/android-sdk-linux/build-tools/23.0.2/aapt": error=2, No such file or directory

この為 32bit 版のライブラリを入れておきます。

# Arch Linux

# 以下を参考に Multilib を有効にする
# https://wiki.archlinux.org/index.php/Multilib

$ sudo pacman -S lib32-glibc lib32-zlib lib32-gcc-libs

Ubuntu はこの辺りが参考になるようです。
Android Studioでaaptが見つからないエラーを解決する方法 – Qiita

Let’s ビルド

ここまでくるとあとはビルドするのみです。やりましたね。

$ cd android-play-location/BasicLocationSample/
# release ビルドを行う場合は build.config で署名情報を設定する
$ ./gradlew assembledebug
# 以下のディレクトリにバイナリが出力される
$ ls app/build/outputs/apk/
app-debug.apk  app-debug-unaligned.apk

番外

上記の SDK ダウンロードの面倒を見てくれる gradle plugin も存在するようです。
Android – Gradle SDKManagerPluginによるSDKパッケージの依存関係解決 – Qiita

が、執筆時点では以下の issue の通りうまく動作していない面もあり、私もうまく動かすことが出来ませんでした。
Android build tools version 23.0.2 not being downloaded. · Issue #101 · JakeWharton/sdk-manager-plugin

総括

Android の環境が無いけどちょっと他人のプロダクトを試したい場合や CI サーバーでビルドを行いたい場合に便利だと思います。次回があれば Docker コンテナに押し込んでみたりします。

参考記事

android update sdkのfilterで指定できる項目名の確認方法 | memorandum
CentOS6.x 64bit のCUI環境にAndroid環境を構築する – Qiita


Facebooktwitterlinkedintumblrmail
名前
E-mail
URL
コメント

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)