安卓的总体架构由5个主要层次上的组件构成,这5层是:安卓应用层、安卓框架层、dalvik虚拟机层、用户空间原生代码层和linux内核层
安全边界/信任边界,是系统中分割不同信任级别的特殊区域
- 如内核空间与用户空间之间的边界
- 内核空间可以对硬件执行一些底层操作并访问所有的虚拟和物理内存,而用户空间中的代码由于cpu的安全边界控制,无法访问所有内存
Android权限模型是多方面的,有API权限、文件系统权限和IPC权限。
要确定应用用户的权限和辅助用户组,android系统会处理在应用包的Androidmanifest.xml文件中指定的高级权限。
应用的权限由packageManager在安装时从应用的Manifest文件中提取,并存储在/data/system/package.xml文件中。
- API权限用于控制访问高层次的功能,这些功能存在于Android API、框架层,以及某种情况下的第三方架构中。
- 文件系统权限,Android的应用沙箱严重依赖于严格的Unix文件系统权限模型。
- IPC权限直接涉及用用组建(以及一些系统得IPC设施)之前的通信,虽然与API权限也有一些重叠。
Android应用层
-
安卓在与应用相关的多种用途中使用公钥加密算法。对于预装的应用包,使用特殊平台密钥来签署,它们拥有system用户权限。第三方应用是由个人开发者生成的秘钥签名的。通过签名机制可以阻止未经授权的应用更新
AndroidMannifest.xml
-
含有唯一的应用包名及版本信息 Acticity、Service、BroadReceiver和插桩定义
-
权限定义
-
关于应用使用并一起打包的外部程序库的信息 其他支持性的指令,如共有的UID信息、首选的安装位置和UI信息
Intent
-
是应用间通信的关键组件
-
是一种消息对象,其中包含一个要执行操作的相关信息,将执行操作的目标组件信息以及其他一些标志位或支持性信息
Activity
-
是一种面向用户的应用组件或用户界面
-
基于Activity基类,包括一个窗口和相关的UI元素。
Broadcast Receiver
-
是另一种类型的IPC端点
-
通常会在应用希望接收一个匹配某种特定标准的隐式Intent时出现
Service
-
Service时一类在后台运行而无需用户界面的应用组件,用户不用直接与service所属应用进行交互
-
Service也可以利用IPC机制来发送和接收Intent
-
Service必须在应用的Mnifest文件中声明
Content Provider
-
是为各种通用、共享的数据存储提供的结构化访问接口
-
可用权限对Content Provider进行控制
Android框架层
是应用和运行时的连接纽带,架构层为开发者提供了执行通用任务的部件(程序包和类)
DalvikVM
-
基于寄存器而非栈,
开发流程: (1)开发者以类似Java的语法进行编码; (2)源代码被编译成.class文件; (3)得到的类文件被翻译成Dalvik字节码; (4)所有类文件被合并为一个Dalvik可执行文件(DEX)文件; (5)字节码被DalvikVM加载并解释执行。
Zygote
-
Android设备启动时,Zygote进程是最先运行的进程之一。
-
Zygote负责启动其他服务以及加载Android框架所使用的程序库。
-
Zygote进程作为每个Dalvik进程的加载器,通过复制自身进程副本来创建进程。
-
启动system_server进程,这个进程容纳了所有系统核心服务,并在system的AID用户环境中以特权权限运行。
用户空间原生代码层
程序库
- Android框架层中的较高层次类所依赖的许多底层功能都是通过共享程序库的方式来实现的,并通过JNI进行访问的。
核心服务
- 核心服务是指建立基本操作系统环境的服务与Android原生组件。
init
- init程序通过执行一系列命令对用户空间环境进行初始化。
property服务
-
property服务位于Android的初始化服务中,它提供了一个持续性的、内存映射的、基于键值对的配置服务
无线接口层
-
通讯功能
debuggerd
-
守护进程,提供Android基本崩溃报告
ADB(Android调试桥)
-
包括Android设备上的adbd守护进程,在宿主工作站上运行的adb服务器,以及相应的adb命令行客户端
Volume守护进程
- 或称为vold,是Android系统上负责安装和卸载各种文件系统的服务
内核
Binder
- IPC机制,提供额外的一些特性,比如对调用者和被调用者的安全验证。它已被大量的系统和框架服务所使用
ashmem
- 匿名共享内存,一种基于文件的共享内存分配器,使用Binder IPC来允许进程识别内存区域文件描述符
pmem
- 进程内存分配器,用于管理大块、连续的共享内存区域
日志记录器
- 系统范围的日志功能
Paranoid Networking
- 将网络操作和功能特性限制在特定的用户组ID