从图中可以看出Android分为4层,从高到低分别是应用层、应用框架层、系统运行库层和Linux内核层。下面将对这4层进行简要的分析和介绍。

 

1.      应用层

应用是Java语言编写的运行在虚拟机上的程序,如上图中最上层部分所示。

我们要开发的程序就是运行在此层。

2.      应用框架层

此层是Google提供的API框架,我们可以使用这些框架来开发自己的应用。

我们可以理解为Windows API。

Android提供如下组件。

²       视图系统:包括列表(List)、网格(Grid)、文本框(Text Box)、按钮(Button),以及可以嵌入的Web浏览器。

²       内容提供器(Content Providers):提供类似Windows IPC功能。

²       资源管理器(Resource Manager):提供非代码资源的访问,如本地字符串、图形和布局文件(Layout file)。

²       通知管理器(Notification Manager):应用可以在状态栏中显示自定义的提示信息。相当于Windows中的Message服务。

²       活动管理器(Activity Manager):用来管理应用程序生命周期并提供常用的导航退回功能。

²       窗口管理器(Window Manager):管理所有的窗口程序。类似Windows的explorer功能。

²       包管理器(Package Manager):Android系统内的程序管理

3.      系统运行库(C/C++库以及Android运行库)层

²       Bionic系统C库:C语言标准库,系统最底层的库,C库通过Linux系统来调用。

²       多媒体库(MediaFramework):Android系统多媒体库,基于PacketVideo OpenCORE,该库支持多种常见格式的音频、视频的回放和录制,以及图片,比如MPEG4、MP3、AAC、AMR、JPG、PNG等。

²       SGL:2D图形引擎库。

²       SSL:位于TCP/IP协议与各种应用层协议之间,为数据通信提供支持。

²       OpenGL ES 1.0:3D效果的支持。

²       SQLite:嵌入式的关系数据库。

²       Webkit:Web浏览器引擎。

²       FreeType:位图(bitmap)及矢量(vector)。

 

每个Java程序都运行在Dalvik虚拟机之上。

很多人认为Dalvik虚拟机是一个Java虚拟机,但是这种说法并不准确,两者并不兼容。

他们有两个明显的不同:Java虚拟机运行的是Java字节码,而Dalvik虚拟机运行的则是其专有的文件格式为dex(Dalvik Executable)的文件。在Java SE程序中的Java类会被编译成一个或者多个字节码文件(.class)然后打包到jar文件,而后Java虚拟机会从相应得class文件和jar文件中获取相应的字节码;Android是在编译成class文件后,还会通过一个工具(dx)将应用所有的class文件转换成一个dex文件,而后Dalvik虚拟机会从其中读取指令和数据。

Dalvik虚拟机有如下几个主要特征:

(1)      专有的dex文件格式。

为什么弃用已有的字节码文件(.class文件)而采用新的格式呢?原因如下:

Ø        每个应用中会定义很多类,编译完成后即会有很多相应的class文件,class文件中会有大量冗余信息,而dex文件格式会把所有的class文件内容整合到一个文件中。这样,除了减少整体的文件尺寸和I/O操作外,也提高了类的查找速度。

Ø        增加了对新的操作码的支持。

Ø        文件结构尽量简洁,使用等长的指令,借以提高解析速度。

Ø        尽量扩大只读结构的大小,借以提高跨进程的数据共享。

(2)      dex的优化。

Ø        调整所有字段的字节序(LITTLE_ENDIAN)和对齐结构中的每一个域。

Ø        验证DEX文件中的所有类。

Ø        对一些特定的类和方法里的操作码进行优化。

(3)      基于寄存器。

相对于基于堆栈实现的虚拟机,基于寄存器实现的虚拟机在代码的执行效率上更胜一筹。

(4)      一个应用,一个虚拟机实例,一个进程。

 

4.      Linux内核层

Android是经过量身裁减的、基于Linux2.6内核的移动设备的操作系统。

   其主要的驱动如下:

Ø        显示驱动(Display Driver):基于Linux的帧缓冲(FrameBuffer)驱动。

Ø        键盘驱动(KeyBoard Driver):作为输入设备的键盘驱动。

Ø        Flash内存驱动(Flash Memory Driver):基于MTD的Flash驱动程序。

Ø        照相机驱动(Camera Driver):常用的基于Linux的v412(Video for Linux)驱动。

Ø        音频驱动(Audio Driver):常用的基于ALSA(AdvancedLinux Sound Architecture)的高级Linux声音体系驱动。

Ø        蓝牙驱动(Bluetooch Driver):基于IEEE 802.15.1标准的无线传输技术。

Ø        WiFi驱动:基于IEEE 802.11标准的驱动程序。

Ø        Binder IPC驱动:Andriod的一个特殊的驱动程序,具有独立的设备节点,提供进程间通信的功能。

Ø        Power Management(电源管理):比如电池电量等。

 

 

 

1.1.1 Android应用程序框架

ü        android.app

提供高层的程序模型和基本的运行环境。

ü        android.content

包含对各种设备上的数据进行访问和发布。

ü        android.database

通过内容提供者浏览和操作数据库

ü        android.graphics

底层的图形库,包含画布、颜色过滤、点、矩形,可以将它们直接绘制到屏幕上。

ü        android.location

定位和相关服务的类

ü        android.media

提供一些类管理多种音频、视频的媒体接口。

ü        android.net

提供帮助网络访问的类,超过通常的java.net.*接口

ü        android.os

提供了系统服务、消息传输和IPC机制。

ü        android.opengl

提供OpenGL的工具。

ü        android.provider

提供访问Android内容提供者的类。

ü        android.telephony

提供与拨打电话相关的API交互。

ü        android.view

提供基础的用户界面接口框架。

ü        android.util

涉及工具性的方法,例如时间日期的操作。

ü        android.webkit

默认浏览器操作接口。

ü        android.widget

包含各种UI元素(大部分是可见的)在应用程序的布局中使用。

 

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐