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

Android 11 プラットフォームには、アプリに影響を与える可能性のある動作変更が含まれています。下記の動作変更は、Android 11 以上をターゲットとするアプリに限り適用されます。targetSdkVersion を "android-R" に設定するアプリの場合、必要に応じてアプリを修正し、下記の動作変更に対して適切に対応する必要があります。

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

プライバシー

Android 11 では、ユーザーのプライバシー保護を強化するための多くの変更や制限が導入されています。詳細については、プライバシーに関するページをご覧ください。

圧縮されたリソース ファイル

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

接続

パフォーマンスに優れた VPN

API レベル "R" 以上をターゲットとするアプリや、API レベル 29 以上で起動するデバイス上のアプリでは、ユーザー設定の VPN でも、アプリベースの VPN でも IKEv2/IPsec を適用できます。

VPN はオペレーティング システム ネイティブとして実行され、アプリ内で IKEv2/IPset VPN 接続を確立するのに必要なコードが簡素化されます。

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 データベースにアクセスしようとすると、セキュリティ例外が発生します。

プロセスごとのネットワーク アクセス制御

Android 11 以降、ユーザーのプライベート データを扱うアプリでは、プロセスごとにネットワーク アクセス権を付与できます。ネットワークへのアクセスを許可するプロセスを明示することにより、データをアップロードする必要のないコードをすべて分離します。

アプリが誤ってデータをアップロードするのを防ぐという保証はできませんが、アプリのバグが原因でデータが漏洩する可能性を低くすることができます。

次に、この新しい機能を使用するマニフェスト ファイルのサンプルを示します。

<processes>
    <process />
    <deny-permission android:name="android.permission.INTERNET" />
    <process android:process=":withoutnet1" />
    <process android:process="com.android.cts.useprocess.withnet1">
        <allow-permission android:name="android.permission.INTERNET" />
    </process>
    <allow-permission android:name="android.permission.INTERNET" />
    <process android:process=":withoutnet2">
        <deny-permission android:name="android.permission.INTERNET" />
    </process>
    <process android:process="com.android.cts.useprocess.withnet2" />
</processes>

同じ FQDN を使って複数の Passpoint 設定をインストールできる

Android 11 以降では、PasspointConfiguration.getUniqueId() を使って PasspointConfiguration オブジェクトの一意の識別子を取得できます。それにより、アプリのユーザーが同じ完全修飾ドメイン名(FQDN)を使って複数のプロファイルをインストールできるようになります。

この機能は、携帯通信会社がモバイル カントリー コード(MCC)とモバイル ネットワーク コード(MNC)の複数の組み合わせをネットワーク上にデプロイし、FQDN は 1 つしかない場合に便利です。Android 11 以上では、ユーザーが MCC または MNC を使用して SIM をインストールする場合、ネットワークに一致する、ホーム プロバイダと同じ FQDN を持つ複数のプロファイルをインストールできます。

セキュリティ

MAC のランダム化

Android 10(API レベル 29)以下をターゲットとするアプリでは、Passpoint が同じプロファイルの別の SSID に接続できるため、MAC のランダム化は SSID ごとに行われます。Android 11(API レベル "R")以上をターゲットとするアプリでは、Passpoint ネットワークの MAC ランダム化が完全修飾ドメイン名(FQDN)ごとに変更されます。

API レベル "R" 以上をターゲットとするアプリでは、非特権アプリがデバイスの MAC アドレスにアクセスできなくなります。IPv4 アドレスを持つネットワーク インターフェースしか確認できません。これにより、getifaddrs() メソッドと NetworkInterface.getHardwareAddress() メソッドのほか、RTM_GETLINK netlink メッセージの送信が影響を受けます。

この変更がアプリに与える影響は次のとおりです。

  • NetworkInterface.getHardwareAddress() はどのインターフェースにも null を返します。
  • アプリは NETLINK_ROUTE ソケット上で bind() 関数を使用できません。
  • ip コマンドはインターフェースに関する情報を返しません。

上記の変更は、MAC アドレスは使用しないで説明されるガイダンスを適用するものです。

デベロッパーは通常、下位レベルの NetworkInterface API や getifaddrs() API ではなく、ConnectivityManager の上位レベル API を使用してください。

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

変更の詳細

変更の名前: 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 でのトーストに関する更新をご覧ください。

Firebase

Firebase の JobDispatcher と GCMNetworkManager

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