Android Application 基礎

Application Fundamentals

摘要

  • Android 應用程序由一個或者多個應用程序組(component)件構成 (activities,services, content providers, and broadcast receivers)
  • 每個組件在整個app的行爲中承擔了不同的角色,且都能被獨立的激活 (即使被激活的組件屬於其他app)
  • app的manifest 文件必須聲明需要用到的組件和所有app的需求,比如app所使用的最小Android版本及一些硬件配置等
  • 非代碼的app資源 (images, strings, layout files, etc.),在不同的設備配置下應該各有一份(比如不同語言使用的字串、不同屏幕尺寸使用的佈局文件)
Android 應用程序使用java 語言開發。Android SDK開發工具將app的代碼(包括數據和資源文件)編譯到一個Android package中,Android package是一個以.apk爲後綴的文件。.apk文件就代表了一個應用程序,在Android 設備上安裝的app的時候只需要用到相應的apk文件。
每個安裝在設備上的 Android 應用程序都運行在自己的安全沙箱中(security sandbox):
  • 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 在不同設備配置下的行爲。
發佈了28 篇原創文章 · 獲贊 0 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章