従来のリリースと同様に、Android 11 には、アプリに影響を与える可能性のある動作変更が含まれています。下記の動作変更は、Android 11 以上をターゲットとするアプリに限り適用されます。targetSdkVersion を 30 に設定するアプリの場合、必要に応じてアプリを修正し、下記の動作変更に対して適切に対応する必要があります。
Android 11 上で稼働するすべてのアプリに影響する動作変更のリスト についても必ずご確認ください。
プライバシー
Android 11 では、ユーザーのプライバシーを強化するために、以下のような変更や制限が導入されています。
- 対象範囲別ストレージの適用: 外部ストレージ ディレクトリへのアクセスは、アプリ固有のディレクトリと、そのアプリが作成した特定のメディアタイプに限られます。
- 許可のオートリセット: ユーザーが特定のアプリを数か月間使用しないと、システムがアプリの機密情報に関わる権限を自動リセットします。
- バックグラウンドでの位置情報へのアクセス: アプリにバックグラウンドでの位置情報の利用許可を付与するには、ユーザーをシステム設定に移動する必要があります。
- パッケージの公開設定: アプリがデバイスにインストール済みのアプリのリストを照会すると、返されるリストは フィルタされます。
詳細については、プライバシーに関するページをご覧ください。
セキュリティ
ヒープポインタのタグ付け
変更の詳細
変更の名前: NATIVE_HEAP_POINTER_TAGGING
変更 ID: 135754954
切り替え方法
アプリと Android 11 との互換性をテストする際に、以下の ADB コマンドを使用して、この変更をオンまたはオフに切り替えることができます。
adb shell am compat enable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAMEadb shell am compat disable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME
互換性フレームワークと変更の切り替えについて詳しくは、 アプリでのプラットフォームの動作変更のテストとデバッグをご覧ください。
ヒープポインタの最上位バイト(MSB)はゼロ以外の値のタグになりました。 この MSB を変更するなど、ポインタを間違って使用しているアプリはクラッシュするなどの問題が発生する可能性があります。この変更は、ARM メモリタグ付け拡張機能(MTE)を有効にするハードウェアを今後サポートするために必要なものです。詳細については、 タグ付きポインタをご覧ください。
この機能を無効にする方法については、allowNativeHeapPointerTagging
マニフェストのドキュメントをご覧ください。
トーストの更新
バックグラウンドからのカスタム トーストのブロック
セキュリティ上の理由と、良好なユーザー エクスペリエンスを維持するため、Android 11
以降をターゲットとするアプリが、カスタムビューを含むトーストをバックグラウンドから送信するとブロックされます。テキスト トーストは引き続き使用できます。これは、Toast.makeText() を使って作成され、setView() を呼び出さないトーストのことです。
アプリがカスタムビューを含むトーストをバックグラウンドから送信しようとする場合、ユーザーにはメッセージは表示されません。代わりに、logcat に次のメッセージが記録されます。
W/NotificationService: Blocking custom toast from package \ <package> due to package not in the foreground
トーストのコールバック
テキスト トーストまたはカスタム トーストが表示されたとき、または表示されなくなったときに通知を受けるには、
addCallback()
メソッドを使用します。これは Android 11 で追加されました。
Text Toast API の変更
Android 11 以降をターゲットとするアプリでは、テキスト トーストに関して、以下のような影響を受けます。
getView()メソッド はnullを返します。- 以下のメソッドの戻り値には実際の値が反映されないので、アプリはそれに依存しないようにする必要があります。
- 以下のメソッドは NoOps なので、アプリで使用しないでください。
接続
APN データベースへの制限付き読み取りアクセス
変更の詳細
変更の名前: APN_READING_PERMISSION_CHANGE_ID
変更 ID: 124107808
切り替え方法
アプリと Android 11 との互換性をテストする際に、以下の ADB コマンドを使用して、この変更をオンまたはオフに切り替えることができます。
adb shell am compat enable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAMEadb shell am compat disable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME
互換性フレームワークと変更の切り替えについて詳しくは、 アプリでのプラットフォームの動作変更のテストとデバッグをご覧ください。
Android 11 をターゲットとするアプリが
Manifest.permission.WRITE_APN_SETTINGS
特権権限を必要とするようになりました。これは、Telephony
プロバイダの APN データベースを読み取るかアクセスするためです。この権限を持たずに APN データベースにアクセスしようとすると、セキュリティ例外が発生します。
ユーザー補助
マニフェスト ファイルで TTS エンジンとのインタラクションを宣言する
<queries> <intent> <action android:name="android.intent.action.TTS_SERVICE" /> </intent> </queries>
メタデータ ファイル内でユーザー補助機能ボタンの使用を宣言する
変更の詳細
変更の名前: REQUEST_ACCESSIBILITY_BUTTON_CHANGE
変更 ID: 136293963
切り替え方法
アプリと Android 11 との互換性をテストする際に、以下の ADB コマンドを使用して、この変更をオンまたはオフに切り替えることができます。
adb shell am compat enable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAMEadb shell am compat disable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME
互換性フレームワークと変更の切り替えについて詳しくは、 アプリでのプラットフォームの動作変更のテストとデバッグをご覧ください。
Android 11 以降、ユーザー補助サービスではランタイムにシステムのユーザー補助機能ボタンとの関連付けを宣言できません。AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON を flags オブジェクトの AccessibilityServiceInfo プロパティに追加しても、このフレームワークはユーザー補助機能ボタンのコールバック イベントをアプリのサービスに渡しません。
ユーザー補助サービスでユーザー補助コールバック イベントを受信するには、ユーザー補助サービスのメタデータ
ファイルを使用して、ユーザー補助機能ボタンとサービスの関連付けを宣言します。accessibilityFlags 属性の定義に flagRequestAccessibilityButton 値を含めてください。ユーザー補助サービスのメタデータ ファイルの一般的な場所は res/raw/accessibilityservice.xml です。
カメラ
メディア インテントのアクションにはシステムのデフォルト カメラが必要
Android 11 以降では、プリインストールされているシステムカメラ アプリからのみ、以下のインテントのアクションに応答できます。
android.media.action.VIDEO_CAPTUREandroid.media.action.IMAGE_CAPTUREandroid.media.action.IMAGE_CAPTURE_SECURE
プリインストールされたシステムカメラ アプリが複数ある場合は、ユーザーがアプリを選択するダイアログが表示されます。特定のサードパーティ製カメラアプリを使用して画像や動画をキャプチャする場合は、インテントのパッケージ名またはコンポーネントを設定してそのインテントを明示できます。
アプリのパッケージングとインストール
圧縮リソース ファイル
変更の詳細
変更の名前: RESOURCES_ARSC_COMPRESSED
変更 ID: 132742131
切り替え方法
アプリと Android 11 との互換性をテストする際に、以下の ADB コマンドを使用して、この変更をオンまたはオフに切り替えることができます。
adb shell am compat enable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAMEadb shell am compat disable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME
互換性フレームワークと変更の切り替えについて詳しくは、 アプリでのプラットフォームの動作変更のテストとデバッグをご覧ください。
Android 11(API レベル 30)以上をターゲットとするアプリは、圧縮された resources.arsc
ファイルが含まれている場合、またはこのファイルが 4
バイト境界に揃えられていない場合はインストールできません。 これらの条件のいずれかが存在する場合、システムはこのファイルをメモリマップできません。メモリマップできないリソースのテーブルは、RAM のバッファに読み込まれる必要があり、システムに対する不要なメモリ負荷が発生し、デバイスの RAM 使用量が大幅に増加します。
以前に圧縮された resources.arsc ファイルを使用していた場合は、アプリのリソースの縮小や、アプリの縮小、難読化、最適化を行う他の方法など、代替戦略を試してください。
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 への移行をご覧ください。
音声認識
<queries> <intent> <action android:name="android.speech.RecognitionService" /> </intent> </queries>
OnSharedPreferenceChangeListener のコールバックの変更
変更の詳細
変更の名前: CALLBACK_ON_CLEAR_CHANGE
変更 ID: 119147584
切り替え方法
アプリと Android 11 との互換性をテストする際に、以下の ADB コマンドを使用して、この変更をオンまたはオフに切り替えることができます。
adb shell am compat enable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAMEadb shell am compat disable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME
互換性フレームワークと変更の切り替えについて詳しくは、 アプリでのプラットフォームの動作変更のテストとデバッグをご覧ください。
Android 11(API レベル 30)をターゲットとするアプリでは、
Editor.clear
が呼び出されるたびに、
OnSharedPreferenceChangeListener.onSharedPreferenceChanged
にnullキーでコールバックされるようになりました。
非 SDK インターフェースの制限
Android 11 では、Android デベロッパーの協力や最新の内部テストに基づいて、制限対象となる非 SDK インターフェースのリストが更新されています。Google は、非 SDK インターフェースを制限する前に、可能な限り、その代わりとなる公開インターフェースを利用可能にしています。
Android 11 をターゲットとしないアプリの場合、この変更内容の一部は、すぐに影響するとは限りません。ただし、現時点で(アプリの対象 API レベルに応じて)一部の非 SDK インターフェースを利用できていても、非 SDK のメソッドまたはフィールドをそのまま使用し続けると、将来的にアプリが機能しなくなるリスクが高くなります。
アプリが非 SDK インターフェースを使用しているかどうか不明な場合は、アプリをテストして確認できます。アプリが非 SDK インターフェースに依存している場合は、SDK の代替インターフェースへの移行を計画してください。ただし Google も、一部のアプリには非 SDK インターフェースを使用する正当なユースケースがあると承知しています。アプリの機能で使用している非 SDK インターフェースの代替インターフェースが見つからない場合は、新しい公開 API をリクエストしてください。
Android の今回のリリースの変更点について詳しくは、非 SDK インターフェースの制限に関する Android 11 での変更点をご覧ください。非 SDK インターフェース全般について詳しくは、非 SDK インターフェースの制限をご覧ください。