摘要
- Android 應用程序由一個或者多個應用程序組(component)件構成 (activities,services, content providers, and broadcast receivers)
- 每個組件在整個app的行爲中承擔了不同的角色,且都能被獨立的激活 (即使被激活的組件屬於其他app)
- app的manifest 文件必須聲明需要用到的組件和所有app的需求,比如app所使用的最小Android版本及一些硬件配置等
- 非代碼的app資源 (images, strings, layout files, etc.),在不同的設備配置下應該各有一份(比如不同語言使用的字串、不同屏幕尺寸使用的佈局文件)
- Android 操作系統是一個多用戶的linux 系統,每一個應用程序就是一個特有的用戶.
- 默認情況下,系統會爲每一個app分配一個唯一linux用戶ID(ID 只有系統知道,app自身並不知道ID)。系統會爲app中的每一個文件都分配權限,所以只有擁有相應的app ID 才能訪問這些文件。
- 每一個進程都擁有自己的虛擬機(VM),所有各應用程序之間代碼的運行是隔離的。
- 默認情況下,每個app都運行在自己獨立的linux進程之上,當需要運行app的任何一個組件時會啓動這個進程,然後在不需要使用進程或者系統需要回收內存的時候會終止進程。
通過這種方式,Android系統實現了最小特權原則(principle of least privilege)。每個app默認情況下只能訪問需要完成其應用程序功能的部分。這樣創建了一個非常安全的app運行環境,app不能訪問系統給予權限的部門。
但是,也有方法可以可以讓應用程序之間共享數據,也可以讓app訪問系統服務:
- 安排讓兩個app共享同一個linux User ID是可能,這樣他們就能相互訪問各自的文件。爲了節約系統資源,擁有相同user ID的應用程序可以運行在同一個VM上(但是app的簽名必須一致)
- 一個app可以向系統請求權限來訪問設備數據,比如聯繫人、短息、SD card、照相機、藍牙等等,app權限必須在安裝時就獲得。
本文涵蓋了app 如何在Android 系統中存在,文章剩餘的部門會介紹:
- 定義app的核心框架組件
- 用來聲明app組件及請求設備功能訪問權限的manifest文件
- 從Android 代碼中分離出來的資源文件,讓你個輕鬆優化app 在不同設備配置下的行爲。