Android 權限

Android 權限提供控管機制,可提高使用者意識,並限制應用程式存取機密資料的權限。在 Android 8.0 以下版本設定權限時,必須加入許可清單,否則即使具有特殊權限的應用程式位於 priv-app 路徑,也會遭到停用。在 Android 9 以上版本中,如果裝置嘗試使用未列入正確許可清單的應用程式,就無法啟動。

Android 10 引進了「角色」概念,這是系統中與特定需求和權限相關聯的專屬名稱。為應用程式指派角色,授予特定用途的權限,並使用平台設定資源設定預設角色。

強化防範可能有害的應用程式 (PHA) 的功能可改善以下項目:

  • 公開揭露可能有害的應用程式行為。
  • 使用者可控管應用程式行為。
  • 應用程式開發人員在使用受權限保護的私人資料時,可自行決定是否使用。

套件安裝和權限

在 Android 9 及以下版本中,套件安裝和權限控制功能包含在 PackageInstaller 套件 (//packages/apps/PackageInstaller) 中。在 Android 10 以上版本中,權限控制功能位於獨立套件 PermissionController (//packages/apps/PermissionController) 中。圖 1 說明瞭這兩個套件在 Android 10 中的位置。

將系統應用程式和使用者安裝的應用程式所使用的套件安裝和權限控制功能分開

圖 1. Android 10 中的套件安裝和權限控管功能

許可清單和存取權

在 Android 6.0 以上版本中,應用程式會在執行階段要求危險權限。Android 10 新增了活動辨識 (AR) 執行階段權限,可提示使用者修改或允許危險權限。

Android 8.0 要求您在 /etc/permissions 目錄的系統設定 XML 檔案中,明確列出特權應用程式。在 Android 9 以上版本中,必須將特權權限加入許可清單,否則裝置無法啟動。

為了限制內部 API 的顯示範圍,並防止應用程式誤用平台程式庫,Android 7.0 推出了原生程式庫的命名空間。這會將系統程式庫與應用程式程式庫分開,裝置製造商可以新增自己的原生程式庫。

從 Android 10 開始,應用程式必須同時具備簽章權限和使用者同意聲明,才能 存取裝置的螢幕內容。依賴靜默擷取功能 (例如擷取螢幕截圖) 的特權應用程式,應改用 MediaProjection 類別。

Android 15 要求您在 /etc/permissions 目錄的系統設定 XML 檔案中,明確許可清單非系統應用程式要求的平台簽章權限,或系統應用程式更新後要求的權限。

資訊公開與隱私權

在 Android 6.0 以上版本中,裝置原廠 MAC 位址會受到保護,以免遭到 Wi-Fi 服務供應商和封包分析工具存取。在 Android 10 中,除非應用程式 已加入特權權限的許可清單,否則會受到額外限制,無法存取不可變動的裝置 ID。(「 連線服務一節提供有關裝置 ID的相關討論,因為這會影響電信業者。)

在 Android 9 以下版本中,使用者在授予應用程式位置存取權時,會做出永久性的選擇。自 Android 10 起,三態位置資訊存取權功能可讓使用者選擇三種選項,允許應用程式存取裝置位置資訊。無論目標 SDK 為何,這些權限規定都會套用至 Android 10 中的應用程式。

從 Android 10 開始,設定其他資訊公開和隱私權功能的權限

簡化設定

我們已簡化 Android 6.0 以上版本的權限設定。

  • init 啟動的服務的背景功能會將服務設定的所有層面保留在單一 .rc 檔案中。如果要為未由 init 啟動的服務設定功能,請改用 fs_config.c 設定檔案系統功能。
  • Android 7.x 以下版本會擴充 Android ID (AID) 機制,使用裝置專屬的 android_filesystem_config.h 檔案來指定檔案系統功能和/或自訂裝置製造商 AID。Android 8.0 以上版本支援擴充檔案系統功能的新方法
  • 在 Android 8.0 中,處理 USB 指令已從裝置專屬的 init 指令碼 (HAL 層的替代方案) 移至原生 USB 守護程序。在 Android 8.0 以上版本推出的每部裝置上,都必須實作 USB HAL 介面。