従来のリリースと同様に、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_NAME
adb 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
トーストのコールバック
テキスト トーストまたはカスタム トーストが表示されたとき、または表示されなくなったときに通知を受けるには、Android 11 で追加された addCallback()
メソッドを使用します。
Text Toast API の変更
Android 11 以降をターゲットとするアプリでは、テキスト トーストに関して、以下のような影響を受けます。
getView()
メソッドはnull
を返します。- 以下のメソッドの戻り値には実際の値が反映されないので、アプリはそれに依存しないようにする必要があります。
- 以下のメソッドは何も行わないので、アプリで使用しないでください。
接続性
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 をターゲットとするアプリが電話通信プロバイダの APN データベースに対して読み取りまたはアクセスするのに、Manifest.permission.WRITE_APN_SETTINGS
特権が必須になりました。この権限を持たずに APN データベースにアクセスしようとすると、セキュリティ例外が発生します。
ユーザー補助
マニフェスト ファイルで TTS エンジンとのインタラクションを宣言する
パッケージの公開設定の変更により、Android 11 をターゲットとし、テキスト読み上げ(TTS)エンジンとやり取りするアプリでは、次のように <queries>
要素をマニフェスト ファイルに追加する必要があります。
<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_NAME
adb shell am compat disable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME
互換性フレームワークと変更の切り替えについて詳しくは、アプリでのプラットフォームの動作変更のテストとデバッグをご覧ください。
Android 11 以降、ユーザー補助サービスではランタイムにシステムのユーザー補助機能ボタンとの関連付けを宣言できません。AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON
を AccessibilityServiceInfo
オブジェクトの flags
プロパティに追加しても、このフレームワークはユーザー補助機能ボタンのコールバック イベントをアプリのサービスに渡しません。
ユーザー補助サービスでユーザー補助コールバック イベントを受信するには、ユーザー補助サービスのメタデータ ファイルを使用して、ユーザー補助機能ボタンとサービスの関連付けを宣言します。accessibilityFlags
属性の定義に flagRequestAccessibilityButton
値を含めてください。ユーザー補助サービスのメタデータ ファイルの一般的な場所は res/raw/accessibilityservice.xml
です。
カメラ
メディア インテントのアクションにはシステムのデフォルト カメラが必要
Android 11 以降では、プリインストールされているシステムカメラ アプリからのみ、以下のインテントのアクションに応答できます。
android.media.action.VIDEO_CAPTURE
android.media.action.IMAGE_CAPTURE
android.media.action.IMAGE_CAPTURE_SECURE
プリインストールされたシステムカメラ アプリが複数ある場合は、ユーザーがアプリを選択するダイアログが表示されます。特定のサードパーティ製カメラアプリを使用して画像や動画をキャプチャする場合は、インテントのパッケージ名またはコンポーネントを設定してそのインテントを明示できます。
アプリのパッケージングとインストール
圧縮リソース ファイル
変更の詳細
変更の名前: 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(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 への移行をご覧ください。
音声認識
パッケージの公開設定の変更により、Android 11 をターゲットとし、音声認識サービスとやり取りするアプリは、次の <queries>
要素をマニフェスト ファイルに追加する必要があります。
<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_NAME
adb shell am compat disable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME
互換性フレームワークと変更の切り替えについて詳しくは、アプリでのプラットフォームの動作変更のテストとデバッグをご覧ください。
Android 11(API レベル 30)をターゲットとするアプリでは、Editor.clear
が呼び出されるたびに、null
キーで OnSharedPreferenceChangeListener.onSharedPreferenceChanged
にコールバックされるようになりました。
非 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 インターフェースの制限をご覧ください。