Android 11(API レベル 30)以降をターゲットとするアプリが、デバイスにインストール済みの他のアプリに関する情報をクエリすると、デフォルトで情報がフィルタされます。フィルタされることで、デバイスにインストールされているアプリの一部は検出できなくなりますが、それによって、ユースケースの処理には必要のない、機密になり得る情報にアクセスしてしまう可能性を最小限に抑えられます。
また、パッケージの公開設定がどの程度フィルタされているかによって、Google Play などのアプリストアで、ユーザーに対するアプリのプライバシーとセキュリティの状態を評価できます。たとえば、Google Play では、インストール済みアプリの一覧はユーザーの個人情報および機密情報とみなされます。
アプリの公開範囲を限定すると、他のアプリに関する情報を取得するメソッド(queryIntentActivities()
、getPackageInfo()
、getInstalledApplications()
など)の戻り値に影響が及びます。また、公開範囲を限定することで、他のアプリとの明示的な連携(別のアプリのサービスを起動するなど)も影響を受けます。
一部のパッケージは自動的に公開されます。自分のアプリから他のインストール済みアプリをクエリすることで、自動公開されているパッケージをいつでも検出できます。他のパッケージを確認するには、<queries>
要素を使用して、パッケージの公開レベルを上げることを求める宣言をします。ユースケースのページでは、パッケージの公開レベルを選択して上げる方法の例を紹介しています。そのページに記載されているワークフローを使用すると、ユーザーのプライバシーを保護しながら、一般的なアプリ操作シナリオに対応できます。
まれなケースですが、<queries>
要素でパッケージの公開設定が十分に指定されていない場合でも、QUERY_ALL_PACKAGES
権限を使用できます。アプリを Google Play に公開する場合、この権限を使用するには、承認を得る必要があります。
パッケージの公開動作のテストに関するページには、アプリが他のアプリと連携している場合に、パッケージの公開設定によって異なる動作をテストする方法が記載されています。
参考情報
Android でのパッケージの公開設定の詳細については、次の資料をご覧ください。
ブログ投稿
- Android 11 でのパッケージの公開設定(Medium の記事)