Android 中的權限

應用程式權限可保護以下項目的存取權,以保障使用者隱私:

  • 受限資料,例如系統狀態和使用者的聯絡資訊
  • 受限操作,例如連接配對的裝置和錄製音訊

本頁面提供 Android 權限運作方式的總覽,包括使用權限的整體工作流程、不同類型權限的說明,以及在應用程式中使用權限的部分最佳做法。其他頁面將介紹如何盡量減少應用程式要求權限的次數宣告權限要求執行階段權限,以及限制其他應用程式與您的應用程式元件互動的方式

如要查看 Android 應用程式權限的完整清單,請參閱權限 API 參考資料頁面

如要查看演示權限工作流程的範例應用程式,請前往 GitHub 上的 Android 權限範例存放區

使用權限的工作流程

如果應用程式提供的功能可能需要存取受限資料或受限操作,請判斷您能否在無須宣告權限的情況下取得資訊或執行操作。您不需要宣告任何權限,即可在應用程式中實現各種用途,例如拍照、暫停播放媒體內容及顯示相關廣告。

如果您認為應用程式必須存取受限資料或執行受限操作才能實現某個用途,請宣告相應的權限。某些權限是使用者安裝應用程式時自動授予的權限,稱為安裝期間權限;其他權限則需要應用程式在執行階段進一步提出要求,稱為執行階段權限

圖 1 說明使用應用程式權限的工作流程:

圖 1. 在 Android 上使用權限的整體工作流程。

權限類型

Android 將權限分為不同的類型,包括安裝期間權限、執行階段權限和特殊權限。每種權限類型都代表系統為應用程式授予權限時,應用程式能存取的受限資料範圍,以及可執行的受限操作範圍。每種權限的防護等級取決於其類型,且會顯示在權限 API 參考資料頁面上。

安裝期間權限

左圖列出了應用程式的安裝期間權限清單,右圖顯示了包含「允許」與「拒絕」這 2 個選項的彈出式視窗。
圖 2. 應用程式商店中顯示的應用程式安裝期間權限清單。

安裝期間權限可對應用程式授予受限資料的有限存取權,或是讓應用程式執行對系統或其他應用程式影響程度最低的受限操作。當您宣告應用程式的安裝期間權限時,應用程式商店會在使用者查看應用程式詳細資料頁面時,向使用者顯示安裝期間權限通知,如圖 2 所示。當使用者安裝您的應用程式時,系統會自動授予應用程式所需權限。

Android 提供數種安裝期間權限子類型,包括一般權限和簽章權限。

一般權限

這類權限允許存取超出應用程式沙箱範圍的資料和操作,但對使用者的隱私以及其他應用程式的運作幾乎不會造成任何風險。

系統會為一般權限指派 normal 防護等級。

簽章權限

只有在應用程式的簽署憑證與定義權限的應用程式或作業系統相同時,系統才會對應用程式授予簽章權限。

實作特殊權限服務的應用程式 (例如自動填入或 VPN 服務) 也會使用簽章權限。這些應用程式需要服務繫結的簽章權限,因此只有系統能夠繫結至該服務。

系統會為簽章權限指派 signature 防護等級。

執行階段權限

包含「允許」與「拒絕」這 2 個選項的彈出式視窗。
圖 3. 應用程式要求執行階段權限時顯示的系統權限提示。

執行階段權限 (又稱為「危險權限」) 可對應用程式授予受限資料的額外存取權,或讓應用程式執行更有可能影響系統及其他應用程式的受限操作。因此,您必須先在應用程式中要求執行階段權限,才能存取受限資料或執行受限操作。請不要假設先前已獲授予這類權限,請在每次存取前先進行檢查,如有需要再提出要求。

當應用程式要求執行階段權限時,系統會顯示執行階段權限提示 (如圖 3 所示)。

許多執行階段權限可存取「使用者私人資料」,這種特殊類型的受限資料包含潛在的機密資訊。使用者私人資料的例子包括位置和聯絡資訊。

麥克風和相機提供特定機密資訊的存取權。因此,系統會協助您說明應用程式存取這項資訊的原因

系統會為執行階段權限指派 dangerous 防護等級。

特殊權限

特殊權限對應到特定的應用程式作業。只有平台和原始設備製造商 (OEM) 可以定義特殊權限。此外,平台和 OEM 通常也會在想要保護較高權限操作 (例如在其他應用程式之上顯示內容) 的存取權時定義特殊權限。

系統設定中的「特殊應用程式存取權」頁面含有一組使用者可切換的作業,其中有許多作業是以特殊權限的形式導入。

進一步瞭解如何要求特殊權限

系統會為特殊權限指派 appop 防護等級。

權限群組

權限可以隸屬於權限群組。權限群組包含一組邏輯相關的權限。舉例來說,收發簡訊的權限可能同屬一個群組,因為這些權限都與應用程式的簡訊互動有關。

權限群組可協助系統在應用程式要求密切相關的權限時,盡可能減少向使用者顯示的系統對話方塊數量。系統向使用者顯示對應用程式授予權限的提示時,會在同一介面顯示屬於相同群組的權限。不過,權限可能會在沒有通知的情況下變更群組,因此,請不要假定特定權限會與任何其他權限分在一組。

最佳做法

應用程式權限以系統安全性功能為建構基礎,有助於 Android 達成與使用者隱私相關的下列目標:

  • 控管:使用者可控管要與應用程式分享的資料。
  • 資訊透明度:使用者瞭解應用程式會使用哪些資料,以及應用程式存取這些資料的原因。
  • 資料最小化原則:應用程式只會存取及運用使用者叫用特定工作或操作時所需的資料。

本節說明在應用程式中有效使用權限的核心最佳做法。如要進一步瞭解如何在 Android 上使用權限,請參閱「應用程式權限最佳做法」頁面。

要求最少的權限

當使用者在應用程式中要求特定操作時,應用程式只應要求完成該操作所需的權限。視您使用權限的方式而定,可能不必存取機密資訊,就能實現應用程式用途的替代方式

建立執行階段權限與特定動作的關聯

請盡可能在應用程式用途流程的後期再要求權限。例如,如果應用程式允許使用者傳送語音訊息給其他人,請等到使用者前往訊息畫面並按下「傳送語音訊息」按鈕後,再要求權限。使用者按下按鈕後,應用程式即可要求存取麥克風。

考量應用程式的依附元件

當您加入資料庫時,也會沿用資料庫的權限需求。請留意各項依附元件所需的權限,以及這些權限的用途。

開誠布公

提出權限要求時,請清楚說明您將存取哪些內容、存取原因,以及權限遭拒時哪些功能會受到影響,以便讓使用者在充分瞭解相關資訊的情況下決定是否要授予權限。

明確顯示系統存取權

當您存取機密資料或硬體 (例如相機或麥克風) 時,如果系統尚未提供這些指標,請在應用程式中持續提供指示。這個提醒機制可協助使用者確實瞭解應用程式在存取受限資料或執行受限動作。

系統元件中的權限

權限不只用於要求系統功能。應用程式的系統元件可能會限制哪些其他應用程式能與您的應用程式互動,相關說明位於「限制與其他應用程式的互動」頁面。