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 的发行版本本质上是一样的。

Android与Linux的区别相关推荐

  1. android和linux操作系统的区别

    Android是由Google为移动设备开发的开源操作系统.Android软件的原始开发商Android公司是由Google,Inc.于2005年购买的.它是基于Linux 2.6内核开发的.Linu ...

  2. unix与linux的区别_Linux与Unix:有什么区别?

    unix与linux的区别 如果您是20多岁或30多岁的软件开发人员,那么您已经在Linux主导的世界中长大了. 数十年来,它一直是数据中心的重要参与者,尽管很难找到确定的操作系统市场份额报告,但Li ...

  3. Android系统 linux内核按键驱动开发

    Android系统 linux内核按键驱动开发 前言 刚入门的小白,在csdn的帮助下完成了第一个按键驱动,特写此文记录学习并分享给有需要的人. 1.修改设备树.dts 我是用的开发板是rp-rk32 ...

  4. 《Android Studio应用开发实战详解》——第1章,第1.4节Android和Linux的关系

    本节书摘来自异步社区<Android Studio应用开发实战详解>一书中的第1章,第1.4节Android和Linux的关系,作者 王翠萍,更多章节内容可以访问云栖社区"异步社 ...

  5. 4路/8路模拟CVBS摄像头TW6865/TW6869 i.MX6四核工业级Android、Linux、STM32、NXP

    1.      核心板简介 核心板简介 JQQIT_MX6_SOM100核心板是我公司基于NXP(Freesacle) i.MX 6 系列应用处理器研发设计的,是一个可运行Android.Linux系 ...

  6. ios开发和安卓开发java_细说ios开发和Android开发有什么区别?谁更有优势?

    ios开发和安卓开发的市场分析: 首先iOS系统是应用在iPhone.iPad等高端设备上的,iOS市场占有的份额虽然不高,但是用户的消费能力比较强,生态圈较好有利于开发者直接获利.Android向大 ...

  7. Android SDK与JDK区别和联系

    Android SDK Android SDK(Soft Development Kit)全称为安卓软件开发工具包,***(通俗理解)***相当于安卓机器的操作系统,类似与windows操作系统,其也 ...

  8. 下载android的linux内核的方法

    1.安装git android的linux内核可以从http://android.git.kernel.org/下载,但下载需要使用git,windows版的git可以从http://code.goo ...

  9. uclinux与linux的区别

    一.名字含义: 在uClinux这个英文单词中u表示Micro,小的意思,C表示Control,控制的意思, 所以uClinux就是Micro-Control-Linux,字面上的理解就是" ...

最新文章

  1. Python语言的特点
  2. Nacos部署中的几个常见问题
  3. Android代码混淆及反编译
  4. 【mybatis源码系列1】 二级缓存
  5. 攻克前端开发的难点,码农不惧!!
  6. 认知智能,AI 的下一个十年 | AI Procon 2020
  7. 内网漫游之SOCKS代理大结局
  8. 对抗样本之FGSM原理coding
  9. Altium Designer 元器件库的介绍和使用
  10. 第一本书应考虑哪些细节?
  11. 计算机术语CPI是什么意思,cpi是什么意思
  12. 用计算机计算勾股定理,勾股定理电脑计算器
  13. 解决win10桌面管理器内存泄漏问题
  14. 算法成华纳旗下歌手?背景音乐经济
  15. Linux学习笔记------java学习
  16. ITN网络课程笔记(十七)(完)
  17. div添加阴影(盒子阴影)box-shadow各参数含义
  18. 黑马瑞吉外卖之新增员工
  19. mysql字符集校对和规则
  20. 搞清楚nand flash和 nor flash 以及 spi flash 和cfi flash 的区别

热门文章

  1. 洛谷 P1016 旅行家的预算
  2. 需求到系统上线经历了什么
  3. 简单分析实现运维利器---web远程ssh终端录像回放libl
  4. 智能家居设备安全分析技术综述
  5. [Windows]_[系统内部版本号对照表]
  6. 【JVM进阶之路】内存结构(一)
  7. 使用DiskGenius进行硬盘数据迁移
  8. 独立思考:鱼龙混杂的蓝牙5.1市场上如何识别出一家国内的靠谱的蓝牙AOA高精度定位基站的原厂家思路之一
  9. 学生为什么要学python_碎碎念|为什么要学Python
  10. 云计算的云指的是什么?通俗解释云计算能做什么