• Android系统介绍
        • Linux内核层
        • 系统运行库层
          • 提供Android系统特性的函数库
          • Android运行时库
            • Android虚拟机与Java虚拟机
        • 应用框架层
        • 应用层

Android系统介绍

Android系统的底层建立在Linux系统之上,该平台由Linux内核层、系统运行库层、应用框架层及应用层四层组成,它采用一种被称为软件叠层(Software Stack)的方式进行构建。这各软件叠层结构使得层与层之间相互分离,明确各层的分工。这种分工保证了层与层之间的低耦合,当下层的层内或层下发生变化时,上层应用程序无须任何改变。以下就对不同层分别加以介绍:


Linux内核层

Android系统建立在Linux 2.6之上,这一层为Android设备的各种硬件提供了底层的驱动(Linux内核提供了安全性、内存管理、进程管理、网络协议和驱动模型等核心系统服务)。

Linux内核也是系统硬件和软件叠层之间的抽象层


系统运行库层

这一层通过一些C/C++库来为Android系统提供了主要的特性支持。此层中还有Android运行时库,它主要提供一些核心库,来允许开发者使用Java语言来编写Android应用。因此可以将此层看作由提供Android系统特性的函数库Android运行时库两部分组成,以下就对其进行分别介绍:

提供Android系统特性的函数库

Android包含一组C/C++库,这些库为Android系统提供了主要的特性支持。一般说来,Android应用开发者不能直接调用这套C/C++库集,但可以通过其上的应用框架层来调用这些库。

常用的一些核心库有:系统C库、媒体库、Surface Manager、LibWebCore、SGL、3D libraries、FreeType及SQLite等。


Android运行时库

Android运行时库由Android核心库集Dalvik虚拟机两部分组成。Android核心库集,能够允许开发者使用Java语言来编写Android应用;而Dalvik虚拟机则使得每一个Android应用都能运行在独立的进程中,并且拥有一个自己的Dalvik虚拟机实例

Android虚拟机与Java虚拟机
  1. Dalvik并未遵守JVM规范,两者也不兼容。
  2. JVM虚拟机运行的是Java字节码(通常是.class文件),但Dalvik运行的是其专有的dex(Dalvik Executable)文件。
  3. JVM直接从.class文件或JAR包中加载字节码然后运行,而Dalvik则需要通过DX工具将应用程序的所有.class文件编译成.dex文件,然后再运行该.dex文件。

Dalvik虚拟机依赖于Linux内核提供的核心功能,如线程和底层内存管理。Dalvik虚拟机非常适合在移动终端上使用,相对于在PC或服务器上运行的虚拟机而言,Dalvik虚拟机不需要很快的CPU计算速度和大量的内存空间,它主要有如下两个特点:

  1. 运行专有的.dex文件。专有的.dex文件减少了.class文件中的冗余信息,而且会把所有.class文件整合到一个文件中,从而提高运行性能;而且DX工具还会对.dex文件进行一些性能的优化。
  2. 基于寄存器实现。大多数虚拟机包括JVM都是基于栈的,而Dalvik虚拟机则是基于寄存器的。一般来说,基于寄存器的虚拟机具有更好的性能表现,但在硬件通用上略差

应用框架层

Android应用程序框架层提供了大量的API供开发者使用,在开发Android应用程序时,就是面向底层的应用程序框架进行的

应用程序框架层除可作为应用程序开发的基础之外,也是软件复用的重要手段任何一个应用程序都可发布它的功能模块——只要发布时遵守了框架的约定,那么其它应用程序也可使用这个功能模块。


应用层

所有安装在手机上的应用程序都属于这一层。

Android系统将会包含系列的核心应用程序,这些程序包括电子邮件客户端、SMS程序、日历、地图、浏览器、联系人等。这些应用程序都是使用Java编写的。


Android平台架构简介_第1张图片


参考《疯狂Android讲义》《第一行代码——Android》

更多相关文章

  1. Android输入系统解析及Native层模拟按键方案
  2. Android 应用程序四大组件
  3. Android应用程序的六个组成部分
  4. 实践中探索Android智能手机系统------ROM分区
  5. Android 判断应用程序安装位置
  6. Android 应用程序中使用 Internet 数据

随机推荐

  1. 关于golang的make
  2. Golang如何对excel进行处理
  3. 介绍Golang序列化和反序列化
  4. 记一次因为共享变量的犯错误
  5. 关于Golang切片的三种简单使用方式及区别
  6. 国内下载 go get golang.org/x 包失败的
  7. 关于Golang panic用法详解
  8. go-carbon1.2.0发布了!完善优化对ORM的多
  9. 你知道golang中Context的使用场景有哪些
  10. 关于 Golang 字符串 格式化