大家好,我是你的好朋友思创斯。今天说一说android和linux区别_android jdk,希望您对编程的造诣更进一步.
android这一词最先出现在法国作家利尔亚当在1886年发表的科幻小说《未来夏娃》中,作者将外表像人类的机器起名为android,这也就是android小人名字的由来。android是基于linux系统的开源操作系统,是由andy rubin于2003年10月在美国加州创建,2005年8月17日,google低调收购了成立仅22个月的高科技企业android及其团队。andy rubin成为google公司工程部副总裁,继续负责android项目。2007年11月,google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良android系统。随后google以apache开源许可证的授权方式,发布了android的源代码。2008年的时候发布了第一部android智能手机,随后android不断发展更新,占据了全球大部分的手机市场。
linux
既然android是基于linux开发的操作系统,那么是不是可以理解成android是linux一个发行版本,就像centos,redhat,ubuntu一样是众多linux发行版本中的一个。如果是这样,那么同为linux发行版的centos,ubuntu等为什么没能成为移动端的操作系统,而android却如此受人青睐。最后一个问题,android是基于linux的操作系统,为什么没有人用c/c 写应用运行于android之上,而是写java应用。要想得到这个问题的答案,我们要先弄清楚几个概念。
linux,unix与gnu 渊源
- unix:unix 操作系统是在1960年代末,由当时就职于美国贝尔实验室的肯·汤普逊(kenneth thompson) 和 丹尼斯·里奇(dennis ritchie)发明的。这两个人都是计算机领域的传奇。他们除了发明了unix 系统之外,还一起发明了c语言。然后1973年他们用c语言对 unix系统进行了重新编写。
- gnu计划:unix系统只能运行在大型的计算机上,而且价格非常昂贵。小公司以及众多的软件爱好者根本用不起。为了抵制这些大厂,自由软件之父 理查德.斯托曼发起了自由软件运动,吹起了共产主义的号角(发起了gun运动),并发布了软件界的共产主义宣言(gpl协议),并且这一运动得到了很多人的认同。gnu是“gnu is not unix”的递归缩写,它的目的就是作出unix的替代品,让软件工程师、技术爱好者等个人都能开发和使用免费开源的系统和软件。到了1990年,gnu计划已经开发出的软件包括了一个功能强大的文字编辑器emacs、c语言编译器gcc以及大部分unix系统的程序库和工具。唯一依然没有完成的重要组件,就是操作系统的内核.有意思的是,而那个时候linux还没有诞生呢 ,所以斯托曼心里苦啊,就在大家逐渐失去信心的时候,1991年linus torvalds带着他的linux闪亮登场了,也给gun运动画了一个完美的句号。
- linux的诞生:
- 芬兰人托瓦兹(linus torvalds)在学习计算机操作系统时,为了能在家里的pc机上使用与学校一样的操作系统,开始了编写类似unix内核的工作。其导师做了一个简单的minix操作系统,但他觉得实在太难用了,于是也决定自己开发一个操作系统,1991 年 9 月他发布了第一版 linux 操作系统的内核(大神一言不合就写操作系统。。)
linux 与 linux 内核
linux 与 linux 内核其实不太一样的,linux 的内核是操作系统的核心,包括设备驱动、文件系统、进程管理、网络通信等。但是操作系统光有内核,用户是没有办法操作的,所以很多厂商在linux 社区就在内核之上开发了很多工具,比如我们常用的 gnome桌面,firefox浏览器、gimp 图片编辑器等等。linux 内核和这些应用一起打包后就被称作 linux 发行版本。linux 有很多的发行版本,例如redhat,centos等等。
所以我们常说的 linux 有两个含义
- linux 内核:这个严格来说应该叫 gnu/linux,因为它是 gnu 计划的一部分
- linux 发行版:比如 debian、ubuntu、mint、redhat等等
android与 linux 的关系
android实际上用到的是 linux 的内核。因为 linux 本身是开源的,所以谷歌的工程师们选择了在 linux 内核基础之上做裁剪定制,这样他们就不需要从头开始来开发一个全新的系统。使用linux内核、包含一套开发框架、各种运行库(media、sqlite、 opengl es等)、dalvik虚拟机,提供了android sdk,包含丰富的工具集(有调试器、库、手机仿真器、文档、示例代码和教程),还有android development tools(adt)
android操作系统的架构
从上图中可以清楚的看出
- 最上层是面向用户的application(应用程序),包括电话程序、联系人程序、浏览器、地图、email等。
- 下面是application framework,为开发人员提供访问核心组件所使用的api,包含了丰富的view组件、content providers(内容提供器)用来访问另一个应用程序的数据(如联系人),或者共享它们自己的数据、resource manager(资源管理器)提供对资源的访问(如本地字符串,图形,布局文件等)、notification manager(通知管理器)、activity manager(活动管理器)等等。
- 第三层是系统运行库,包含程序库和android运行库。
- 核心类库中包含了一些c/c 库,通过应用框架为开发者提供服务,如:libc(从bsd继承来的标准c系统函数库)、媒体库、sgl(2d图形引 擎)、3d libraries(基于opengl es 1.0 apis实现,可以使用硬件或软件3d加速)、sqlite(数据库引擎)等等
- android运行时库包括一个核心库,该核心库提供了java编程语言核心库的大多数功能。每一个android应用程序都在自己的进程中运行,都拥 有一个独立的dalvik虚拟机实例。dalivk被设计成一个设备可以同时高效地运行多个虚拟系统。dalivk虚拟机执行.dex文件(dalvik 的可执行文件),该格式文件针对小内存使用做了优化。同时虚拟机是基于寄存器的,所有类都经由java编译器编译,然后通过sdk中的dx工具转化 成.dex格式,由虚拟机执行。dalivik虚拟机依赖于linux内核的一些功能,比如线程机制和底层内存管理机制。
- 接下来一层是hardware abstract layer(硬件抽象层),你在早期的架构图中看不到这一层。2008年,patrick brady就提出了android hal架构,它是为了把linux kernel与上层框架完全隔开,让android不至于过度依赖linux kernel,可以让android framework的开发能在不考虑驱动程序的前提下进行。hal仍以*.so形式存在,stub向hal“提供”操作函数,runtime则是向hal 取得特定模块的操作(operations)。2010年2月3日,linux内核的开发者,将android的驱动程序从linux内核staging tree(状态树)上去除,从此,android与linux核心开发就分开了。
- 最下面一层是linux核心,android的核心系统依赖于linux内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型。android的 linux kernel也不是gnu/linux。android将驱动程序移到userspace,使得linux driver与linux kernel分开。
说了这么多对安卓系统有了一定了解后,对于安卓和linux的区别就好理解了,直接上图
linux 内核是用 c语言开发的,安卓在 linux 的内核之上用 c/c 开发了dalvik ,后来改叫 android run time,其实本身就是安卓的 java 虚拟机。我们做的安卓应用都要用 java开发,运行在 art 上面。linux 其他发行版本也可以用 java 开发应用,只要运行在 linux 的 java 虚拟机上就可以了。除此之外我们也可以在 linux 内核之上使用其他框架开发,比如 gtk 框架的 gnome、qt 框架的 lxqt,这些跟 art 都是一个层次的东西。所以我觉得安卓和其他 linux 发行版本本质上没有太大区别,只不过安卓对 linux 的内核做了一些裁减,并且在上面跑了一个 dalvik / art,而其他 linux 发行版本跑了很多个 “dalvik / art”而已。
安卓系统上可以直接运行c/c 写的app吗?
可以的,实际上这个问题有点蠢,因为决定程序能不能运行不是由它的开发语言决定的,任何语言最终都会被编译成二进制代码,所以只要编译器能编译成相关cpu和操作系统支持的代码,那么就可以在安卓上直接跑c写的app。所以也可以用c/c 开发app。
既然安卓是linux内核,那么可以在linux 桌面上运行安卓的应用吗?
因为其他 linux 发行版本也没有 dalvik / art,所以安卓的应用在 linux 桌面上不能直接运行。不过我们只需要将 dalvik / art 移植到 linux 桌面环境就可以了,只不过有些功能硬件不支持,例如通话功能,照相机功能等。正是基于这个原理,市场上有很多安卓手机模拟器,不仅可以用在 linux 桌面,还可以用在 windows 以及 mac 上。
总结
安卓的操作系统核心是在 linux 内核上做了一些裁减和定制,并且在内核之上运行了一个 dalvik / art 虚拟机,所有的应用必须运行在这个虚拟机上,所以安卓的应用都是用 java 来开发的。在 linux 的发行版本中,我们可以使用 java 虚拟机,也可以使用其他框架,比如 gtk, qt等等,它们编译出来的二进制代码可以直接运行在 linux 内核上,它们和 dalvik / art 是一个层次上的东西,所以安卓和 linux 的发行版本本质上是一样的。
文章由思创斯整理,转载请注明出处:https://ispacesoft.com/141367.html