はじめに
Go 1.4からAndroidで動作するバイナリをgoのコードからビルドできるようになりましたが、ビルドの手順が煩雑です。READMEを読んでいたところ、dockerでビルドできるようなので試してみました。
手順
以下OS Xでの手順です。go, boot2docker, dockerは予めインストールされているものとします。
golang.org/x/mobileとfreetypeをgo getします。
$ go get golang.org/x/mobile
$ go get code.google.com/p/freetype-go/freetype
Docker Hubのgolang/mobileレジストリをpullしてbashで入ります。その際、$GOPATH/srcをコンテナ側で/srcになるようにマウントします。
$ docker run -it -v $GOPATH/src:/src golang/mobile /bin/bash
dockerの実行が成功するとコンテナ内にbashで入れますので、サンプルのディレクトリに移動してmake.bashを実行します。
root@a418b5149537:/src/golang.org/x/mobile# cd example/basic/
root@a418b5149537:/src/golang.org/x/mobile/example/basic# ./make.bash
[armeabi] Gdbserver : [arm-linux-androideabi-4.6] libs/armeabi/gdbserver
[armeabi] Gdbsetup : libs/armeabi/gdb.setup
[armeabi] Prebuilt : libbasic.so <= jni/armeabi/
[armeabi] Install : libbasic.so => libs/armeabi/libbasic.so
Buildfile: /src/golang.org/x/mobile/example/basic/build.xml
:
(略)
:
BUILD SUCCESSFUL
Total time: 4 seconds
Antが正常終了していればbinの下にapkが作成されているはずです。
root@a418b5149537:/src/golang.org/x/mobile/example/basic# exit
exit
$ cd $GOPATH/src/golang.org/x/mobile/example/basic/bin
$ ls -al
total 3648
drwxr-xr-x 13 kn1kn1 staff 442 1 30 12:37 .
drwxr-xr-x 15 kn1kn1 staff 510 1 30 12:37 ..
-rw-r--r-- 1 kn1kn1 staff 856 1 30 12:37 AndroidManifest.xml
-rw-r--r-- 1 kn1kn1 staff 128 1 30 12:37 AndroidManifest.xml.d
-rw-r--r-- 1 kn1kn1 staff 179 1 30 12:37 build.prop
-rw-r--r-- 1 kn1kn1 staff 919637 1 30 12:37 nativeactivity-debug-unaligned.apk
-rw-r--r-- 1 kn1kn1 staff 276 1 30 12:37 nativeactivity-debug-unaligned.apk.d
-rw-r--r-- 1 kn1kn1 staff 919637 1 30 12:37 nativeactivity-debug.apk
-rw-r--r-- 1 kn1kn1 staff 807 1 30 12:37 nativeactivity.ap_
-rw-r--r-- 1 kn1kn1 staff 132 1 30 12:37 nativeactivity.ap_.d
drwxr-xr-x 2 kn1kn1 staff 68 1 30 12:37 res
drwxr-xr-x 2 kn1kn1 staff 68 1 30 12:37 rsLibs
drwxr-xr-x 2 kn1kn1 staff 68 1 30 12:37 rsObj
手順は以上です。慣れてきたらREADMEにあるように、bashで入らずに、
$ docker run -v $GOPATH/src:/src golang/mobile /bin/bash -c 'cd /src/your/project && ./make.bash'
でも良いかもしれません。
また、golang.org/x/mobileにDockerfileもあるので、pullせずにbuildでも良いかもしれないですね。