Google is committed to advancing racial equity for Black communities. See how.
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

運行時權限

在Android 6.0及更高版本中,Android應用程序權限模型旨在使權限對用戶而言更易於理解,有用和安全。該模型將需要危險權限(請參閱“ 受影響的權限” )的Android應用程序從安裝時權限模型轉移到了運行時權限模型:

  • 安裝時權限

    Android 5.1及更低版本 )用戶在安裝或更新應用時向其授予危險權限 。設備製造商和運營商可以在沒有通知用戶的情況下預先安裝具有許可權限的應用程序。

  • 運行時權限

    Android 6.0 – 9 )用戶在應用程序運行時向其授予危險權限。請求權限的時間(例如應用程序何時啟動或用戶訪問特定功能的時間)取決於應用程序,但是用戶向應用程序授予/拒絕對特定權限組的訪問權限。 OEM /運營商可以預先安裝應用程序,但是除非經過異常處理,否則不能授予許可。 (請參閱創建異常 。)

    Android 10 )用戶可以提高透明度,並可以控制哪些應用程序具有活動識別(AR)運行時權限。 運行時權限對話框提示用戶始終允許,在使用時允許或拒絕權限。在將操作系統升級到Android 10的過程中,將保留授予應用程序的權限,但用戶可以進入“設置”並進行更改。

運行時權限可防止應用未經用戶同意而訪問私有數據,並為它們提供其他上下文以及對應用程序正在尋求或已被授予的權限類型的可見性。運行時模型鼓勵開發人員幫助用戶了解應用程序為何需要請求的權限,並提供更高的透明度,以便用戶可以就授予或拒絕它們做出更好的決策。

受影響的權限

Android 6.0及更高版本需要危險權限才能使用運行時權限模型。危險權限是較高風險的權限(例如READ_CALENDAR ),授予請求應用程序訪問私有用戶數據或對設備的控制權,這可能會對用戶產生負面影響。要查看危險權限列表,請運行以下命令:

adb shell pm list permissions -g -d

Android 6.0及更高版本不會更改普通權限的行為。這些都是非危險權限,包括普通,系統和簽名權限。普通權限是較低風險的權限(例如SET_WALLPAPER ),該權限授予請求應用程序訪問隔離的應用程序級功能的權限,而對其他應用程序,系統或用戶的風險則最小。與Android 5.1及更低版本一樣,系統會在安裝時自動向請求的應用程序授予正常權限,並且不會提示用戶批准。有關權限的詳細信息,請參見<permission>元素文檔。

Android 10中的硬限制和軟限制

除了危險外,許可可以是硬限製或軟限制。無論哪種情況,受限制的權限也必須列入白名單。未列入白名單的硬限制與未列入白名單的軟限制的行為不同:

  • 嚴格的限制 )無法授予未列入白名單的應用權限。
  • 軟限制 )沒有列入白名單的應用會根據其請求的特定權限進行操作。該行為在公共文檔中描述了所請求的權限。

安裝應用程序時,安裝程序(例如Google Play商店)可能選擇不將應用程序的受限許可列入白名單。權限受平台限制,並且僅在應用程序滿足每個平台策略的特殊條件時才可以授予權限。硬限制權限類型的示例包括SMS和“呼叫日誌”權限。

白名單會在安裝過程中以及

  • 在Android 9到10的升級過程中已經安裝了一個應用。
  • 已獲得許可或預安裝了應用。
  • 已經定義為將許可列入白名單的角色需要許可。
  • 安裝程序(例如Google Play商店)會將許可標記為白名單。

用戶無法手動將權限列入白名單。

要求

運行時權限模型適用於所有應用程序,包括預安裝的應用程序以及在設置過程中交付給設備的應用程序。應用軟件要求包括:

  • 運行時權限模型必須在所有運行Android 6.0及更高版本的設備上保持一致。這是由Android兼容性測試套件(CTS)測試強制實施的。
  • 應用程序必須提示用戶在運行時授予應用程序權限。有關詳細信息,請參見更新應用程序 。可以為默認應用程序和處理程序授予有限的異常,這些默認應用程序和處理程序提供基本的設備功能,這些功能對於設備的預期操作至關重要。 (例如,用於處理ACTION_CALL的設備的默認Dialer應用程序可能具有“電話”權限訪問權限。)有關詳細信息,請參閱創建例外
  • 具有危險權限的預加載應用必須以API級別23為目標並維護運行時權限模型。也就是說,應用程序安裝期間的UI流程不得偏離PermissionController的AOSP實現,用戶可以撤消預安裝應用程序的危險權限,依此類推。
  • 無頭應用程序必須使用活動來請求權限或與具有必要權限的另一個應用程序共享UID。有關詳細信息,請參見無頭應用程序

權限遷移

在更新到Android 6.0或更高版本之後,仍保留授予Android 5.x上的應用程序的權限,但是用戶可以隨時撤消這些權限。

在Android 9至10的更新中,所有嚴格限制的權限都被列入白名單。有關實現前台/後台拆分權限的詳細信息,請參閱從請求後台位置開始的Android 10隱私更改

積分

集成適用於Android 6.0及更高版本的應用程序運行時權限模型時,必須更新預安裝的應用程序以使用新模型。您還可以為作為核心功能的默認處理程序/提供程序的應用程序定義例外,定義自定義權限,並自定義PermissionController應用程序中使用的主題。

更新應用

系統映像上的應用程序和預安裝的應用程序不會自動獲得許可。我們建議您與預裝的應用程序開發人員(OEM,運營商和第三方)合作,按照開發人員指南進行所需的應用程序修改。具體來說,您必須確保修改了預安裝的應用程序,以避免當用戶撤消權限時崩潰和其他問題。

預加載的應用

在Android 9及更低版本中,使用危險權限的預加載應用必須針對API級別23或更高版本,並維護Android 6.0及更高版本的AOSP權限模型。例如,在應用程序安裝期間的UI流程不得偏離PermissionController的AOSP實現。用戶甚至可以撤消預裝應用程序的危險權限。

在Android 6.0到9中,在安裝流程中會授予一些權限。但是,從10開始,安裝流程(由Package Installer應用執行)是與權限授予(在Permission Controller應用中)分開的功能。

無頭應用

只有活動可以請求權限。服務不能直接請求權限。

  • 在Android 5.1及更低版本中,無頭應用程序可以在安裝時或在未使用活動的情況下預安裝時請求權限。
  • 在Android 6.0及更高版本中,無頭應用程序必須使用以下方法之一來請求權限:
    • 添加活動以請求權限。 (這是首選方法。)
    • 與具有必要權限的另一個應用程序共享UID。僅當您需要平台將單個應用程序處理多個APK時,才使用此方法。

目的是避免使用戶與出現在上下文之外的權限請求混淆。

自定義PackageInstaller UI

如果需要,可以通過更新PackageInstaller使用的默認設備主題( Theme.DeviceDefault.SettingsTheme.DeviceDefault.Light.Dialog.NoActionBar )來自定義“權限” UI 主題 。但是,由於一致性對於應用程序開發人員至關重要,因此您無法自定義權限UI出現的位置,位置和規則。

要包含其他語言的字符串 ,有助於琴弦AOSP。

創建例外

您可以使用PackageManager中的DefaultPermissionGrantPolicy.java類為作為核心操作系統功能的默認處理程序或提供程序的應用程序預先授予權限。例子:

ACTION_CALL (Dialer) Default
Phone, Contacts, SMS, Microphone
SMS_DELIVER_ACTION (SMS/MMS) Default
Phone, Contacts, SMS

定義自定義權限

您可以將自定義權限和組定義為普通危險 ,並將OEM /運營商特定的權限添加到現有權限組,就像在Android 5.x和更早版本中一樣。

在Android 6.0及更高版本中,如果您添加了新的危險許可,則必須以與其他危險許可相同的方式進行處理(在應用運行時請求該危險許可,並且用戶可以撤消)。特別:

  • 您可以將新權限添加到當前組,但不能修改危險權限和危險權限組的AOSP映射。 (換句話說,您不能從一個組中刪除權限並分配給另一個組)。
  • 您可以在設備上安裝的應用程序中添加新的權限組,但不能在平台清單中添加新的權限組。

測試權限

Android包含兼容性測試套件(CTS)測試,可驗證將各個權限映射到正確的組。通過這些測試是Android 6.0和更高版本的CTS兼容性的要求。