Android架构基本知识

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Android架构基本知识

1.2 Android的系统架构

系统构架图中可以看到从上到依次是应用层(Applications)、应用框架层(Application Framework)、系统运行库层(Lib和Runtime)、 Linux内核层(linux kernel)

1.2.1 Android内核

Linux 内核版本2.6

位于硬件和软件堆之间的抽象层

核心服务:安全机制、内存管理、进程管理、网络、硬件驱动。

Android依赖Linux内核2.6来提供核心服务,比如进程管理、网络协议栈、硬件驱动。在这里,Linux内核作为硬件层和系统软件栈层之间的一个抽象层。这个操作系统并非类GNU/Linux的,因为其系统库,系统初始化和编程接口都和标准的Linux系统是有所不同的。

从Google目前release的Linux系统来看,其没有虚拟内存文件系统,系统所用的是yaffs2文件系统,具体的映像也都位于SDK安装目录下。通过emulator -console命令,我们可以在host 终端下得到一个简单的可以控制Android的shell,这个系统包含了一个Toolbox,提供一些基本的命令工具,集中在/sbin,/system/sbin,/system/bin中,但是很简陋,命令种类也很少。若有时间和必要我会作个介绍。

既然采用的linux系统,就有必要介绍一下主要驱动(如图中所示):

显示驱动(Display Driver)

键盘驱动(KeyBoard Driver)

Flash内存驱动(Flash Memory Driver)

照相机驱动(Camera Driver)

音频驱动(Audio Driver)

蓝牙驱动(Bluetooth Driver)

Wifi驱动

Binder IPC驱动

Power Management (电源管理)等等。

1.2.2程序库和运行库(Lib和Runtime)

程序库(lib):

Android 包含一些C/C++库、媒体库、数据库引擎库等等,,这些库能被Android系统中不同的组件使用,通过 Android 应用程序框架为开发者提供服务,以下是包括的一些核心库:

· 系统 C 库 - C语言标准库,系统最底层的库,C库通过Linux系统来调用,一个从 BSD 继承来的标准 C 系统函数库( libc ),它是专门为基于 embedded linux 的设备定制的。

· 媒体库 - 基于 PacketVideo OpenCORE;该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。编码格式包括MPEG4, H.264, MP3, AAC, AMR, JPG, PNG 。

· Surface Manager - 对显示子系统的管理,并且为多个应用程序提供了2D和3D图层的无缝融合。

· LibWebCore- 一个最新的web浏览器引擎用,支持Android浏览器和一个可嵌入的web视图。· SGL - 底层的2D图形引擎

· 3D libraries - 基于OpenGL ES 1.0 APIs实现;该库可以使用硬件 3D加速(如果可用)或者使用高度优化的3D软加速。

· Fr eeType -位图(bitmap)和矢量(vector)字体显示。

·WebKit/LibWebCore -一个最新的web浏览器引擎,支持Android浏览器和一个可嵌入的web 视图。

· SQLite - 一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。

Google使用Apache的Harmony类库,Harmony某些方面速度快于Sun的VM。Runtime在Dalvik Java VM上,Dalvik采用简练、高效的byte code格式运行,它能够在低资耗和没有应用相互干扰的情况下并行执行多个应用。

Android 运行库(Runtime):

Android 包括了一个核心库(Core Libraries),该核心库提供了JAVA编程语言核心库的大多数功能。

Dalvik虚拟机(DVM,Dalvik Virtual Machine)是一种寄存器形态的虚拟机。Google 在开发时就已经设想用最少的内存来执行,以及同时可执行多个VM为前提。

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

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

●核心库提供的Java 功能

●Dalvik 虚拟机依赖于Linux 内核,例如线程或底层内存管理

●设备可以运行多个Dalvik 虚拟机,每一个Android 应用程序在它自己的Dalvik VM 实

例中运行

●VM 执行优化的Dalvik 可执行文件(.dex)

●Dx-工具把编译过的Java 文件转换为dex 文件

我们用java语言完成Android应用设计并且发布应用后,每一个Android应用程序都在它自己的进程中运行,在底层都对应一个独立的Dalvik虚拟机实例

Dalvik相关(Dalvik和JVM的比较)

D alvik虚拟机依赖于linux内核的一些功能,比如线程机制和底层内存管理机制前面已经有介绍内核的相关知识。

虽然代码在虚拟机的解释下运行,但是Dalvik虚拟机并不是一个java虚拟机,因为Dalvik 虚拟机并不是按照java虚拟机的规范来的,二者并不兼容。他们有两个明显不同:Dalvik和JVM的比较:

基于寄存器

Dalvik和标准Java虚拟机(JVM)之间的首要差别之一,就是Dalvik基于寄存器,而JVM 基于栈。相对于基于堆栈的JAVA虚拟机,Android中基于寄存器的虚拟机虽然在硬件、通用性上差一些,但是它在代码执行效率上却更胜一筹。也就是说Dalvik虚拟机比JAVA虚拟机更快一些。

专有的dex文件格式

需要注意的是,Dalvik只执行.dex的可执行文件,java程序同样需要通过编译,最后还要通过SDK中的dx工具转化成.dex格式才能正常在虚拟机上执行。

Java虚拟机(JVM)运行的是字节码,而Dalvik虚拟机(DVM)运行的则是其专有的文件格式为Dex(Dalvik executable)的文件;在Java SE程序中,java类会被编译成一个或者多个字节码文件(.class)然后打包到jar文件,而后java虚拟机会从相应的class文件和jar文件中获取相应的字节码;Android应用虽然也用Java编程,但是在编译成class文件后,还会通过一个工具(sdk中的dx)将所有的class转化成一个dex文件,而后Dalvik虚拟机会从其中读取指令和数据。

Dalvik虚拟机非常适合做移动终端使用。

相关文档
最新文档