Android6.0 引入了一個新的應用權限模型,期望對用戶更容易理解,更易用和更安全。該模型將標記為危險的權限從安裝時權限(Install Time Permission)模型 移動到 運行時權限模型(Runtime Permissions):
* 安裝時權限模型(Android5.1以及更早)。用戶在應用安裝和更新時,對危險權限授權。但是OEM和運行商預裝的應用將自動預授權。
* 運行時權限(Android6.0及以后)。用戶在應用運行時,對應用授予危險權限。由**應用決定何時去申請權限**(例如,在應用啟動時或者用戶訪問某個特性時),但必須容許用戶來授予或者拒絕應用對特定權限組的訪問。OEM和運營商 可以預裝應用,但是不能對權限進行預授權(例外情況請看這里[Create exception](https://source.android.com/devices/tech/config/runtime_perms.html#creating-exceptions))。
運行時權限提供給用戶關于應用所需權限更多的相關上下文和可視性,這也讓開發者幫助用戶更好的理解:為什么應用需要所請求的權限,授權將有什么樣的好處,拒絕將有何種不便。用戶可以通過設置中的菜單來撤銷應用的權限。
## 受影響的權限
系統要求標記為危險(dangerous)的權限使用運行時權限模型。查看危險權限列表可以使用命令:adb shell pm list permissions -g -d。
Android6.0并不改變正常權限的行為。正常權限指的是所有非危險(non-dangerous)權限,包括normal,system和signature 權限。正常權限風險較低,用于容許應用以最小風險來訪問隔離的應用級別的特性。在Android5.1和早期版本中,系統在安裝時自動將正常權限授予請求的應用,并不提示用戶。
## 請求
運行時權限模型適用于所有應用,包括預裝應用。應用軟件的要求包括:
* 運行時全鄉模型必須在所有運行Android6.0的設備上是一致的。這通過CTS來實施。
* 應用必須在運行時提示用戶進行授權。
* 帶有危險權限的預裝應用,必須符合API level 23,必須維護Android6.0的AOSP權限模型(例如,應用安裝的UI流程不應該脫離AOSP的packageInstaller的實現;用戶可以撤銷預裝應用的危險權限;等等)。
* 無界面的應用必須使用Activity來申請權限,或者與其他有相應權限的應用共享UID。細節請參考[Headless applications](https://source.android.com/devices/tech/config/runtime_perms.html#headless-apps)。
## 權限遷移
在設備從Android5.x升級到Android6.0之后,授予應用的權限仍然有效。但是用戶可以在任何時候撤銷這些權限。