(注* 最近nodejs***的Web框架作者TJ决定告别nodejs去写go了,此文也许揭示了一些原因)
David Crawshaw
2014年6月
摘要
我们打算在Android平台引入Go,重点是支持在Android上使用Go写游戏. 将会使用现有的API接口。
背景
Android是是支承应用程序的操作系统。它能比Unix系统提供更多的库和服务,重用现有接口使Go迁移到Android的过程会更加简单。
在Android平台让GO实现与JAVA完全一样的功能是非常困难的。这个用JAVA写的平台有着海量的API。任何将这些API用Go封装都会遇到:手动封装无法应用***的特性,自动封装的Go的代码没法看,无论如何这个过长可能会很长。
然而,安卓上用于编写游戏所需要的基于C语言的API只是安卓API中的一个比较小的子集,所以用Go来实现NDK中一些等价的功能是可行的。
但是,Android应用中有一些较少的基于C写的API接口,他们在Android NDK中:对,就是游戏用到的这些接口。因此让GO支持这些NDK中的特性是较为可行的。
提议
在Go1.4的开发周期中,通过设置GOOS=android,Android将可以支持go代码了,同时也支持cgo(Elias Naur提供)。 Dalvik/ART 也将可以加载,因此会产生一需要连接到NDK的额外文件。
在编绎面板,我们会提供一个交叉编绎器,用来在linux上运行Go的一些工具,即可以使用adb工作在Android设备上测试你的编绎文件。
这里有一个新的项目go.mobile,它会提供:
- 绑定OpenGL, OpenSL和OpenMAX 这些从NDK暴露的接口。
- JAVA到Go的绑定生成器。比如你有一个Go的库,这玩意可以让java代码调用它,因此游戏菜单的UI可以在标准的SDK中创建。(就想Go中的绑定,这可以让同样的代码去绑定其它语言,比如Objective-C)。
- 与Android Studio集成
- 在项目稳定可用时,将发布发行版。