Go语言对Android原生应用开发的支持情况

移动开发 Android
Google工程师和独立开发人员提出了几份不同的提案,旨在让Go语言支持开发原生的Android应用。这项工作无法让Go语言编写的应用使用Android NDK的全部接口,但有可能使用其中的一个子集。

Google工程师和独立开发人员提出了几份不同的提案,旨在让Go语言支持开发原生的Android应用。这项工作无法让Go语言编写的应用使用Android NDK的全部接口,但有可能使用其中的一个子集。

David Crawshaw是Google的工程师,他写了一份提案,旨在让Go语言部分支持编写Android应用。根据他的说法,“用Go语言来实现整个Android平台非常困难。Android平台是用Java写的,并拥有庞大的API层。”

但是,Crawshaw说,一部分Android应用——比如游戏——使用了精简得多的C语言API编写代码,这些API由Android NDK提供。这样,使用Go语言来开发和NDK一样的功能,提供对Android的支持是有可能实现的。

Crawshaw建议在Go 1.4的开发周期中,Go语言的代码库引入一个叫GOOS=android的选项,这个选项可以提供以下功能:

  • 为Android NDK中导出的OpenGL、OpenSL和OpenMAX接口,提供Go语言的绑定(binding)。
  • 从Java语言到Go语言的绑定生成器(binding generator)。如果我们有一个Go语言编写的软件包,那么这个生成器可以帮助Java代码调用它,所以游戏菜单界面就可以直接使用标准的SDK来编写了。
  • 集成到Android Studio的编译系统中。

不止Crawshaw一个人提出了把Go语言和Android结合起来的想法。Elias Naur建议扩 展Go语言的工具链来支持创建动态库。这样我们就可以在Android应用中使用Go语言编写的库,它们被Android应用加载和运行,并打包在apk 中发行。要把这个想法变为现实,有一个重要的前提条件:加入对交叉编译的支持,而Go 1.3已经实现了它。交叉编译是必需的,因为NDK本身并不能在Android上运行,只有使用NDK编译和(或)链接的可执行程序和动态库才能在 Android设备上运行。

上面这个提案基于已有的开源项目goandroid,作者就是Elias Naur。Goandroid修改了Go语言的工具链和运行时库,使之能编写动态库,在原生的Android应用中运行,而Google官方并不支持这个功能。

***,还有一个叫Mandala的项目,它是一个更全面的框架,它的目标是使Go语言能编写Android原生应用。Mandala利用了Goandroid的工具链,它的作者Andrea Fazzi说,感谢Goandroid,“你可以在桌面环境中开发、测试和运行你的应用,然后再把它部署到Android设备上。它鼓励大家以Go语言独特的方式来编写Android应用:使用通道(channels)来实现通讯,而不是回调函数(callbacks)”

在功能方面,Mandala项目跟Crawshaw的提案很接近,它的目标也主要是为游戏提供解决方案:“我们不应该把Mandala框架看作是一 个上层的游戏引擎,而是应该在它基础之上构建游戏引擎,或者把已有的游戏引擎移植到它上面。” Fazzi 提醒道,Google并不支持用Go语言来开发原生的Android应用,但他也表达了他的期望“当前这些工作可以起到某种激励作用,促使Go语言开发团 队从官方层面支持Android。”

责任编辑:chenqingxiang 来源: infoq
相关推荐

2022-04-06 08:19:13

Go语言切片

2020-12-01 17:44:15

华为云Go语言云原生

2011-05-13 15:46:49

C模块化

2014-06-23 09:49:32

Go语言Android谷歌

2022-10-27 18:03:04

GogRPC云原生

2012-07-06 13:16:37

Google Go

2014-07-14 15:51:08

AndroidGO语言

2023-03-13 00:10:46

Go语言版本

2022-06-22 09:24:30

云原生Go 语言

2018-06-04 09:30:07

编程语言安卓应用开发

2012-05-19 22:17:30

Android

2014-06-12 13:50:25

2017-10-12 17:58:42

C语言Gtk+应用功能测试

2022-09-04 23:24:45

Go语言监控

2017-08-08 11:18:26

AndroidIntent原生

2010-08-24 16:07:37

C语言

2022-03-13 23:51:39

Web项目Go

2018-07-29 23:09:15

Google Go技术

2011-05-31 14:44:55

Android

2019-01-03 09:45:20

Go 前端 Web
点赞
收藏

51CTO技术栈公众号