十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
Go语言将支持Android
公司主营业务:成都网站设计、成都网站制作、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出安庆免费做网站回馈大家。
概述
我们建议将Go语言引入Android平台,重点是用Go语言编写游戏程序,API将在Android
NDK中定义。
背景
Android平台被设定为一个多应用操作系统,一个相对于传统UNIX系统来说更依赖于网络库和服务的操作系统,这意味着我们将为Go运行时开放更多的API。
将Golang带入Android平台是一件非常糟糕的事情,因为Android本身是Java构建的并且拥有巨量的API,任何试图将这些API用Go替代的结果将会导致一个非常糟糕的结果。无论是手工建立包装类还是自动建立都会导致程序运行非常缓慢。
然而如果使用基于C的API,通过AndroidNDK来编写一些游戏类程序可能会带来意想不到的收获。
提议
在Golang
1.4周期中,Android平台的编译将纳入Go的源,并且包含Android支持的cgo(由Elias
Naur贡献)。Dalvik-loadable
.so外部连接文件的支持也会由Android
NDK提供。
在发布上我们仍然提供交叉平台编译,并且支持在Linux主机上adb工具在Android设备上测试程序。
我们将会提供一个名叫go.mobile的子版本,包含:
1、通过Android
NDK对OpenGL,OpenSL和OpenMAX的支持。
2、一个Java-Go的工具,支持通过Java调用Go的Package,所以许多游戏的菜单UI可以通过标准SDK构建。(有可能会支持通过其他语言调用Go,比如Objective-C。)
3、集成AndroidStudio
新特性将会在Go1.4稳定版中提供。
Go 语言是一个试图结合动态类型和静态类型,编译效率和安全性以及语言的易用性等众多特性与一体的一种尝试。他的另一个目标是支持现代的基于网络的、基于多核的计算。最后,Go 还是非常快的,他可以在单个计算机上仅仅花费几秒时间构建一个庞大的应用程序。使用GO语言开发android语言步骤如下:
1. 下载安装Go语言(版本1.5+)
Golang链接
回到顶部
2. 下载安装 gomobile
下载
$ go get golang.org/x/mobile/cmd/gomobile
安装(需要等待几分钟)
gomobile init
回到顶部
3. Golang开发手机应用有两种方式
a. 原生应用开发
$ go get -d golang.org/x/mobile/example/basic
主要应用领域:
应用控制管理与配置
OpenGL ES 2 绑定
Asset 管理
Event 管理
试验中的包,含有OpenAL 绑定、音频、字体、图形以及运动传感器
Android开发
$ gomobile build -target=android golang.org/x/mobile/example/basic
此命令会生成名为basic的apk安装包
$ gomobile install golang.org/x/mobile/example/basic
此命令将安装apk包到已连接的android设备
是Go语言吗?
Go 编译过程 九个步骤
第一步. all.bash
% cd $GOROOT/src
% ./all.bash
第一步 all.bash 只是调用了另外两个 shell 脚本:make.bash 和run.bash。若使用 Windows 或 Plan 9,其过程也基本类似,只是脚本分别以 .bat 或 .rc 结尾。在文章的其他部分,请用适当的操作系统对应的扩展来补全命令。
第二步. make.bash
. ./make.bash --no-banner
make.bash 作为 all.bash 内容的一部分,如果它退出也会中断构建过程
第三步. cmd/dist
gcc -O2 -Wall -Werror -ggdb -o cmd/dist/dist -Icmd/dist cmd/dist/*.c
当健全检查完成后,make.bash 开始编译 cmd/dist。
第四步. go_bootstrap
现在 go_bootstrap 已经构建完成,make.bash 的最后一步是使用 go_bootstrap 编译完整的 Go 标准库,包括一个完整的 go 工具用以替换。
echo "# Building packages and commands for $GOOS/$GOARCH."
"$GOTOOLDIR"/go_bootstrap install -gcflags "$GO_GCFLAGS" \
-ldflags "$GO_LDFLAGS" -v std
第五步. run.bash
现在 make.bash 已经完成,回到 all.bash 的执行,这会调用 run.bash。run.bash 的任务是编译和测试标准库、运行时以及语言测试集。
bash run.bash --no-rebuild
由于 make.bash 和 run.bash 都会调用 go install -a std,因此需要使用 –no-rebuild 标志来避免重复前面的步骤,–no-rebuild 跳过了第二个 go install。
# allow all.bash to avoid double-build of everythingrebuild=trueif [ "$1" = "--no-rebuild" ]; then shiftelse echo '# Building packages and commands.' time go install -a -v std echofi
第六步. go test -a std
echo '# Testing packages.'
time go test std -short -timeout=$(expr 120 \* $timeout_scale)s
echo
接下来 run.bash 会在标准库里所有的包上来运行用 testing 包编写的单元测试。由于 $GOPATH 和 $GOROOT 中有着相同的命名空间,所以不能直接使用 go test … 否则 $GOPATH 中的每个包也会被逐一测试,因此创建了一个用于标准库中的包的别名:std。由于一些测试需要比较长的时间,且会消耗大量内存,因此用 -short 标志对一些测试进行了过滤。
第七步. runtime 和 cgo 测试
run.bash 接下来的部分会运行平台对 cgo 支持的测试,执行一些性能测试,并且编译一些伴随 Go 发行版一起的杂项程序。随着时间的流逝,这些杂项程序的清单会越来越长,那么它们也就会不可避免的被从编译过程中悄悄剥离出去。
第八步. go run test
(xcd ../test
unset GOMAXPROCS
time go run run.go
) || exit $?
run.bash 的倒数第二步会调用在 $GOROOT 下的 test 目录里的编译器和运行时的测试。他们是对于编译器和运行时自身的,较为低级细节的测试。会执行语言规格测试,test/bugs 和 test/fixedbugs 子目录保存有那些已经被发现并被修复的问题的独立的测试。驱动测试的是一个小 Go 程序 $GOROOT/test/run.go,会执行 test 目录里的每个 .go 文件。一些 .go 文件的首行包含了指导 run.go 对结果作出判断的指令,例如,程序将会失败,或提供一个确定的输出队列。
第九步. go tool api
echo '# Checking API compatibility.'
go tool api -c $GOROOT/api/go1.txt,$GOROOT/api/go1.1.txt \
-next $GOROOT/api/next.txt -except $GOROOT/api/except.txt
run.bash 的最后一步调用了 api 工具。
如何Golang开发Android应用:
一丶准备
1.一台Linux 64的机器
2.一个带有AndroidStudioIDE的开发机器
因为环境配置实在复杂,所以引入的docker。
docker pull codeskyblue/docker-goandroid
docker run --rm -ti codeskyblue/docker-goandroid bash
cd example; echo "view example projects
docker起来之后,什么就都配置好了,NDK,java,GO的环境变量了,等等,并且还预装了vim,gradle,tmux,git,syncthing,svn
二丶代码
1.写代码之前,先约定下目录结构
go的代码都放在src/golib下,编译使用make.bash编译脚本,看下这个文件树
.
|-- app.iml
|-- build.gradle
|-- libs/armeabi-v7a # go编译生成的so文件
| `-- libgojni.so
|-- main.go_tmpl # 一个模板文件,先不用管它
|-- make.bash # 编译脚本,用来生成.so和Java代码
`-- src
|-- golib
| |-- hi
| | |-- go_hi#1438;#1438;#1438; # 自动生成的代码
| | | `-- go_hi.go
| | `-- hi.go # 需要编写的代码
| `-- main.go
`-- main
|-- AndroidManifest.xml
|-- java
| |-- go # 自动生成的代码
| | |-- Go.java
| | |-- Seq.java
| | `-- hi
| | `-- Hi.java
| `-- me/shengxiang/gohello # 主要的逻辑代码
| `-- MainActivity.java#1438;#1438;#1438;
`-- res
2.写了一个例子
git clone
3.编译下,试试行不行(就算不行问题应该也不大,因为大问题都被消灭了)
cd GoHello/app
./make.bash
../gradlew build
4.一切顺利的话在build/outputs/apk下应该可以看到app-debug.apk这个文件。
编译好的放到qiniu上了,可以点击下载看看
下面可以尝试改改
打开hi.go这个文件
hi.go的内容,比较简单,写Go代码主要就是这部分
// Package hi provides a function for saying hello.
package hi
import "fmt"
func Hello(name string) {
fmt.Printf("Hello, %s!\n", name)
return "(Go)World"
}
5.文件末尾添加下面这行代码
func Welcome(name string) string {
return fmt.Sprintf("Welcome %s to the go world", name)
}
使用./make.bash重新编译下
6.打开MainActivity.java 修改下OnClickListener事件
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String message = Hi.Welcome("yourname");
Toast.makeText(MainActivity.this, message, Toast.LENGTH_LONG).show();
}
});
编译运行下,把生成的apk安装到手机上试试。
go可以在安卓运行的,github.com/golang/mobile,这是用golang做移动端开发的库,
go是静态编译语言,不是脚本语言