使用Docker在移动设备上构建Go Mobile应用.

首先

从 Go 1.4 开始,可以从 Go 代码构建适用于 Android 的二进制文件,但构建过程复杂繁琐。阅读 README 文件后,发现可以使用 Docker 进行构建,因此尝试了一下。

步骤

以下是在OS X上的步骤。假设已经预先安装了go、boot2docker和docker。

请使用 go get 工具获取 golang.org/x/mobile 和 freetype。

$ go get golang.org/x/mobile
$ go get code.google.com/p/freetype-go/freetype

从 Docker Hub 上拉取 golang/mobile 存储库,以 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也可以。