一个应用是怎么在Android系统中运行的

以前一直听说Android是基于Linux操作系统的基础上修改而来的,是阉割版的Linux。但是一个APP是怎样在Android上运行的,资源怎么分配,和Linux又有什么关系还是不得而知。直到前几天在看android的官方API才直到了一点答案。现将API中的原话摘录如下:

“Android应用程序以java作为开发语言。用Android SDK 提供的工具,可以将应用程序所需要的数据和资源文件打包到一个android包文件中,这个文件用.apk作为扩展名。所有代码都在单个.apk文件中,这个文件就是通常安装在Android设备中的应用. 一旦安装到了一个设备,每个应用生存在它自己的安全沙箱中。

  • 一个Android系统是一个多用户的Linux系统,其中的每个应用都是一个不同的用户。
  • 默认情况下,系统给每个应用分配一个独立的Linux用户ID(这个ID只由系统使用并且对应用来说是不可知的),系统给在某个应用中的所有文件设置了权限,所以只有分配了那个用户ID的应用才能访问它们
  • 每个进程拥有它自己的虚拟机,所以一个应用代码的运行,与其他应用代码的运行是隔离的.
  • 默认情况下,每个应用程序均运行于它自己的Linux进程中。当应用程序中的任意代码开始执行时,Android启动一个进程,而当不再需要此进程而其它应用程序又需要系统资源时,则关闭这个进程。

通过这种方法,Android系统实现了最小特权原则。默认,每个应用仅仅访问需要工作的组件,并不多做其他的事。这样创建了一个非常安全的环境,应用不能访问系统没有授权的其他部分.

然而,应用可以有多种方法来与其他应用,共享数据及访问系统服务:

  • 有可能安排两个应用共用一个linux系统ID,在那种情况下,它们能互相访问相互的数据。为了节约系统资源,拥用相同用户ID的应用,可能也被安排运行在同一个Linux进程中并共享相同的VM(应用必须被签名成同样的认证)。
  • 所用应用能请求允许访问硬件数据,比如像用户通信录,SMS消息及可挂载的存储设备(SD card),摄像头,蓝牙等,所有应用的权限必须在用户安装时被许可。”

 

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据