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 開始,設定其他資訊公開和隱私權功能的權限
- 當應用程式在背景使用
ACCESS_FINE_LOCATION
權限存取位置資訊時,系統會顯示 背景位置資訊存取權提醒,提醒使用者。 - 由聯絡人供應器元件管理的聯絡人親和性相關資料,存取方式有所不同:應用程式無法寫入或讀取資料庫中的聯絡人親和性資料。這會影響 呼叫端相關 API。
簡化設定
我們已簡化 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 介面。