動作の変更点: Android 11 をターゲットとするアプリ

従来のリリースと同様に、Android 11 には、アプリに影響を与える可能性のある動作変更が含まれています。下記の動作変更は、Android 11 以上をターゲットとするアプリに限り適用されます。targetSdkVersion30 に設定するアプリの場合、必要に応じてアプリを修正し、下記の動作変更に対して適切に対応する必要があります。

Android 11 上で稼働するすべてのアプリに影響する動作変更のリストについても必ずご確認ください。

プライバシー

Android 11 では、ユーザーのプライバシーを強化するために、以下のような変更や制限が導入されています。

  • 対象範囲別ストレージの適用: 外部ストレージ ディレクトリへのアクセスは、アプリ固有のディレクトリと、そのアプリが作成した特定のメディアタイプに限られます。
  • 許可のオートリセット: ユーザーが特定のアプリを数か月間使用しないと、システムがアプリの機密情報に関わる権限を自動リセットします。
  • バックグラウンドでの位置情報へのアクセス: アプリにバックグラウンドでの位置情報へのアクセス権を付与するには、ユーザーをシステム設定に移動する必要があります。
  • パッケージの公開設定: デバイスにインストール済みのアプリのリストをアプリが照会すると、返されるリストはフィルタされます。

詳細については、プライバシーに関するページをご覧ください。

セキュリティ

ヒープポインタのタグ付け

変更の詳細

変更の名前: NATIVE_HEAP_POINTER_TAGGING

変更 ID: 135754954

切り替え方法

アプリと Android 11 との互換性をテストする際に、以下の ADB コマンドを使用して、この変更をオンまたはオフに切り替えることができます。

adb shell am compat enable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME
adb shell am compat disable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME

互換性フレームワークと変更の切り替えについて詳しくは、Android 11 とのアプリの互換性をテストするをご覧ください。

ヒープポインタの最上位バイト(MSB)はゼロ以外の値のタグになりました。この MSB を変更するなど、ポインタを間違って使用しているアプリはクラッシュするなどの問題が発生する可能性があります。この変更は、ARM メモリタグ付け拡張機能(MTE)を有効にするハードウェアを今後サポートするために必要なものです。詳細については、タグ付きポインタをご覧ください。

この機能を無効にする方法については、allowNativeHeapPointerTagging マニフェストのドキュメントをご覧ください。

カスタム トーストビューのブロック

変更の詳細

変更の名前: CHANGE_BACKGROUND_CUSTOM_TOAST_BLOCK

変更 ID: 128611929

切り替え方法

アプリと Android 11 との互換性をテストする際に、以下の ADB コマンドを使用して、この変更をオンまたはオフに切り替えることができます。

adb shell am compat enable (128611929|CHANGE_BACKGROUND_CUSTOM_TOAST_BLOCK) PACKAGE_NAME
adb shell am compat disable (128611929|CHANGE_BACKGROUND_CUSTOM_TOAST_BLOCK) PACKAGE_NAME

互換性フレームワークと変更の切り替えについて詳しくは、Android 11 とのアプリの互換性をテストするをご覧ください。

Android 11 以降、カスタム トーストビューはサポートが終了します。アプリが Android 11 をターゲットとする場合、カスタムビューを含むトーストを、バックグラウンドから送信しようとするとブロックされます。Android の以前のバージョンをターゲットとする場合、カスタム トーストビューは引き続き機能しますが、使用はおすすめしません。

代わりに、可能であればスナックバーを使用することをおすすめします。バックグラウンドのアプリがユーザーにメッセージを送信する必要がある場合のように、スナックバーを使用できないアプリのユースケースでも、テキスト トーストなら新しい動作の変更で制限されないので、使用できます。

こうした変更について詳しくは、Android 11 でのトーストに関する更新をご覧ください。

接続

APN データベースへの制限付き読み取りアクセス

変更の詳細

変更の名前: APN_READING_PERMISSION_CHANGE_ID

変更 ID: 124107808

切り替え方法

アプリと Android 11 との互換性をテストする際に、以下の ADB コマンドを使用して、この変更をオンまたはオフに切り替えることができます。

adb shell am compat enable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME
adb shell am compat disable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME

互換性フレームワークと変更の切り替えについて詳しくは、Android 11 とのアプリの互換性をテストするをご覧ください。

Android 11 をターゲットとするアプリが電話通信プロバイダの APN データベースに対して読み取りまたはアクセスするのに、Manifest.permission.WRITE_APN_SETTINGS 特権が必須になりました。この権限を持たずに APN データベースにアクセスしようとすると、セキュリティ例外が発生します。

ユーザー補助

メタデータ ファイル内でユーザー補助機能ボタンの使用を宣言する

変更の詳細

変更の名前: REQUEST_ACCESSIBILITY_BUTTON_CHANGE

変更 ID: 136293963

切り替え方法

アプリと Android 11 との互換性をテストする際に、以下の ADB コマンドを使用して、この変更をオンまたはオフに切り替えることができます。

adb shell am compat enable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME
adb shell am compat disable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME

互換性フレームワークと変更の切り替えについて詳しくは、Android 11 とのアプリの互換性をテストするをご覧ください。

Android 11 以降、ユーザー補助サービスはランタイムにシステムのユーザー補助機能ボタンとの関連付けを宣言できなくなりました。AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTONAccessibilityServiceInfo オブジェクトの flags プロパティに追加しても、このフレームワークはユーザー補助機能ボタンのコールバック イベントをアプリのサービスに渡しません。

ユーザー補助サービスとユーザー補助機能ボタンの関連付けを宣言するには、代わりに、ユーザー補助サービスのメタデータ ファイル(通常は、res/raw/accessibilityservice.xml)で flagRequestAccessibilityButton フラグを使用してください。

カメラ

メディア インテントのアクションにはシステムのデフォルト カメラが必要

Android 11 以降では、プリインストールされているシステムカメラ アプリからのみ、以下のインテントのアクションに応答できます。

プリインストールされたシステムカメラ アプリが複数ある場合は、ユーザーがアプリを選択するダイアログが表示されます。特定のサードパーティ製カメラアプリを使用して画像や動画をキャプチャする場合は、インテントのパッケージ名またはコンポーネントを設定してそのインテントを明示できます。

アプリのパッケージングとインストール

圧縮リソース ファイル

変更の詳細

変更の名前: RESOURCES_ARSC_COMPRESSED

変更 ID: 132742131

切り替え方法

アプリと Android 11 との互換性をテストする際に、以下の ADB コマンドを使用して、この変更をオンまたはオフに切り替えることができます。

adb shell am compat enable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME
adb shell am compat disable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME

互換性フレームワークと変更の切り替えについて詳しくは、Android 11 とのアプリの互換性をテストするをご覧ください。

Android 11(API レベル 30)以上をターゲットとするアプリは、圧縮された resources.arsc ファイルが含まれている場合、またはこのファイルが 4 バイト境界に揃えられていない場合はインストールできません。これらの条件のいずれかが存在する場合、システムはこのファイルをメモリマップできません。メモリマップできないリソースのテーブルは、RAM のバッファに読み込まれる必要があり、システムに対する不要なメモリ負荷が発生し、デバイスの RAM 使用量が大幅に増加します。

APK 署名スキーム v2 が必要

Android 11(API レベル 30)をターゲットとするアプリのうち、APK 署名スキーム v1 でのみ署名されてきたアプリでは、APK 署名スキーム v2 以上での署名も必要になりました。APK 署名スキーム v1 でのみ署名されたアプリは、Android 11 を実行するデバイスではインストールまたはアップデートできません。

お使いのアプリが APK 署名スキーム v2 以降で署名されていることを確認するには、Android Studio を使用するか、コマンドラインから apksigner ツールを実行します。

Firebase

Firebase の JobDispatcher と GCMNetworkManager

アプリが API レベル 30 以上をターゲットとする場合、Firebase の JobDispatcher API 呼び出しと GcmNetworkManager API 呼び出しは、Android 6.0 API レベル 23 以上が稼働するデバイスでは無効になります。移行について詳しくは、Firebase JobDispatcher から WorkManager への移行GCMNetworkManager から WorkManager への移行をご覧ください。

デバイス間のファイル転送

Android 11 以降をターゲットとしているアプリの場合は、allowBackup 属性を使用してデバイス間でのファイル移行を無効にすることができなくなりました。システムではこの機能が自動的に有効になります。

ただし、アプリが Android 11 をターゲットとする場合でも、allowBackup 属性を false に設定すれば、アプリのファイルのクラウドベースのバックアップと復元を無効にできます。

OnSharedPreferenceChangeListener のコールバックの変更

変更の詳細

変更の名前: CALLBACK_ON_CLEAR_CHANGE

変更 ID: 119147584

切り替え方法

アプリと Android 11 との互換性をテストする際に、以下の ADB コマンドを使用して、この変更をオンまたはオフに切り替えることができます。

adb shell am compat enable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME
adb shell am compat disable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME

互換性フレームワークと変更の切り替えについて詳しくは、Android 11 とのアプリの互換性をテストするをご覧ください。

Android 11(API レベル 30)をターゲットとするアプリでは、Editor.clear が呼び出されるたびに、null キーで OnSharedPreferenceChangeListener.onSharedPreferenceChanged にコールバックされるようになりました。

非 SDK インターフェースの制限

Android 11 では、Android デベロッパーの協力や最新の内部テストに基づいて、制限対象となる非 SDK インターフェースのリストが更新されています。Google は可能であれば、非 SDK インターフェースを制限する前に、その代わりとなる公開インターフェースを利用できるようにしています。

Android 11 をターゲットとしないアプリの場合、この変更内容の一部は、すぐに影響するとは限りません。ただし、現時点では非 SDK インターフェース(アプリのターゲット API レベルによって異なる)を利用できていても、そのまま非 SDK のメソッドやフィールドを使用し続けていると、将来的にはアプリが機能しなくなる可能性が高くなります。

アプリが非 SDK インターフェースを使用しているかどうか不明な場合は、アプリをテストして確認することができます。アプリが非 SDK インターフェースに依存している場合は、SDK の代替インターフェースへの移行を計画してください。ただし Google も、一部のアプリには非 SDK インターフェースを使用する正当なユースケースがあると承知しています。現在のアプリの機能に使用している非 SDK インターフェースの代替となる SDK インターフェースが見つからない場合は、新しい公開 API をリクエストしてください。

Android の今回のリリースの変更点について詳しくは、非 SDK インターフェースの制限に関する Android 11 での変更点をご覧ください。非 SDK インターフェース全般について詳しくは、非 SDK インターフェースの制限をご覧ください。