今天的主要内容为Android 原生应用开发得到Go 语言支持,那么我们首先简单看下GO是什么呢?
Go是Google开发的一种编译型,並發型,并具有垃圾回收功能的编程语言。
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。”
Go语言的语法接近C语言,但是对于变量的声明是不同的,其他语法不同之处是For循环和if判断式没有括号围绕。Go语言支持垃圾回收功能。Go语言的并行模型是以东尼·霍尔的CSP为基础,采取类似模型的其他语言包括occam和Limbo,但它也具有Pi运算的特征,比如通道传输。
与C++相比,Go语言并不包括如异常处理、继承、泛型、断言、虚函数等功能,但增加了slice型、并发、管道、垃圾回收、接口(interface)等特性的语言级支持。当然,Google 对于泛型的态度还是很开放的,但在该语言的常见问题列表中,对于断言的存在,则持负面态度,同时也为自己不提供类型继承来辩护。不同于Java,Go语言内嵌了关联数组(也称为哈希表(hashes)或字典(dictionaries)),就像字符串类型一样。
以上内容就是我们简单介绍了下GO语言,也是了解到GO语言正在支持我们的Android 原生应用开发,希望小伙伴们多多了解之方面知识。
文章来源于:http://www.alqsoft.com/xinwenzixun/androidkaifa/2014/0709/131.html
相关推荐
6个android原生开发小游戏
前言如今,软件应用程序会经常通过计算机网络,借助进程间通信技术实现彼此间的连接。gRPC 是一种基于高性能 RPC(远程过程调用)的现代进程间通信风格,适用于构
原生获取手机应用列表,代码亲测!
android-go项目旨在提供一种平台(即SDK),用于以Go编程语言编写原生Android应用程序。 这里所有的东西都被设计成尽可能少的耦合,从而保持了很大的灵活性,同时保持简单易用。
此包中包含了大部分的android原生的应用程序的源码,对于研究android系统级应用开发的人来说是很有帮助的
使用android原生的分享微信,qq好友,以及更多分享
Android开发的原生登陆界面。支持手机横屏和竖屏。
基于原生相机的二次开发源码可以设置包括分辨率、闪光灯、构图、触屏拍照等信息
【鼎鼎少年雅思伴学双端APP】联邦雅思伴学在线课程学习辅导安卓苹果原生应用开发运营版源码[附产品交接使用多个文档] 原生系统源码(包含后端源码,Android源码,IOS源码,ipad源码包含了学生端和老师端,支持一对一...
Android原生人脸识别,包含Camera和Camera2两种实现方法
android原生系统签名文件 (也可通过以下网址下载 http://androidxref.com/9.0.0_r3/xref/build/target/product/security/
RN与android混合开发及RN调用原生方法
Android开发之原生定位的方法(GPS,网络定位)更多查看我的博客:https://blog.csdn.net/xiayiye5/article/details/83686286
第9章 Android特色开发 第三部分 实例篇 第10章 Android应用开发实例 第11章 Android游戏开发实例 第四部分 高级篇 第12章 AndroidOpenGL开发基础 第13章 AndroidOpenGL综合应用 第14章 游戏引擎实现 第15章 优化...
原生Settings源码,供学习研究使用
android原生相册应用编译
最重要的是还全面介绍了如何利用原生的C/C++(NDK)和Python、Lua等脚本语言(Android Scripting Environment)来开发Android应用;本书实战性强,书中的每个知识点都有配精心设计的示例,尤为值得一提的是,它还以...
cocoscreator嵌入原生Android1
android原生与js互调 android原生与js互调 android原生与js互调
android原生setting分析(修改版)