简介

Android 是什么?

  Android 是一款操作系统。
  Android 是 IT 巨头 Google 公司推出的一款手机系统,是基于Linux内核(不包含 GNU 组件)的自由及开放源代码的操作系统。

  PS:注意这里是开放源代码,而不是开源。Android 并不是真的开源操作系统,这一点在后面会进行解释。

Android 优势是什么?

1. “开源”

  可能有的人看到这里会感觉很奇怪,前面刚说 Android 并不是开源操作系统,这里又说 Andorid 的优势是开源,这不是自相矛盾吗?别着急,我们来看看 Android 的发展历史就明白了。

  2007 年,发生了两件事,将智能手机带入一个新时代。一个是苹果发布 iPhone ,另外一件事就是 Android 的诞生。
  与 iOS 不同,Android 系统部分采用了 Linux 内核,Google 也以开源的方式将 Android 公开授权给所有厂商。Google 这一举动其实是为了对抗闭源的 iOS 系统,以开源系统来让 Android 快速扩大规模,而且 Android 大部分的 API 还都支持 iOS 系统,对开发者十分有吸引力。得益于开源策略,2010 年 Android 系统的市场份额就已经超越了在手机市场上称霸十多年的诺基亚 Symbian 系统,成为全球第一大智能手机操作系统。

  使用 Linux 内核存在的问题: 由于 Android 是基于 Linux 内核的操作系统,Linux Kernel 的版权是 GPL,这意味着对于源代码的任何修改都需要开源。最直接的影响就是硬件厂商,驱动程序是需要放到内核中的,使用 GPL 许可证会使得采用 Android 的硬件厂商公开硬件驱动程序和应用程序的源代码,驱动程序中包括一系列的参数,这些参数的公开相当于让这些厂商将核心技术公之于众,这是广大硬件厂商不能接受的。所以硬件厂商只提供编好的驱动程序,不提供原始码。

  Android 的解决方案: Android 为了解决上述驱动开源的问题,采用了另一个许可证 ASL(Apache Software License) 来绕过这个问题。
  Google 将驱动程序移到了 “userspace” 中,而不是 “kernel” 中,即让驱动程序在 Linux Kernel 上面运行,而不是和 Linux Kernel 一起运行。
  原本 “userspace” 是不能直接控制硬件的,Google 在 Kernel 上开一个“小门”,让本来不能直接控制硬件的 “userspace” 程序也可以控制硬件,然后根据 GPL 许可证,只需要公开这个开“小门”的程序的源码即可。
  由此可见,Google 在 Kernel 和应用程序之间设计了一个中间层,即不违反 GPL 许可证,又能不让外界看到厂商的硬件驱动源码。

  带来的影响: Google 的解决方案带来了一个问题,即 Kernel 和 Android 采用不同的许可证。
  Kernel 采用 GPL 许可证,而 Android 采用 Apache Software Licence。在 GPL 许可证中规定,对源码的任何修改都必须开源,所以 Android 必须开源,因为它修改了 Kernel(开了“小门”)。而在 ASL 许可证中规定,用户可以随意使用源码而不必开源,所以建立在 Android 之上的硬件驱动和应用程序都可以闭源。这种封闭性得到了更多硬件厂商的支持。
  Google 的这种行为吸引了更多厂商和软件开发商的加入,但同时也是宣布了放弃构建一款真正开源的手机系统的机会。也正是因为这个原因,2010 年 2 月,Android 代码从 Linux Kernel 代码库中删除。

  这就是为什么说 Android 不是一个真正开源的操作系统。

  题外话: 事实上,Google 做的远不止如此,Android 其实是开源的壳,闭源的核。2010 年之后,Google 逐渐将 Android 分割成两部分。一部分是 Android 开放源代码项目(AOSP),它提供了 Android 的基础框架代码,所有厂商可以免费获取上面的开源代码。另外一部分则是 Google 移动应用服务(GMS),包括 了「Google 三件套」在内一系列应用和 API,而 GMS 是闭源的。
  如果手机厂商想要使用 GMS ,除了要通过 Google 的对硬件的兼容性测试,每台手机还要支付给 Google 0.75 美元的授权费。问题来了,厂商们凭什么放着免费开源的 AOSP 不用,而要接受诸多限制的 GMS 呢?
  对此,Google 给出的答案是,让 AOSP 越来越不好用,让厂商们越来越离不开 GMS 。
  虽然 AOSP 不属于 Google 一家公司,谁也不能将一套开源系统下架,但 Google 却可以停止 AOSP 中大量应用和 API 的更新,将升级版本转移到闭源的 GMS 中。从搜索、音乐到短信等应用,Google 逐渐将 AOSP 里的应用和 API 一点点掏空,用 GMS 中的应用和 API 来取代,AOSP 里旧版的的应用和 API 不再升级,经过几个版本后逐渐就形同鸡肋了。这样一来,尽管 AOSP 依旧开源 ,但只剩一个底层的外壳,有竞争力的核心部分都在 GMS 中,Google 也能以垄断的功能牢牢控制住 Android ,并保持对硬件厂商和开发者的影响力。

  Android 的本质: 本来大家以为 Android 是手机界的 Linux,但其实它是一个可以让所有人看代码、可以让部分人修改分支代码、只有 Google 自己才能修改主线代码的 Windows。

  也正是如此,美国对华为制裁之后,华为的手机无法再使用 Android 系统,因为不能再使用 GMS 的 Android 不是完整的 Android。这意味着产品竞争力的下降。就像如果 iPhone 如果无法使用微信,在中国的销量一定会大受影响。在欧美国家,如果手机不支持 YouTube、Gmail、Google maps 等应用,大多数消费者同样无法接受。因此,去年美国宣布华为禁用 Google 的 GMS 服务后,华为手机在海外的销量就一直下跌。

2. 强大的开发团队支持

  Android 的研发队伍阵容强大,包括摩托罗拉、Google、HTC(宏达电子)、PHILIPS、L-Mobile、高通、魅族、三星、LG以及中国移动在内的 34 家企业。

3. 实行奖励机制

  Android 为了提高程序员的开发积极性,不但为其提供了一流硬件的设置,还提供了一流的软件服务。并且采用了振奋人心的奖励机制,定期召开比赛,创意和应用夺魁者将会得到重奖。

驱动

  驱动是硬件和软件之间的媒介和载体,是计算机等电子产品运行的根本

  其实在 Windows 系统中,在安装主板、显卡、声卡、网卡等硬件时都对应一套完整的驱动程序。

  驱动程序就是添加到操作系统中的一段代码,通常这段代码比较简短,但是在代码中包含了和硬件相关的设备信息。有了这些信息,计算机才可以和设备进行通信,从而使用这些硬件。驱动程序是硬件厂商根据操作系统编写的配置文件,没有驱动程序,计算机中的硬件就无法工作。

Android 架构

  Android 作为移动设备的平台,其软件层次结构包括操作系统、中间件和应用程序。其软件层次结构自顶向下分为以下4层。
  (1) 应用程序(Application)
  (2) 应用程序框架(Application Framework)
  (3) 各种库、Android 运行环境
  (4) 操作系统层(包括 Kernel 和 HAL 层)

Application

  Android 的应用层主要是用户界面(User Interface),通常以 Java 程序编写,其中还包含各种资源文件(放置在 res 目录下)。Java 程序及相关资源经过编译后,生成一个 APK 包(我们俗称的安装包)。
  我们 App 中的各种界面就是在这一层出现的,应用层可以调用框架层的 API 实现各种功能。

Application Framework

  框架层为应用层的开发者提供 API,本层提供的首先包括了 UI 程序中所需要的各种控件,例如 View(视图组件)、Activity(活动)、Service(服务)、Broadcast Intent Receiver(广播)、Content Provider(内容提供者) 等。

各种库和 Android 运行环境

  本层次对应一般嵌入式系统,相当于中间件层次。Android 的本层次分为两个部分,一个是各种库,另一个是 Android 运行环境,绝大多数都是 C++ 实现。

操作系统层

  本层包括 HAL 层和 Kernel 层。Kernel 层主要是 Linux Kernel,而 HAL 层就是前面说的 “userspace” (●’◡’●),一些硬件厂家的驱动程序就是放在 HAL 层里。

Android 系统简介相关推荐

  1. 【译】Android系统简介—— Activity

    续上一篇,继续介绍Android系统.上一篇: [译]Android系统简介 本文主要介绍构建Android应用的一些主要概念: Activity Activity是应用程序中一个单独的有UI的页面( ...

  2. Android系统简介(上、中、下):历史渊源

    上个月,看到微信的一系列文章,讲到Linux的鼻祖-李纳斯的传记<Just for Fun>, 其人神乎其能, 其人生过程非常有趣,值得每个程序员细细品味. 而实际上,对我而已,虽然做软件 ...

  3. Android系统简介

    一.Android系统的前世今生 目前全球智能手机最主要的两大阵营是Android和IOS,Android和IOS是移动操作系统的名称,它们背后的公司是谷歌和苹果,所以有时候也叫做谷歌系统和苹果系统. ...

  4. 【Arch】Android系统简介

    文章目录 0.Google IO 1.Android系统发展历程 2.Android系统特点 3.Android系统框架 0.Google IO 下面是Google IO的logo(Innovatio ...

  5. mDNS移植Android系统简介

    最近有个客户,需要在他的机顶盒上支持Airplay, 其机顶盒系统是Android4.0.4, 此版本系统没有mDNS(需要Android4.1+)及MediaCodec接口 (需要Android4. ...

  6. Android系统基础与常用布局

    Android学习笔记 一.Android系统简介 1.1 体系架构 采用了分层的架构,如下图 1.1.2 Linux内核 ​ Android 平台的基础是 Linux 内核.例如,Android R ...

  7. android mdns开发实例,Android开发_mDNS移植Android系统方案介绍

    mDNS移植Android系统简介.最近有个客户,需要在他的机顶盒上支持Airplay, 其机顶盒系统是Android4.0.4, 此版本系统没有mDNS(需要Android4.1+)及MediaCo ...

  8. 【Android 系统开发】 Android 系统启动流程简介

    作者 : 万境绝尘 (octopus_truth@163.com) 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/3889548 ...

  9. Android 系统(4)---Android HAL层与Linux Kernel层驱动开发简介

    Android HAL层与Linux Kernel层驱动开发简介 近日稍微对Android中的驱动开发做了一些简要的了解,稍稍理清了一下Android驱动开发的套路,总结一下笔记. HAL:Hardw ...

最新文章

  1. STC12C5A60S2 内部AD+1602显示
  2. 【建模必备】遗传算法应用举例(多元单峰值函数的优化实例)
  3. java删除不,Java文件不能删除,该怎么解决
  4. Map集合HashMap TreeMap的输出方法
  5. Swagger使用————接口参数注解的使用缺陷
  6. python如何移动图片_Pygame的图像移动|python基础教程|python入门|python教程
  7. git 命令 —— checkout 与分支管理
  8. OpenGL基础6:着色器
  9. Hexo-Next主题搭建个人博客最新配置教程!
  10. Openstack日常运维
  11. 阿里云建站云企业官网标准版/高级版/尊贵版功能对比及选择方法
  12. 带张光盘去装机(转)
  13. 查看主机oracle 版本,CentOS下查看Oracle数据库版本
  14. Graphics的平移与旋转
  15. 音视频协议-RTP协议打包
  16. 2001年考研英语真题
  17. 面向对象(static关键字)
  18. 品酒论三国之一(创业时代的第二堂必修课:自助者天助)
  19. 使用cdn来加速字体文件在前端的加载速度,并监听字体是否加载完成
  20. mysql gbk编码 转utf8_MySQLGBKUTF-8 编码转换

热门文章

  1. springboot+vue+java婚纱摄影预约管理系统ssm
  2. 小程序支付管理-新版支付对接流程
  3. day38 mycql 初识概念,库(增删改查),表(增删改)以及表字段(增删改查),插入更新操作...
  4. uniapp打包时未添加camera模块,请参考http://ask.dcloud.net.cn/article/283
  5. php基础知识速记,php基础速记
  6. JS精度问题 乘以10的N次方出现精度问题
  7. 永磁同步电机恒压频比(V/F)开环控制系统Matlab/Simulink仿真分析及代码生成到工程实现(二)
  8. 字节、PDD、PayPal 的“大小周”,分别是怎样的?
  9. java volatile内存屏障_从汇编看Volatile的内存屏障
  10. 四边形不等式技巧(上)