Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る

Android での権限

アプリの権限は、以下に対するアクセスを保護してユーザーのプライバシーをサポートするのに役立ちます。

  • 制限付きデータ(システム状態やユーザーの連絡先情報など)。
  • 制限付きアクション(ペア設定したデバイスへの接続や録音など)。

このページでは、Android の権限の仕組み(権限を使用するための大まかなワークフロー、各種権限の詳細、アプリでの権限の使用に関するおすすめの方法など)について概説します。他のページでは、アプリが権限をリクエストする必要があるかどうかを評価する方法、権限を宣言する方法、実行時の権限をリクエストする方法、他のアプリがアプリのコンポーネントと連携する方法を制限する方法について説明します。

Android アプリの権限の一覧については、権限 API リファレンスのページをご覧ください。

権限のワークフローを示すサンプルアプリを確認するには、GitHub の Android 権限のサンプル リポジトリにアクセスしてください。

権限を使用するためのワークフロー

アプリが制限付きのデータやアクションへのアクセスを必要とする機能を提供する場合は、権限の宣言を必要とすることなく、情報の取得やアクションの実行ができるかどうかを判断します。権限の宣言をしなくても、写真の撮影、メディア再生の一時停止、関連性の高い広告の掲載など、アプリのさまざまなユースケースに対応できます。

ユースケースに対応するために、アプリが制限付きデータにアクセスするか、制限付きアクションを実行する必要がある場合は、適切な権限を宣言します。一部の権限(インストール時の権限)は、アプリのインストール時に自動的に付与されます。他の権限(実行時の権限)を使用するには、アプリが実行時にその権限をリクエストする必要があります。

図 1 は、アプリの権限を使用するためのワークフローを示しています。

図 1. Android で権限を使用するための大まかなワークフローを示す図。

権限の種類

Android では、権限をいくつかの種類(インストール時の権限、実行時の権限、特別な権限など)に分類しています。権限の種類はそれぞれ、アプリにその権限が付与されたときにアクセスできる制限付きデータの範囲と、実行できる制限付きアクションの範囲を表します。

インストール時の権限

左側の画像は、アプリのインストール時の権限のリストを示しています。右側の画像は、許可と拒否の 2 つのオプションを含むポップアップ ダイアログを示しています。
図 2. アプリストアに表示される、アプリのインストール時の権限のリスト。

インストール時の権限により、アプリは制限付きデータへのアクセスを制限されるとともに、システムや他のアプリにほとんど影響を与えない制限付きアクションを実行できるようになります。アプリでインストール時の権限を宣言すると、ユーザーがアプリをインストールしたときに、自動的にその権限がアプリに付与されます。図 2 に示すように、アプリストアでユーザーがアプリの詳細ページを開いたときに、インストール時の権限に関するお知らせが表示されます。

Android には、標準の権限や署名権限など、インストール時の権限のサブタイプがいくつか含まれています。

標準の権限

標準の権限により、アプリのサンドボックス外のデータとアクションにアクセスできるようになります。ただし、これらのデータとアクションへのアクセスによる、ユーザーのプライバシーや他のアプリのオペレーションへのリスクはほとんどありません。

権限 API リファレンス ページに示すように、標準の権限には「標準」の保護レベルが割り当てられます。

署名権限

あるアプリが、別のアプリが定義した署名権限を宣言し、2 つのアプリが同じ証明書で署名されている場合、インストール時に最初のアプリに署名権限が付与されます。それ以外の場合は、最初のアプリに権限を付与することはできません。

権限 API リファレンス ページに示すように、署名権限には「署名」の保護レベルが割り当てられます。

実行時の権限

許可と拒否の 2 つのオプションを含むポップアップ ダイアログ
図 3. アプリが実行時の権限をリクエストしたときに表示されるシステム権限のプロンプト。

実行時の権限(危険な権限)により、アプリに制限付きデータに対する追加のアクセス権が付与されます。また、アプリがシステムやその他のアプリに大きな影響を与える制限付きアクションを実行することも可能になります。そのため、制限付きデータにアクセスしたり、制限付きアクションを行ったりするには、事前にアプリで実行時の権限をリクエストする必要があります。アプリが実行時の権限をリクエストすると、図 3 に示すように、実行時の権限のプロンプトが表示されます。

実行時の権限の多くは、非公開のユーザーデータ(機密情報を含む可能性のある特別なタイプの制限付きデータ)にアクセスします。非公開のユーザーデータの例としては、位置情報や連絡先情報などがあります。

権限 API リファレンス ページに示すように、実行時の権限には「危険」の保護レベルが割り当てられます。

特別な権限

特別な権限は、特定のアプリ操作に対応します。特別な権限を定義できるのは、プラットフォームと OEM だけです。また、プラットフォームと OEM は通常、特に強力なアクション(他のアプリの上に重ねて描画するなど)に対するアクセスを保護する必要がある場合に、特別な権限を定義します。

システム設定の [特別なアプリアクセス] ページには、ユーザーによる切り替えが可能な一連の操作が含まれています。これらの操作の多くは、特別な権限として実装されています。

特別な権限ごとに、固有の実装の詳細があります。特別な権限ごとの使用手順については、権限 API リファレンス ページをご覧ください。特別な権限には「appop」の保護レベルが割り当てられます。

おすすめの方法

アプリの権限は、システムのセキュリティ機能を基盤として、Android がユーザーのプライバシーに関連する次の目標をサポートするのを支援します。

  • 管理: ユーザーは、アプリと共有するデータを管理できます。
  • 透明性: ユーザーは、アプリが使用するデータと、アプリがそのデータにアクセスする理由を把握できます。
  • データの最小化: アプリは、ユーザーが呼び出す特定のタスクやアクションに必要なデータにのみアクセスして使用します。

このセクションでは、アプリで権限を効果的に使用するためのおすすめの方法をいくつか紹介します。Android で権限を使用する方法について詳しくは、アプリの権限に関するおすすめの設定のページをご覧ください。

最小限の権限をリクエストする

ユーザーがアプリ内で特定のアクションを要求したとき、アプリはそのアクションを完了するために必要な権限のみをリクエストする必要があります。権限の使用方法によっては、機密情報にアクセスせずにアプリのユースケースに対応できる別の方法を使用できる場合があります。

実行時の権限を特定のアクションに関連付ける

権限のリクエストを、可能な限りアプリのユースケースのフローの遅い段階で行うようにします。たとえば、ユーザーが他のユーザーに音声メッセージを送信できるアプリの場合、ユーザーがメッセージ画面に移動し、[音声メッセージを送信] ボタンを押すまで待機します。ユーザーがボタンを押した後で、アプリはマイクへのアクセスをリクエストできます。

アプリの依存関係を考慮する

ライブラリを追加すると、そのライブラリが必要とする権限も継承します。それぞれの依存関係が必要とする権限と、その権限の用途に注意してください。

透明性を確保する

権限をリクエストするときは、アクセスする対象とアクセスの理由を明確にし、ユーザーが十分な情報に基づいて判断できるようにする必要があります。

システム アクセスは明示的に行う

機密データやハードウェア(カメラやマイクなど)にアクセスするときは、アプリ内で継続的な通知を行うようにします。これにより、ユーザーはアプリが制限付きデータにアクセスしたり、制限付きアクションを実行したりするタイミングを正確に把握できます。

システム コンポーネント内の権限

権限の目的はシステム機能を要求することだけではありません。他のアプリとの連携を制限する方法についてのページで説明したように、アプリのシステム コンポーネントは、アプリが連携できる対象アプリを制限できます。

参考情報

Android でのアプリの権限の詳細については、次の参考情報をご覧ください。

サンプル