1.Android本身是一套软件堆栈(或称为软件层叠架构),它包含三部分:操作系统、中间件、应用程序。Android SDK提供了完备的工具和API,供开发人员在Android平台上使用Java开发应用程序。
        2.何为软件堆栈?首先要知道堆栈是什么,堆栈的实现思想是先进后出(FILO),也就是说栈底的东西是最先进来的,栈底是封死的,只能进去而不能出来;而栈顶的东西都是最后进来的,由于不是封死的,所以它是朝着栈底方向挪移。将这个堆栈概念提升为软件堆栈,假设地说,栈底就是操作系统,栈顶就是实际的应用程序。换句话说就是软件之间的一种层叠的架构,一层叠一层,最底层的当然还是操作系统。
        3.Android架构体系:



        Android体系结构包含五大部分:Application、Application Framework、Libraries、Android Runtime、Linux Kernel。
        上面的体系架构图中蓝色背景的为Java编写的绿色背景的为C/C++编写的红色背景的为C编写的

        (1)应用程序(Applications)
        Android刚出货时会有整套核心的Java应用程序,其中有email客户端、SMS、日历、地图、浏览器、电话簿等。

        (2)应用程序框架(Application Framework)
        Android提供了一个开放的开发平台,供开发人员开发出极为丰富且新颖的应用程序;而且开发人员可以完全自由地利用硬件设备的特性定制他们的应用程序。
Android架构体系设计目标是简化组件的复用,详细地说,某个组件发布了它独有的功能,其他任何组件都可以来使用它的功能。这样的同一机制,允许开发人员相互替代那些组件。
        所有的应用程序都包含有一套完整的系统和服务:
        a) Views System:它是一套丰富且可扩展的服务,提供构建应用程序原型;其中含有下拉列表、表格、文本框、按钮以及嵌入的web浏览器。
        b)Content Provides:提供应用程序可以访问到其他应用程序的数据;还可以共享它们自身的数据。
        c)Resource Manager:提供可访问非程序代码的资源,比如能够访问本地化字符串、图片以及布局文件。
        d)Notification Manager:提供应用程序在状态栏中显示定制化的警告信息。
        e)Activity Manager:提供管理应用程序的生命周期和通用的导航回退功能。
        f)Window Manager:提供管理所有的窗体的功能。
        g)Location Manager:提供利用GPS定位手机所在位置的功能。
        h)Telephony Manager:提供拨打/接收电话的功能。
        i)Package Manager:提供Android系统内安装程序的功能

        (3)函数库(Libraries)
        Android内部含有一套C/C++函数库,以供Android系统中各丰富多样的组件使用。Android应用程序框架封装了这些函数库的功能,以API的形式呈现给开发人员。

        (4)运行时(Android Runtime)
        这部分包含了两个核心:Core Libraries和Dalvik VM
        核心库(Core Libraries)
                这个库包含了大量Java核心库中有用的API。
        Dalvik虚拟机(Dalvik Virtual Machine)
                每个Android应用程序都运行在属于它自己的那个进程里,当然,Devil虚拟机也是属于它自己的。
                Dalvik虚拟机执行的是Dalivk Executable(.dex)文件,这种文件格式经过优化的,目的是为了最小限度的降低内存占用。Android SDK中的dx工具可以将class文件转换成.dex格式运行。换句话说,Android系统执行的程序代码并非是.class文件,而是.dex文件。另外Dalvik虚拟机的实现原理是基于寄存器的(register-based)。
                Dalvik虚拟机依赖于Linux内核的底层实现功能,比如线程管理、低级内存管理。

        (5)Linux内核(Linux Kernel)
        Android依赖于Linux2.6的核心系统服务,比如有安全、内存管理、进程管理、网络堆栈、驱动模型。在硬件和软件堆栈之间,Linux内核充当着抽象层的角色。