Android系统架构

一、Android历史

      2003 年 Andy Rubin 创办 Android 公司

      2005 年 Google 收购 Android 公司

      2007 年成立开放手持设备联盟(OHA)

      2008 年发布第一款手持设备 HTC Dream(G1 & 1.0)

      2010 年发布 Nexus 系列设备

      2011 年发布 4.0 及 Android Design 规范

      2012 年发布 4.2 及 Google Glass

      2013 年发布 4.4 及 ART 预览

      2014 年发布 5.0 及 Material Design

      2014 年发布 Android Wear、TV、Auto 平台

版本代号和 API 级别

 

      Android 是Google开发的基于Linux平台的开源手机操作系统。它包括操作系统、用户界面和应用程序 —— 移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专有权障碍。Android采用WebKit浏览器引擎,具备触摸屏、高级图形显示和上网功能,用户能够在手机上查看电子邮件、搜索网址和观看视频节目等,比iPhone等其他手机更强调搜索功能,界面更强大,可以说是一种融入全部Web应用的单一平台。

二、系统架构

 

      Android 的系统架构和其操作系统一样,采用了分层的架构。从上面的架构图看,Android分为5层,从高层到低层分别是application应用程序层、applicationframework应用程序框架层、native libraries原生,Android 运行时与 HAL,linux核心层。但在多数情况下,会将libraries运行库和Android 运行时(ART)合并为一个层级,于是出现了下面这张Android系统架构图:

 

1、application应用程序层

      该层提供一些核心应用程序包,例如电子邮件、短信、日历、地图、浏览器和联系人管理等。同时,开发者可以利用Java语言设计和编写属于自己的应用程序,而这些程序与那些核心应用程序彼此独立

应用层的几个特点:

(1)设备上运行的所有程序(App)

(2)系统应用、第三方应用(应用、游戏)

(3)使用 Java 开发

(4)使用 C/C++ 开发功能类库(图形、算法)

(5)在应用框架(framework)之上

2、应用框架层(Application Framework)

      应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性限制)。帮助程序员快速的开发程序,并且该应用程序重用机制也使用户可以方便的替换程序组件。

      应用程序框架层提供开发Android应用程序所需的一系列类库框架,使开发人员可以进行快速的应用程序开发,方便重用组件,也可以通过继承实现个性化的扩展。具体包括的模块如表:

 

3、native libraries原生库(C & C++)

(1)系统原生类库

      系统类库大部分由C/C++编写,所提供的功能通过Android应用程序框架为开发者所使用,如资源文件管理、基础算法库

(2)第三方类库

      主要的第三方类库及说明如下表:

 

      第三方类库,极大的加快了Android应用的开发周期。

      除上表列举的主要系统类库之外,Android NDK(Native Development Kit),即Android原生库,也十分重要。NDK为开发者提供了直接使用Android系统资源,并采用C或C++语言编写程序的接口。因此,第三方应用程序可以不依赖于Dalvik虚拟机进行开发。实际上,NDK提供了一系列从C或C++生成原生代码所需要的工具,为开发者快速开发C或C++的动态库提供方便,并能自动将生成的动态库和java应用程序一起打包成应用程序包文件,即.apk安装包

      注意使用原生库无法访问应用框架层API,兼容性可能无法保障。而且从安全性角度考虑,Android原生库用非类型安全的程序语言C,C++编写,更容易产生安全漏洞,原生库的缺陷(bug)也可能更容易直接影响应用程序的安全性。

4、Android 运行时与 HAL

      主要包括:Java 核心库、Dalvik VM(5.0 之前)、ART runtime(5.0 正式启用)、HAL(硬件抽象层)。

(1)Java 核心库

      核心库提供了Java5 se API的多数功能,并提供Android的核心API,如android.os,android.net,android.media等。该核心库提供了JAVA编程语言核心库的大多数功能。

(2)Dalvik VM(5.0 之前)

      Dalvik VM是基于寄存器的java虚拟机,是在2010年5月21日,Google公司发布的Android2.2版本中正式使用,一直沿用到Android5.0版本。借助新的Dalvik JIT编译器(Just In Time,即时编译器),CPU密集型应用的速度比Android2.1快2-5倍,Android2.2还改进了App可以安装在SD卡(外部存储)上。Dalvik虚拟机主要是完成对生命周期的管理、堆栈的管理、线程的管理、安全和异常的管理以及垃圾回收等重要功能。

      Dalvik VM前身基于apache的java虚拟机,并被改进以适应低内存,低处理器速度的移动设备环境。Dalvik VM依赖于Linux内核,实现进程隔离与线程调试管理,安全和异常管理,垃圾回收等重要功能。

      本质而言,Dalvik VM并非传统意义上的java虚拟机(JVM)。Dalvik VM不仅不按照Java虚拟机的规范来实现,而且两者不兼容。

      每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik被设计成一个设备可以同时高效地运行多个虚拟系统。 Dalvik虚拟机执行(.dex)的Dalvik可执行文件,该格式文件针对小内存使用做了优化。同时虚拟机是基于寄存器的,所有的类都经由JAVA编译器编译,然后通过SDK中 的 "dx" 工具转化成.dex格式由虚拟机执行。

      Dalvik虚拟机依赖于linux内核的一些功能,比如线程机制和底层内存管理机制。

(3)ART runtime(5.0 正式启用)

      虽然Dalvik VM在Android2.2版本是一次飞跃,但Dalvik虚拟机从DEX(Dalvik  Executable)格式的文件中读取指令与数据,进行解释运行,JIT 在运行时将字节码翻译为本地机器指令,运行一次就要编译一次,性能还是很低。于是Android4.4版本支持了ART模式,并在Android5.0正式将编译模式由ART取代Dalvik VM成为默认选项。

      ART 采用预编译AOT(ahead-of-time)技术,在应用程序安装时,将程序代码一次性转化为机器语言,省去了程序在运行时每次编译的时间,加快了程序运行速度,使得电量消耗更少,系统更加流畅。

(4)HAL(硬件抽象层)

      鉴于许多硬件设备厂商不希望公开其设备驱动的源代码,如果能将android的应用框架层与linux系统内核的设备驱动隔离,使应用程序框架的开发尽量独立于具体的驱动程序,则android将减少对Linux内核的依赖。HAL由此而生,它是对Linux内核驱动程序进行的封装,将硬件抽象化,屏蔽掉了底层的实现细节。HAL规定了一套应用层对硬件层读写和配置的统一接口,本质上就是将硬件的驱动分为用户空间和内核空间两个层面;Linux内核驱动程序运行于内核空间,硬件抽象层运行于用户空间。

       HAL(Hardware Abstract Layer硬件抽象层)是Google因应厂商「希望不公开源码」的要求下,所推出的新观念。虽然 HAL 现在的「抽象程度」还不足,现阶段实作还不是全面符合 HAL的架构规划

      HAL设备驱动抽象使得应用程序和驱动程序之间很明显地区分开来。 驱动抽象促进了应用程序代码的可重用性,应用程序和底层硬件的通信依靠统一的接口函数,底层硬件的改动对应用程序的代码没有影响。而且,HAL标准使得和已有外设相匹配的新外设的驱动程序编写起来更加简单。

Dalvik VM    vs    ART比较
    Dalvik VM

        (1)Dalvik VM从DEX(Dalvik Executable)格式的文件中读取 指令与数据,进行解释运行。DEX文件由传统的,编译产生的 CLASS文件,经dx工具软件处理后生成。dexopt 把 dex 优化 为 odex(字节码);

        (2)JIT 在运行时将字节码翻译为本地机器指令;

        (3)运行前编译,性能低。

    ART rumtime

       (1)dex2oat 把 dex 翻译为 oat(机器指令);

       (2)OAT 在程序安装时执行;

       (3)程序安装后所占存储空间略大。

5、Linux内核层

      Android以Linux操作系统内核为基础,借助Linux内核服务实现硬件设备驱动,进程和内存管理,网络协议栈,电源管理,无线通信、设备驱动、文件系统、Binder (IPC) 驱动等核心功能。Android4.0版本之前基于Linux2.6系列内核,4.0及之后的版本使用更新的Linux3.X内核,并且两个开源项目开始有了互通。Linux3.3内核中正式包括一些Android代码,可以直接引导进入Android。Linux3.4将会增添电源管理等更多功能,以增加与Android的硬件兼容性,使Android在更多设备上得到支持。

      Android内核 对Linux内核进行了增强,增加了一些面向移动计算的特有功能。例如,低内存管理器LMK(Low Memory Keller),匿名共享内存(Ashmem),以及轻量级的进程间通信Binder机制等。这些内核的增强使Android在继承Linux内核安全机制的同时,进一步提升了内存管理,进程间通信等方面的安全性。下表列举了Android内核的主要驱动模块:

 


 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值