Android 使用Java语言开发。Android SDK 工具编译代码—以及任意数据并连同相关资源打包进一个Android 包内,它是一个以.apk
为后缀的压缩文件。 一个.apk
文件中的所有代码就是一个程序。这个.apk文件就用于在Android设备上安装这个程序。
一旦安装成功,这个Android程序就拥有了自己独立的运行沙盒(沙盒是在受限的安全环境中运行应用程序的一种做法,这种做法是要限制授予应用程序的代码访问权限。):
- Android操作系统是一个多用户的Linux系统,其中的每一个应用程序都是一个独立的用户。
- 默认地,系统会为每一个应用程序分配一个唯一的Linux用户ID(这个ID只能被系统使用,并且对于应用程序来说,这个ID是未知的)。系统为一个应用程序的所有文件设置了权限,所以,只有分配给这个应用程序的用户ID可以访问它们。
- 每一个进程有它主机的虚拟机 (VM), 所以一个应用程序的代码会独立与其它的应用程序运行。
- 默认地,每一个应用程序在它自己的Linux进程中运行。Android会在一个应用程序的任何一个组件需要被调用的时候启动这个进程。然后,当没有任何组件被调用或者系统需要为其它应用程序回收内存的时候,就会关闭这个进程。
通过这种方式,Android 系统实现了 最少特权原则。就是说,每一个应用程序,默认地,都只能调用它所需要的工作组件。这就创造了这样一种非常安全的环境,在这个环境中,一个应用程序不能访问没有被授予其权限的系统部分。
尽管如此,也有很多途径可以让一个应用程序和其它的应用程序共享数据,也可以让一个应用程序去调用系统服务:
- 为两个应用程序分配同一个Linux用户ID是可行的,这样它们就能访问对方的文件。为了节约系统资源,拥有相同用户ID的应用程序也可以被运行于相同的Linux进程 并且共享VM(它们必须用相同的证书签名)。
- 应用程序可以通过请求权限来访问设备数据,例如联系人,SMS信息,可插拔存储(SD卡),相机,蓝牙,等等。所有的应用程序权限必须在安装的时候由用户授予。
以上概括了一个Android程序在系统中的存在方式。接下来将介绍:
- 组装应用程序的那些核心framework组件。
- 为你的程序声明组件和请求设备特性的配置文件。
- 被代码分隔的那些能够优化你的程序在不同的设备配置中完美运行的资源。