Android应用程序是用Java编程语言编写的。Android SDK工具将你的代码和任何数据以及资源文件一起编译成一个APK,即一个以.apk为后缀名存储文件的Android包。一个APK文件包含一个Android应用程序所有的内容,Android设备使用这个文件来安装应用。
一旦安装在设备上,每个Android应用存活在自己的安全沙箱:
1、Android操作系统是一个多用户的Linux系统中,每个应用程序都是一个不同的用户。
2、默认情况下,系统为每个应用程序分配一个唯一的Linux用户ID(该ID仅由系统使用,应用程序未知)。该系统为应用程序中的所有文件设置权限,因此只有被分配用户ID的应用程序才能访问它们。
3、每个进程都有自己的虚拟机(VM),因此应用程序的代码与其他应用程序隔离运行。
4、默认情况下,每个应用程序都运行在自己的Linux进程中。当应用程序的任何组件需要被执行时,Android就会启动这个进程,然后在不再需要的时候关闭这个进程,或者当系统必须为其他应用程序恢复内存时。
用这样的方法,Android系统实现了最小特权原则。也就是说,在默认情况下,每个应用程序只能访问它需要完成工作的组件,而不是更多。这创造了一个非常安全的环境,在这个环境中,应用程序无法访问未经允许的部分系统。
然而,有一些方法可以让应用程序与其他应用程序共享数据和让应用程序访问系统服务:
1、可以安排两个应用程序共享相同的Linux用户ID,在这种情况下,它们可以访问彼此的文件。为了节省系统资源,具有相同用户ID的应用程序也可以在相同的Linux进程中运行,并共享相同的VM(应用程序也必须使用相同的证书签署)。
2、应用程序可以请求访问设备数据,如用户的联系人、SMS消息、可挂载存储(SD卡)、摄像头、蓝牙等。所有应用程序的权限必须在安装时由用户授予。
这涵盖了关于Android应用程序在系统内部如何存在的基本知识。本文档的其余部分向您介绍:
1、应用程序核心框架的组件定义。
2、声明组件和应用程序所需要的设备特性的清单文件。
3、独立于应用程序代码和允许应用程序根据不同的设备配置优化其行为地资源。