android and golang
24 Jan 2016毕竟Go语言是Google亲生的,现在Golang团队已经适配好了可以运行在Android平台的Go了,大概看了一下官方的说明,用起来也算很方便,还有Gradle插件支持。
https://github.com/golang/mobile/tree/master/example/bind 这是官方提供的一个Demo。
Package layout
go.mobile/
cmd/gobind command line tool
bind/ code generator, used by command line tool
bindjava cgo-JNI bridge, imported by generated code
registry global registration for wrapped functions
seq data serialization format - Go implementation
> 安装gomobile
$ go get golang.org/x/mobile/cmd/gomobile
$ gomobile init
$ go get golang.org/x/mobile/example/bind/hello
$ gomobile bind -target=android golang.org/x/mobile/example/bind/hello
就会在当前目录下生成hello.aar,通过把hello.aar解压出来就会发现,原来底层也是通过JNI的方式去调用Go的函数的,只是中间包了一层。gomobile工具已经把so与java都提供好了,直接把aar导到现有的工程中就可以直接调用里面的java方法了,这个过程完全不用去定义jni方法,包名,当然了,demo中只提供了,java调用go的过程,go调用java看了一下设计文档,是通过type I interface定义一组接口并生成java的接口文件,然后去实现大概是这样。
https://godoc.org/golang.org/x/mobile/cmd/gomobile
https://docs.google.com/document/d/1y9hStonl9wpj-5VM-xWrSTuEJFUAxGOXOhxvAs7GZHE/edit