Android是一款基于Linux的操作系统,面向触摸屏移动设备如智能手机和平板电脑.
最早是由位于加州的Android公司所开发, 2003年创立,2005年被Google收购。
Android 2007年正式公开,2008年10月出售第一款手机。
Android OS可以被看作一个4层的软件堆栈,每层都包含一组程序组件。总体上包括操作系统, 中间件和核心应用。每层都为上层提供服务。
最下面这一层是Linux内核。Android OS是Google基于Linux 2.6 内核发展而来,4.0版本以后是基于Linux3.x,Linux负责硬件交互,包含基本的硬件驱动程序。另外Linux内核还充当硬件层和其他软件层之间的抽象层。Android使用Linux完成核心功能,如内存管理,进程管理,网络协议栈,电源管理,安全设置等。正因为Android构建在Linux内核上,其具备非常好的硬件移植性,并且其内核也非常健壮。Android系统使用binder框架来作为Inter-Process Communication (IPC) 机制。该binder框架最早是由OpenBinder所开发并被用于BeOS系统的IPC。
接下来是Android的本地库。这一层使得设备能处理各类数据。这些库是用c或者c++语言所写并且和硬件特性相关。
Surface Manager: 用来组成带离屏缓存(Off-screen buffering)的窗口管理器。离屏缓存表示你不能直接绘制到屏幕,你需要先绘制到一块特定的缓存中去,在那里结合其他绘画元素然后形成整个用户可以看到的屏幕界面。离屏缓存和窗口透明度有关。
Media framework: 基于PacketVideo OpenCore项目,提供不同的媒体编解码库,以处理不同的媒体类型。
SQLite: 轻量级数据库引擎,存放数据
WebKit: 浏览器引擎,用来呈现HTML内容
OpenGL: 2D/3D图形引擎
Freetype: 位图(bitmap)和向量(vector)图显示支持
libc: C语言标准函数库, 源于BSD
SGL: 底层的2D图形引擎
Android运行时,和Libraries处于同一层,但位置稍在上面,包含Dalvik虚拟机和核心Java库。
Android应用选择了Java开发语言,Java调用将通过运行时被转换为本地调用即本地C/C++代码库函数。
Dalvik 虚拟机
Dalvik是一种非标准(非JCP,或者说是Google自己主导的标准)JVM,并为省电、低内存、低处理能力运行环境做了优化。Dalvik虚拟机本身是用Portable C写的。
Dalvik和JVM的不同主要在于:
1、Dalvik采用的是基于寄存器的架构,而一般JVM是基于堆栈的。基于堆栈需要执行更多的指令,但基于寄存器的指令长度更长。
2、Dalvik不执行.class文件,相反它执行.dex文件。.dex文件是在编译时由.class文件生成,各个类文件中重复的字符串和常量只在.dex中存放一次,另外Java字节码被转换成Dalvik虚拟机所使用的替代指令集,这样是为了在资源受限的环境中提供更高的效率。
(实际性能,存在争议,Oracle的一次测试显示其JVM比Android2.2Dalvik快2、3倍)
Dalvik VM允许同时创建多个虚拟机实例,来提供安全、隔离、内存管理和线程支持。作者是Google的Dan Bornstein。
(注意!由于Android 5.0的推出,Android系统架构发生了较大变化,其中最核心的是Dalvik虚拟机被ART(Android Runtime)替换。
关于ART的信息,请参阅:http://www.techbrood.com/?q=ART+runtime)
核心Java库
这些库和Java SE/Java ME库不同,不过提供了Java SE里面定义的绝大多数功能。这些库也叫Dalvik Libraries,显然是用Java语言写的。
这一层直接和我们的应用程序交互,负责管理电话设备的基本功能,如资源管理、语音呼叫管理等。作为开发人员,你可以把它们当作应用程序工具库来看待。
Activity Manager: 管理应用程序活动生命周期
Content Providers: 管理程序之间的数据共享
Telephony Manager: 管理电话呼叫
Location Manager: 提供位置管理, 使用GPS、基站或者无线局域网信号
Resource Manager: 管理应用程序中使用到的各种各样的资源
应用程序在架构的最上层,我们开发的应用程序就在这里。有一些标准预装程序如短信息(SMS)、拨号(Dialer)、浏览器、联系人等。
我们可以替换这些预装应用,只要用户许可,技术上没有什么限制。
参考链接:
http://www.edureka.in/blog/beginners-guide-android-architecture/
http://www.android-app-market.com/android-architecture.html
http://techblogon.com/android-architecture/
http://www.compiletimeerror.com/2012/12/blog-post.html