動作の変更点: 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

互換性フレームワークと変更の切り替えについて詳しくは、アプリでのプラットフォームの動作変更のテストとデバッグをご覧ください。

ヒープポインタの最上位バイト(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 以降をターゲットとするアプリでは、テキスト トーストに関して、以下のような影響を受けます。

接続性

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_BUTTONAccessibilityServiceInfo オブジェクトの flags プロパティに追加しても、このフレームワークはユーザー補助機能ボタンのコールバック イベントをアプリのサービスに渡しません。

ユーザー補助サービスでユーザー補助コールバック イベントを受信するには、ユーザー補助サービスのメタデータ ファイルを使用して、ユーザー補助機能ボタンとサービスの関連付けを宣言します。accessibilityFlags 属性の定義に flagRequestAccessibilityButton 値を含めてください。ユーザー補助サービスのメタデータ ファイルの一般的な場所は res/raw/accessibilityservice.xml です。

カメラ

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

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(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 インターフェースの制限をご覧ください。