Android应用程序使用Java做为编程语言进行编写,单不是用传统的Java虚拟机执行,而是用一个定制的称为Dalvik的虚拟机执行。前端
每一个Android应用程序都运行在它本身的Dalvik实例的一个进程中,它把内存管理和进程管理的全部工做都交给Android运行时进行处理,Android运行时库在必要的时候会暂停和结束进程,从而更有效地管理资源。android
Dalvik和Android运行时位于一个Linux内核之上,由该Linux内核来处理低级的硬件交互,包括驱动程序和内存管理,同时有一套API来提供全部对底层服务、功能和硬件访问。web
开发包中(SDK)的资源:数据库
Android API 像开发人员提供了对Android栈进行访问的方法,Google也使用相同的库来开发本地应用程序编程
开发工具 让Android源码变成可执行的Android应用程序,SDK提供了多个开发工具供编译和调试程序使用浏览器
Android模拟器 Android模拟器是一个彻底交互式的Android设备模拟器,并有多个皮肤可供选择。经过使用模拟器,能够看到应用程序在一个真正的设备中的运行状况。全部的Android应用程序都是运行在Dalvik VM中,因此软件模拟器是一个很是好的环境--事实上,因为它的硬件无关性,因此它提供了一个比任何单独的硬件实现都优秀的测试环境。安全
完整的文档cookie
示例代码网络
在线支持架构
Android软件栈就是将一个Linux内核和一个C/C++ 库集合提供给整个应用程序框架,而该应用程序框架为运行时和应用程序提供服务,并对它们进行管理。由下图元素组成
Linux内核:核心服务(包括硬件驱动服务、进程和内存管理、安全、网络和电源管理)都由一个Linux内核管理。内核还在硬件和软件栈的其它部分之间提供了一层抽象
库:运行在内核之上,Android包含了各类C/C++核心库,如libc和SSL,以及:
用来回放音频和视频媒体的媒体库
提供管理显示的外观管理器
包含2D和3D的SGL和OpenGL的图形库
本地数据库支持的SQLite
集成了Web浏览器和Internet安全的SSL和WebKit
Android运行时 :Android运行时可让一个Android手机从本质上与一个移动Linux实现的手机区分开来。因为Android运行时包含了核心库和Dalvik虚拟机,所以它是像应用程序提供动力的引擎,它和库一块儿造成了应用程序框架的基础。
核心库:虽然Android开发使用的是Java语言,单Dalvik并非一个Java虚拟机。Android核心库提供了Java核心库以及Android特定库可用的大部分功能。
Dalvik虚拟机:Dalvik是一个基于寄存器的虚拟机,它以及被优化从而保证一个设备能够高效地运行多个实例。它依赖于Linux内核进行线程和底层内存管理。全部的Android硬件和系统服务访问都是使用做为中间层的Dalvik来管理的。经过使用一个VM来承载应用程序的执行,开发人员就能够得到一个抽象层来保证它们永远都不须要考虑特定的硬件实现。DalvikVM执行Dalvik可执行文件,优化后的格式能够保证能最小限度的占用内存。使用SDK提供的工具,能够把Java语言编译的类转换为.dex可执行文件。
应用程序框架:提供了用来建立Android应用程序的类。它还对硬件访问和对用户界面及应用程序资源的管理提供了通常抽象
应用层:全部的应用程序,包括本地的和第三方的,都使用相同的库来构建于应用层之上。应用层运行在Android运行时以内,而且使用了应用程序框架中可用的类和服务
Android应用程序架构:
鼓励组件重用,运行在规定的安全限制的访问管理下像其它应用程序发行和共享活动、服务和数据
使用能够替换联系人管理器或者电话拨号器的机制,能够公开本身的应用程序组件,让其它开发人员建立新的UI前端和功能扩展,或者在它们的基础上构建应用程序。
下面的应用程序服务是全部Android应用程序的架构基础,它们提供了经常使用软件都会使用到的框架:
活动管理器(Activity Manager),控制活动的生命周期
视图(View),用来为活动构建用户界面
通知管理器(Notification Manager)提供了一种一致的和非打断性的机制来通知用户
内容提供其(Content Providers)让应用程序能够在程序间共享数据
资源管理器(Resource Manager)支持像字符串和图形这样的非代码资源的具体化
Android库:
android.util:核心实用程序包,包含了低级类,例如专用容器、字符串格式化和XML解析程序
android.os:操做系统包,提供了对基本操做系统服务的访问,例如消息传递、进程间通讯、时钟函数和调试
android.graphics 图形API提供了支持画布、颜色和绘画原语的低级图形类,让你能够在画布上画图
android.text 用来显示和解析文本的文本处理工具
android.database 当使用数据库的时候、提供处理游标所要求的低级类
android.content 内容API经过提供处理资源、内容提供器和包的服务,来管理数据访问和发布
android.view 核心用户界面类。全部的用户界面元素都是使用一系列View来构建的,用来提供用户交互组件
android.widget:构建在View包的基础上,是已经建立好的用户界面元素,可直接在应用程序中使用。它们包含列表、按钮盒布局
com.google.android.maps:一个高级API,提供了对本地地图控件的访问,能够在应用程序中使用这些控件。它包含MapView控件以及用来对嵌入的地图进行注释和控制的Overlay和MapController类
android.app:提供了对应用程序模型进行访问的 高级包。包含活动(Activity)和服务(Service)API,它们造成了全部的Android应用程序的基础
android.provider:为了方便开发人员对某些标准的内容提供器进行访问,provider包提供了一些类,从而提供对全部的Android发行版中包含的标准数据库的访问
android.telephony:容许直接与设备的电话栈进行交互,让你能够接打电话、监控电话状态以及收发SMS信息
android.webkit:提供了与基于web的内容相关的API,包括一个WebView控件,能够在活动或者cookie管理器中嵌入一个浏览器
除了Android API以外,Android栈还包含了一个可供应用程序框架使用的C/C++库集合,包括:
OpenGL:用来支持3D图形
Free Type:支持位图和矢量字体渲染
SGL:提供2D图形引擎的核心库
libc:为基于Linux的嵌入式设备而优化的标准C库
SQLite:用来存储数据的轻量级关系数据库引擎
SSL:用来支持使用安全套接字(Secure Sockets Layer)加密协议的安全Internet通讯
高级Android库:
android.location:基于位置服务的API让应用程序能够访问到设备当前的物理位置。无论使用什么样的硬件或者技术来肯定位置,基于位置的服务都提供了对位置信息的通用访问
android.media:提供了对音频和视频文件的回放和录制的支持,包括流媒体
android.opengl:建立动态的3D用户界面
android.hardware:提供传感器硬件,包括摄像头、加速器和罗盘传感器
android.bluetooth、android.net.wifi和android.telephony:提供了对硬件平台的低级访问,包括蓝牙、Wi-Fi和电话硬件