golang最让我心动的,就是交叉编译比较方便,android基本上都是arm处理器,交叉编译过arm的都知道,工具链不一样,往往问题比较麻烦,其中最大的问题在于动态库的版本问题(c语言的可以编译用--static解决这个问题)。
而golang交叉编译arm下面的程序,几乎个个平台,都很通用。方法则是额外设置GOARCH(也有个GOOS,这里不讨论)就可以了。
毕竟golang和android都是google的儿子,android下不能允许golang的程序,不太像话!!
环境准备
1、一台root的手机
2、android shell环境
最终要运行,需要在shell下执行相应的命令,可以选择adb shell,也可可以下载一个叫Shell终端的app。
2、golang工具包
需要下载golang开发包(win、mac和linux都有),设置GOROOT、GOPATH等环境变量。
编译过程
1、helloworld源码编辑,(其实任何的golang源码都行,可以去github.org去淘些有趣代码)
package main import "fmt" func main() { fmt.Printf("hello world!\n")}
2、编译
此时用到了交叉编译,需要设置变量GOARCH
GOARCH=arm go build ./helloworld.go
第一次编译可能时间会很久,因为在准备交叉编译的库。
3、传到android设备 经过尝试,sd卡中无论如何都运行不起来,chmod可执行程序会报126错误
所以需要,再用手机端的文件管理app(例如Root Explorer)传到 /data 下面, 因为只有data下面的文件,可以执行(sd卡下面获取执行权限,chmod没效果)
4、执行
adb shell下面可以执行,结果如下
Shell终端app执行,结果如下