Android与Linux的区别

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 有两个含义

  1. Linux 内核:这个严格来说应该叫 GNU/Linux,因为它是 GNU 计划的一部分
  2. Linux 发行版:比如 Debian、Ubuntu、Mint、RedHat等等

Android与 Linux 的关系

Android实际上用到的是 Linux 的内核。因为 Linux 本身是开源的,所以谷歌的工程师们选择了在 Linux 内核基础之上做裁剪定制,这样他们就不需要从头开始来开发一个全新的系统。使用Linux内核、包含一套开发框架、各种运行库(Media、SQLite、 OpenGL ES等)、Dalvik虚拟机,提供了Android SDK,包含丰富的工具集(有调试器、库、手机仿真器、文档、示例代码和教程),还有Android Development Tools(ADT)

Android操作系统的架构

从上图中可以清楚的看出

  1. 最上层是面向用户的Application(应用程序),包括电话程序、联系人程序、浏览器、地图、Email等。
  2. 下面是Application Framework,为开发人员提供访问核心组件所使用的API,包含了丰富的View组件、Content Providers(内容提供器)用来访问另一个应用程序的数据(如联系人),或者共享它们自己的数据、Resource Manager(资源管理器)提供对资源的访问(如本地字符串,图形,布局文件等)、Notification Manager(通知管理器)、Activity Manager(活动管理器)等等。
  3. 第三层是系统运行库,包含程序库和Android运行库。
    1. 核心类库中包含了一些C/C++库,通过应用框架为开发者提供服务,如:Libc(从BSD继承来的标准C系统函数库)、媒体库、SGL(2D图形引 擎)、3D libraries(基于OpenGL ES 1.0 APIs实现,可以使用硬件或软件3D加速)、SQLite(数据库引擎)等等
    2. Android运行时库包括一个核心库,该核心库提供了JAVA编程语言核心库的大多数功能。每一个Android应用程序都在自己的进程中运行,都拥 有一个独立的Dalvik虚拟机实例。Dalivk被设计成一个设备可以同时高效地运行多个虚拟系统。Dalivk虚拟机执行.dex文件(Dalvik 的可执行文件),该格式文件针对小内存使用做了优化。同时虚拟机是基于寄存器的,所有类都经由Java编译器编译,然后通过SDK中的dx工具转化 成.dex格式,由虚拟机执行。Dalivik虚拟机依赖于linux内核的一些功能,比如线程机制和底层内存管理机制。
  4. 接下来一层是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核心开发就分开了。
  5. 最下面一层是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 的发行版本本质上是一样的。

  • 14
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
[14本经典Android开发教程]-5-linux Android基础知识总结 ------------------------------------------------------- linuxAndroid基础知识总结 1. Android编译系统分析 2. 文件系统分析 3. 制作交叉工具链 4. 软件编译常识 5. 设置模块流程分析 6. linux系统启动流程分析 7. linux下svn使用指南 8. LFS 相关 9. linux 内核的初步理解 -------------------------------------------------------- 已上传4本: [14本经典Android开发教程]-1-Android开发从入门到精通 http://download.csdn.net/detail/cleopard/8355245 [14本经典Android开发教程]-2-Android开发手册—API函数详解 http://download.csdn.net/detail/cleopard/8374487 [14本经典Android开发教程]-3-Android SDK 中文开发文档 http://download.csdn.net/detail/cleopard/8380429 [14本经典Android开发教程]-4-Android应用程序开发36技 http://download.csdn.net/detail/cleopard/8380495 剩余9本稍后上传!@或直接从这里寻找@ http://download.csdn.net/user/cleopard/album @更多@ http://cleopard.download.csdn.net/ 福利 http://xuemeilaile.com 17份软件测试文档 http://download.csdn.net/album/detail/1425 13份WPF经典开发教程 http://download.csdn.net/album/detail/1115 C#资料合辑二[C#桌面编程入门篇] http://download.csdn.net/album/detail/957 C#资料合辑一[C#入门篇] http://download.csdn.net/album/detail/669 [Csharp高级编程(第6版)](共8压缩卷) http://download.csdn.net/album/detail/667 10个[精品资源]Java学习资料合辑[一] http://download.csdn.net/album/detail/663 10个C#Socket编程代码示例 http://download.csdn.net/album/detail/631 6份GDI+程序设计资源整合[全零分] http://download.csdn.net/album/detail/625 2014年移动游戏行业数据分析 http://download.csdn.net/detail/cleopard/8340331 一文读懂2014年全球互联网广告新生态 http://download.csdn.net/detail/cleopard/8340303

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值