如何用AI技术降噪? QCon 广州“音视频架构实践”专场给你答案! 了解详情
写点什么

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

  • 2014 年 7 月 07 日
  • 本文字数:1317 字

    阅读完需:约 4 分钟

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。”

参考原文链接: The State of Go Language for Android Native Development


感谢侯伯薇对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014 年 7 月 07 日 04:5010655
用户头像

发布了 77 篇内容, 共 33.2 次阅读, 收获喜欢 24 次。

关注

评论

发布
暂无评论
发现更多内容

5 分钟,从 0 到 1 上线个人网站!

程序员鱼皮

JavaScript GitHub 大前端 Web 计算机

直呼内行!靠着这份阿里10w字面试总结,我成功收到了4个大厂offer

Java 程序员 架构 面试 计算机

搜客系统软件开发公司

Go语言:如何通过 RPC 来实现跨平台服务!

微客鸟窝

Go 语言

逆袭成功,不愧是阿里内部面试参考指南,已帮我拿下了8个大厂的offer

Java 程序员 架构 面试 计算机

只出现一次的数字

Memorys

Java 面试 算法

肝完这在“牛客网”难倒万人的Java面试题后,已收获9个大厂offer

java小李

Sprint Boot git reset spring cloud alibaba

马士兵「研发」对标阿里Java架构师P5—P9成长路线,文档+教程

Java架构追梦

Java 数据库 架构 JVM 多线程与高并发

系统性能优化-缓存

计算机 计算机缓存

仅仅上线一小时,下载量就破10W!阿里内部Java性能优化实战手册

java小李

面试 JVM

询盘获客软件系统开发详情

分布式性能测试框架用例方案设想(一)

FunTester

性能测试 接口测试 测试框架 测试开发 分布式压测

AI智能获客询盘软件系统开发公司

MEMS加速度计如何选型?

不脱发的程序猿

物联网 传感器 ADI MEMS加速度计 期刊论文

差之毫厘:etcd 3 完美支持 HTTP 访问?

Apache APISIX 中国社区

etcd 网关 APISIX

短视频SEO获客系统软件开发简介

基于docker的分布式性能测试框架功能验证(一)

FunTester

性能测试 接口测试 测试框架 测试开发 分布式压测

浅谈工业4.0背景下的空中数据端口,无人机 3D 可视化系统的应用

一只数据鲸鱼

无人机 数据可视化 工业4.0 数字孪生 智慧工业

裸辞后吊打大厂面试官,四面拿到阿里offer后我还是选择了美团

java小李

tomcat elasticsearch

5年经验Android程序员面试27天,从理论到实践!

欢喜学安卓

android 程序员 面试 移动开发

抖音获客APP开发,抖音获客系统开发(成功案例),抖音获客系统源码

系统开发咨询1357O98O718

BATJ高频249道Java高级岗面试题,坚持奋斗了刷了一个月,成功入职阿里

程序员改bug

Java spring 架构 面试 编程语言

大专的我狂刷29天“阿里内部面试笔记”最终直接斩获十七个Offer

Java 编程 程序员 架构师 计算机

短视频询盘获客系统软件开发价格

330页PDF,10万字的知识点总结,架构师必备!

欢喜学安卓

android 程序员 面试 移动开发

短视频营销获客软件系统开发内容

一周信创舆情观察(7.19~7.25)

统小信uos

详解云安全攻防模型,这些攻击战略和战术越早知道越好!

博文视点Broadview

10天拿到腾讯Android岗offer,大厂直通车!

欢喜学安卓

android 程序员 面试 移动开发

「云智公开课」百度沧海·存储

「云智公开课」百度沧海·存储

Go语言对Android原生应用开发的支持情况_Java_Sergio De Simone_InfoQ精选文章