【精华】Android应用程序框架分析

1、Android系统架构

从上到下依次是APPLICATIONs(应用程序层)、APPLICATION FRAMEWORK(应用程序框架层)、LIBRARIES(ANDROID RUNTIME)(库及运行环境),以及LINUX KERNAL(Linux 内核)


1、 Linux 内核版本2.6
2、位于硬件和软件堆之间的抽象层
3、核心服务:安全机制、内存管理、进程管理、网络、硬件驱动。

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

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

       目前Android 的程序安装模式是靠Eclipse 自动进行的,通过对底层的分析可知,大致步骤就是在/data/app 和data/data 下存放android 底层和普通内核没有什么大的区别,我们可以将其作为一个Linux 来进行开发和hacking。




1、 C/C++库:被各种Android 组件使用
2、通过应用程序框架开发者可以使用其功能
3、 包括:
(1)媒体库:MPEG4 H.264 MP3 JPG PNG .....
(2)WebKit/LibWebCore:Web 浏览引擎
(3)SQLite 关系数据库引擎
(4)2D,3D 图形库、引擎


     丰富的类库支持:2D 和3D 图像库OpenGL ES、数据库SQLite、对象数据库db4o 类库、媒体库、基于Linux底层系统C 库等等,让应用开发更简单多样。Google 使用Apache 的Harmony 类库,Harmony 某些方面速度快于Sun 的VM。Runtime 在Dalvik Java VM 上,Dalvik 采用简练、高效的byte code 格式运行,它能够在低资耗和没有应用相互干扰的情况下并行执行多个应用。


运行时环境

1、 核心库提供的Java 功能
2、Dalvik 虚拟机依赖于Linux 内核,例如线程或底层内存管理
3、设备可以运行多个Dalvik 虚拟机,每一个Android 应用程序在它自己的Dalvik VM 实例中运行
4、VM 执行优化的Dalvik 可执行文件(.dex)
5、Dx-工具把编译过的Java 文件转换为dex 文件




1、核心应用,例如联系人,电子邮件,电话,浏览器,日历,地图, ...
2、 充分访问所有核心应用框架API
3、 简化组件的重用
4、用Java 编写应用程序


支持的功能

+ Application framework: 可重用的和可替换的组件部分,在这个层面上,所有的软件都是平等的。
+ Dalvik virtul machine: 一个基于Linux 的虚拟机。
+ Integrated browser: 一个基于开源的WebKit 引擎的浏览器,在应用程序层。
+ Optimized graphics: 包含一个自定义的2D 图形库和基于OpenGL ES 1.0 标准的3D 实现。
+ SQLite: 数据库
+ Media support: 通用的音频,视频和对各种图片格式的支持(MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)
+ GSM Telephony: GSM 移动网络, 硬件支持。
+ Bluetooth, EDGE, 3G, and WiFi: 都依赖于硬件支持。
+ Camera, GPS, compass, and accelerometer: 都依赖于硬件支持。
+ Rich development environment: 包含一套完整的开发工具集,方便跟踪调试,内存检测和性能测试,而且
提供了


Activity Manager(活动管理器)——管理系统中的Activity,比如Android生命周期,activity task等

Window Manager(窗口管理器)——管理所有窗口程序

Content Provider(内容提供者)——用于不同程序之前的数据分享等

View System(视图系统)——构建应用程序的基本组件

Notification Manager(通告管理器)——在状态栏显示自定义的提示信息

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

Telephony Manager(电话管理器)——管理访问移动设备上的电话服务

Resource Manager(资源管理器)——管理应用程序中的使用本地资源,如图片,布局文件,颜色文件等

Location Manager(位置管理器)——提供位置服务

XMMP Service(XMPP服务)——提供Google Talk服务


2、Android应用程序工程结构分析




◆src:存放java源代码。
◆gen:存放编译器自动生成的java代码,这个目录下的文件是系统自动维护的。
◆assets: 存放在这个目录下的文件,无论是mp3还是图片,都会被打包到发布包中。
◆res:资源文件目录,添加到这个目录下的文件都会在gen下的R.ava文件中显示出来;如果res下存放的资源在应用中没有使用到,那么在gen下的R.java的文件中就不会显示,那么打包的时候就不会将这部分资源打包,减少了应用的发布文件大小。
◆drawable:存放图片文件,注意图片名称必须是[a-z0-9_.]组成;drawable目录下不能分子级目录,只能通过命名方法来加以区分。
◆layout:存放与UI相关的布局文件,都是xml文件。
◆raw:直接复制到设备中的任意文件,不会被编译,可以放数据库文件。
◆values: 存放字符串,颜色,数组等常量数据。可以任意命名,但是通常命名:color.xml、strings.xml、array.xml、styles.xml、dimens.xml(定义尺寸值:dimension value)
◆xml:任意的XML文件,在运行时可以通过调用Resources.getXML()读取。



3、Android中的库

        Android.util 核心使用包(看名字就知道啦),包括了低级类,例如,专用的容器、字符串格式化和XML解析程序。
        Android.os  操作系统包,提供了基本操作系统服务的访问时间,例如,消息传递、进程间通信、始终函数和调试。
        Android.graphic 图形API提供了支持画布、颜色和绘画原语的低级图行类,让你可以在画布上画画。
        Android.text 用来显示和解析文本的文本处理工具。
        Android.database 当使用数据库的时候,提供处理游标(cursor)所要求的低级类。
        Android.content 内容API通过处理资源、内容提供器和包的服务,来管理数据访问和发布。
        Android.view  View是核心用户界面类。所有的用户界面元素都是使用一系列View来构造的,用来提供交互组件。
        Android.widget  构建在View包的基础上,Widget类是已经创建好的用户界面元素,可以直接在应用程序中使用,他们包含列表、按键和布局。
        Com.google.android.maps  一个高级API,提供了对本地地图控件的访问,可以再应用程序中使用这些控件,它包括MapView控件以及用来对嵌入的地图进行注释和控制的Overlay和MapController类。
        Android.app 一个提供了对应用程序模型进行访问的高级包。应用程序包包含活动(Acitivity)和服务(Service)API,它形成所有应用程序的基础。
        Android.provider 为了方便开发人员对某些标注的内容提供器进行访问,provider包提供了一些类,从而提供了对所有的android发行版中包含的标准数据库的访问。
        Android.telephony telephony Api允许直接与蛇鞭的电话栈进行交互,让你可以直接打电话、监控电话状态以及收发SMS消息。
        Android.webkit webKit 包提供了与基于Web的内容相关的API,包括一个WebView控件,可以再活动或许cookie管理器重嵌入一个浏览器。
除了Android API之外,android栈还包含了一些可以提供程序框架使用的C/c++库集合:
        OpenGL  基于O喷GL ES ApI 的用来支持3D图形的库。
        Free Type  支持位图和矢量字体渲染。
        SGL 用来提供2D图形引擎的核心库。
        Libc 为基于Linux的嵌入式设备而优化的标注C库。
        SQLite 用来存储数据的轻量级关系数据库引擎
        SSL 用来支持使用安全套接字层(Secure Sockets Layer)加密协议的安全Internet通信。
        Android.location 基于位置的服务API让应用程序可以访问到设备当前的物理位置,不管使用什么样硬件或技术来确定位置,基于位置的服务都提供了对位置信息的通用访问。
        Android.media 媒体API提供了对音频和视频文件的回收和录制的支持,包括留媒体。
        Android.opengl android使用OpenGL ES API提供了强大的3d渲染引擎,这种酒可以使用它来创建动态的3D用户界面。
        Android.hardware 当可用的时候,硬件API就会提供传感器硬件,包括摄像头、加速计和罗盘传感器。
        Android.buetooth, android.net.wifi和android.telephony  android也提供了对硬件平台的低级访问,包括蓝牙,wifi和电话硬件。





你可能感兴趣的:(Android)