Android 11 とのアプリの互換性をテストする

Android 11 には、最新版のプラットフォームでの動作変更に対してアプリをテスト、デバッグするための新しいツールが導入されています。これらのツールは、アプリ デベロッパーが変更点を個々にオンまたはオフにできる新しい互換性フレームワークの一部です。この柔軟性を活かして、変更点を 1 つだけオフに切り替えてプラットフォーム内の他の変更点に対してテストを続行したり、動作変更を一度に 1 つずつに分離してテストしたりできます。

すべてのアプリに影響する変更と、Android 11 をターゲットとするアプリにのみ影響する変更の、2 種類の動作変更を切り替えることができます。

有効になっている変更を識別する方法

現在有効になっている動作変更を確認するには、開発者向けオプション、logcat、または ADB コマンドを使用します。

有効になっている変更を開発者向けオプションを使用して特定する

図 1. 開発者向けオプションでの [アプリの互換性の変更] 画面

デバイスの開発者向けオプションで、現在有効になっている変更を確認し、変更のオンとオフを切り替えられます。これらのオプションにアクセスする手順は次のとおりです。

  1. 開発者向けオプションがまだ有効になっていない場合は、有効にします
  2. デバイスの設定アプリを開き、[システム] > [詳細設定] > [開発者向けオプション] > [アプリの互換性の変更] に移動します。
  3. リストからアプリを選択します。

各動作変更は通常、次の 2 つのカテゴリのどちらかに属します。

  • アプリの targetSdkVersion にかかわらず、Android 11 で実行されるすべてのアプリに影響する変更。

    この種の変更は、互換性フレームワークでデフォルトで有効になり、UI の [デフォルトで有効な変更] 欄に表示されます。

  • Android 11 をターゲットとするアプリのみに影響する変更。

    この種の変更は、アプリが Android 11 をターゲットとしている場合に、互換性フレームワークでデフォルトで有効になり、UI の [SDK 29 の後に有効] 欄に表示されます。

図 1 に示すように [デフォルトで無効な変更] という欄もあります。 この欄に含まれる変更は通常、試験運用版の変更であり、今後のデベロッパー プレビューまたはベータ版のリリースで削除されない限り、他の 2 つのカテゴリのどちらかにおそらく移動します。

有効になっている変更を logcat を使用して特定する

各動作変更について、影響受けた API をアプリのプロセスで初めて呼び出すとき、システムは次のような logcat メッセージを出力します。

D CompatibilityChangeReporter: Compat change id reported: 141455849; UID 10265; state: ENABLED

各 logcat メッセージには以下の情報が含まれます。

変更 ID
アプリに影響を与える変更点を示します。この値は、[アプリの互換性の変更] 画面のリストに表示される動作変更のいずれか 1 つに対応しています(図 1 をご覧ください)。上記の例では、141455849ANONYMIZED_DEVICE_ADDRESS_CHANGE_ID に対応しています。
UID
この変更でどのアプリが影響を受けるかを示します。
状態

アプリが現在変更の影響を受けているかどうかを示します。

状態は次のいずれかの値です。

状態 意味
ENABLED 現在、変更は有効であり、変更された API をアプリが使用する場合、その変更はアプリの動作に影響します。
DISABLED

現在、変更は無効であり、アプリには影響しません。

注: アプリの targetSDKVersion が必須のしきい値より小さい(アプリが Android 11 をターゲットとしていない)ためにこの変更が無効になっている場合、アプリが Android 11 をターゲットとするように targetSDKVersion の値を増やすと、この変更はデフォルトで有効になります。

LOGGED 変更は、互換性フレームワークを通じてログに記録されますが、オンまたはオフに切り替えることはできません。この変更を切り替えられなくても、アプリの動作が影響を受けることがあります。詳細については、動作変更の一覧で変更に関する説明をご覧ください。多くの場合、この種の変更は試験的なものであり、無視できます。

有効になっている変更を ADB を使用して特定する

次の ADB コマンドを実行して、そのデバイス全体での変更の一覧(有効と無効の両方)をすべて表示します。

adb shell dumpsys platform_compat

出力には、各変更の以下の情報が表示されます。

変更 ID
この動作変更の一意の識別子(例: 141455849)。
名前
この動作変更の名前(例: ANONYMIZED_DEVICE_ADDRESS_CHANGE_ID)。
targetSDKVersion の条件

どの targetSDKVersion が変更の条件となるか(該当する場合)。

たとえば、この変更が SDK バージョン 30 以上をターゲットとするアプリでのみ有効になる場合、enableAfterTargetSdk=29 が出力されます。変更が targetSDKVersion を条件としない場合、enableAfterTargetSdk=0 が出力されます。

パッケージのオーバーライド

変更のデフォルトの状態(有効または無効)がオーバーライドされた各パッケージの名前。

たとえば、デフォルトで有効になる変更の場合、開発者向けオプションまたは ADB を使用して変更をオフに切り替えると、アプリのパッケージ名が表示されます。この場合、出力は次のようになります。

packageOverrides={com.my.package=false}

targetSDKVersion を条件とする変更はデフォルトで有効になったり無効になったりするので、そのアプリの各 targetSDKVersion に応じて、パッケージのリストには true と false の両方のインスタンスが含まれることがあります。次に例を示します。

packageOverrides={com.my.package=true, com.another.package=false}

変更を切り替えるとき

互換性フレームワークの主な目的は、Android の新しいバージョンでアプリをテストする際のコントロールと柔軟性を提供することです。

変更をオフに切り替えるとき

すべてのアプリに影響する変更は、アプリの targetSDKVersion の値に関係なく、プラットフォームの特定のバージョンでデフォルトで有効になります。通常、このような変更に対して先にアプリをテストして更新し、プラットフォームのそのバージョンでユーザーがアプリを使用したときのデグレードを防ぐことをおすすめします。また、Android の公開リリースビルドを使用する場合(エンドユーザーのセキュリティを保護するため)、このような変更はオフに切り替えられないので、このような変更のテストを優先することも必要です。

アプリが特定の targetSDKVersion をターゲットとする場合、そのバージョンを条件とする変更も、デフォルトで有効になります。

アプリはこのような複数の変更の影響を受ける可能性があるため、これらの変更を 1 つずつオフに切り替えることができます。アプリがクラッシュする場合は、この方法を使用して、プラットフォームのどの変更でアプリがクラッシュするかを判断できます。

変更をオンに切り替えるとき

特定の targetSDKVersion を条件とする変更は、条件となるバージョンよりも低い SDK バージョンをアプリがターゲットとする場合は、デフォルトで無効になります。場合によっては、このような変更を有効にすることもできます。

たとえば、次の targetSdkVersion で行われるプラットフォームでの一連の変更に対してアプリをテストすることが考えられます。開発者向けオプションまたは ADB コマンドを使用すると、アプリ マニフェストを変更してすべての変更を一度に有効にするのではなく、条件付きの各変更を 1 つずつ有効にしてテストすることができます。これにより、変更を別々にテストし、アプリの複数の部分を一度にデバッグや更新することは避けて、コントロールできるようになります。

変更をオンまたはオフに切り替える

互換性フレームワークでは、開発者向けオプションまたは ADB コマンドを使用して各変更をオンまたはオフに切り替えられます。変更をオンまたはオフに切り替えるとアプリがクラッシュしたり、重要なセキュリティ上の変更が無効になったりするおそれがあるため、変更を切り替えるタイミングにはある程度制限があります。

開発者向けオプションを使用して変更を切り替える

開発者向けオプションを使用して変更をオンまたはオフに切り替えます。開発者向けオプションを確認する手順は次のとおりです。

  1. 開発者向けオプションがまだ有効になっていない場合は、有効にします
  2. デバイスの設定アプリを開き、[システム] > [詳細設定] > [開発者向けオプション] > [アプリの互換性の変更] に移動します。
  3. リストからアプリを選択します。
  4. 変更点のリストから、オンまたはオフに切り替える変更を探し、そのスイッチをタップします。

    オンまたはオフに切り替えられる変更のリスト

ADB を使用して変更を切り替える

ADB を使用して変更をオンまたはオフに切り替えるには、次のどちらかのコマンドを実行します。

adb shell am compat enable (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME
adb shell am compat disable (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME

CHANGE_ID(例: 141455849)か CHANGE_NAME(例: ANONYMIZED_DEVICE_ADDRESS_CHANGE_ID)のどちらかと、アプリの PACKAGE_NAME を渡します。

次のコマンドを使用して、変更をデフォルトの状態に戻し、ADB または開発者向けオプションを使用して設定したオーバーライドを削除することもできます。

adb shell am compat reset (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME

変更の切り替えに関する制限

デフォルトでは、動作変更はそれぞれ有効または無効になっています。すべてのアプリに影響する変更は、デフォルトで有効です。その他の変更は、targetSdkVersion を条件とします。このような変更は、アプリのターゲットがその変更に対応する SDK バージョンと同じかそれより高い場合、デフォルトで有効になり、アプリのターゲットとする SDK バージョンが条件のバージョンより低い場合、デフォルトで無効になります。デベロッパーが変更をオンまたはオフに切り替えると、デフォルトの状態がオーバーライドされます。

互換性フレームワークが不正使用されるのを防ぐため、変更を切り替えるタイミングにはある程度制限があります。変更を切り替えられるかどうかは、変更の種類、アプリがデバッグ可能かどうか、およびデバイスで実行されているビルドの種類によって異なります。次の表に、どの種類の変更をいつ切り替えられるかを示します。

ビルドの種類 デバッグできないアプリ デバッグ可能なアプリ
すべての変更 targetSDKVersion を条件とする変更 その他すべての変更
デベロッパー プレビュー ビルド、ベータ版ビルド 切り替えられない 切り替えられる 切り替えられる
ユーザー向け公開ビルド 切り替えられない 切り替えられる 切り替えられない

互換性フレームワークに含まれる動作変更

このセクションでは、Android 11 の最新のデベロッパー プレビュー ビルドで互換性フレームワークに含まれる各動作変更について説明します。このリストを参照して、アプリのテストとデバッグの際に、開発者向けオプションと ADB コマンドを使用してください。

ADD_CONTENT_OBSERVER_FLAGS

変更 ID: 150939131

デフォルトの状態: Android 11(API レベル 30)以上をターゲットとするアプリで有効。

Android 11 をターゲットとするアプリの場合、整数の flags 引数を含む新しい公開 API のオーバーロード onChange(boolean, Uri, int) があります。

この新しいメソッドは、整数の userId 引数を含む、非 SDK onChange() のオーバーロードされたメソッドを使用するアプリ用の代替公開 SDK です。

ADMIN_APP_PASSWORD_COMPLEXITY

変更 ID: 123562444

デフォルトの状態: Android 11(API レベル 30)以上をターゲットとするアプリで有効。

Android 11 をターゲットとする管理アプリの場合、現在割り当てられているパスワードの品質と関連のないパスワード要件がアプリで設定されたらエラーをスローしてください。たとえば、パスワードの品質が DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED に設定されている場合、アプリで最小パスワード長を設定することはできません。この場合、最小パスワード長を設定しようとする前に、アプリはまず setPasswordQuality() メソッドを呼び出してから、setPasswordMinimumLength() メソッドを呼び出す必要があります。

さらに、Android 11 をターゲットとする管理アプリがパスワード品質を下げる場合、適用されなくなる既存のパスワード要件はデフォルト値にリセットされます。

APP_DATA_DIRECTORY_ISOLATION

変更 ID: 143937733

デフォルトの状態: Android 11(API レベル 30)以上をターゲットとするアプリで有効。

Android 11 をターゲットとするアプリは、別のどのアプリについても、そのアプリのターゲット SDK のバージョンにかかわらず、そのアプリのプライベート データのディレクトリあるファイルにアクセスできなくなります。

詳細については、プライベート ディレクトリへのアクセスをご覧ください。

APN_READING_PERMISSION_CHANGE_ID

変更 ID: 124107808

デフォルトの状態: Android 11(API レベル 30)以上をターゲットとするアプリで有効。

Android 11 をターゲットとするアプリの場合、APN データベースにアクセスするには、Manifest.permission.WRITE_APN_SETTINGS 権限が必須になりました。

この変更について詳しくは、APN データベースへの制限付き読み取りアクセスをご覧ください。

BACKGROUND_RATIONALE_CHANGE_ID

変更 ID: 147316723

デフォルトの状態: Android 11(API レベル 30)以上をターゲットとするアプリで有効。

アプリがバックグラウンドでデバイスの位置情報へのアクセスをリクエストするたびに、有効な根拠を提示することが必須になりました。

この変更について詳しくは、Android 11 での位置情報に関連するプライバシーの変更について説明している、バックグラウンドの位置情報へのアクセスをご覧ください。

CALLBACK_ON_CLEAR_CHANGE

変更 ID: 119147584

デフォルトの状態: Android 11(API レベル 30)以上をターゲットとするアプリで有効。

Editor.clear が呼び出されるたびに、OnSharedPreferenceChangeListener.onSharedPreferenceChanged へのコールバックが行われ、null 鍵が渡されるようになりました。

この変更について詳しくは、OnSharedPreferenceChangeListener のコールバックの変更をご覧ください。

CALLBACK_ON_MORE_ERROR_CODE_CHANGE

変更 ID: 130595455

デフォルトの状態: Android 11(API レベル 30)以上をターゲットとするアプリで有効。

updateAvailableNetworks(List, Executor, Consumer)setPreferredOpportunisticDataSubscription(int, boolean, Executor, Consumer) のエラーコードが拡張されました。

CALL_BACK_ON_CHANGED_LISTENER_WITH_SWITCHED_OP_CHANGE

変更 ID: 148180766

デフォルトの状態: Android 11(API レベル 30)以上をターゲットとするアプリで有効。

これは startWatchingMode(String, String, AppOpsManager.OnOpChangedListener) に対する小さな動作変更です。 この変更を行う前、システムは切り替えられる操作に対してコールバックしていました。変更後、システムは実際にリクエストされた操作に対してコールバックするか、操作が指定されていない場合は切り替えられるすべての操作に対してコールバックします。

CAMERA_MICROPHONE_CAPABILITY_CHANGE_ID

変更 ID: 136219221

デフォルトの状態: Android 11(API レベル 30)以上をターゲットとするアプリで有効。

Android 11 をターゲットとするアプリでは、マニフェスト ファイルに R.attr.foregroundServiceType がそれぞれ ServiceInfo.FOREGROUND_SERVICE_TYPE_CAMERA または ServiceInfo.FOREGROUND_SERVICE_TYPE_MICROPHONE として設定されている場合のみ、フォアグラウンド サービスがカメラまたはマイクの使用中の機能を受け取ります。Android の以前のバージョンでは、フォアグラウンド サービスは自動的にカメラとマイクの機能を受け取っていました。

この変更について詳しくは、Android 11 でのフォアグラウンド サービスのタイプをご覧ください。

CHANGE_BACKGROUND_CUSTOM_TOAST_BLOCK

変更 ID: 128611929

デフォルトの状態: Android 11(API レベル 30)以上をターゲットとするアプリで有効。

アプリはバックグラウンドでカスタム トーストを掲載できなくなりました。ただし、アプリは引き続きバックグラウンドでも Toast.makeText(Context, CharSequence, int) メソッドとそのバリアントを使って、トーストを掲載できます。

この変更について詳しくは、カスタム トースト ビューのブロックをご覧ください。

CHANGE_RESTRICT_SAW_INTENT

変更 ID: 135920175

デフォルトの状態: この変更は切り替えられません。互換性フレームワークによってログに記録されるだけです。

android.settings.MANAGE_APP_OVERLAY_PERMISSION アクションと package データ URI スキームを使用するインテントは、関連付けられた権限を管理するためのアプリ固有の画面には、ユーザーを移動しなくなりました。代わりに、その権限をリクエストしたことがあるすべてのアプリを管理できる画面に、ユーザーを移動します。

CHANGE_TEXT_TOASTS_IN_THE_SYSTEM

変更 ID: 147798919

デフォルトの状態: Android 11(API レベル 30)以上をターゲットとするアプリで有効。

テキスト トーストは、アプリ内ではなく SystemUI でレンダリングされるようになりました。これにより、アプリがカスタム トーストをバックグラウンドで送信する際の制限の回避が阻止されます。

DEFAULT_SCOPED_STORAGE

変更 ID: 149924527

デフォルトの状態: すべてのアプリに対して有効。

Android 11 をターゲットとするアプリはすべてデフォルトで対象範囲別ストレージを使用するようになり、対象範囲別ストレージをオプトアウトできなくなりました。

ただし、アプリのターゲット SDK のバージョンやマニフェスト フラグの値にかかわらず、この変更をオフにすることで、対象範囲別ストレージを使わずにアプリをテストできます。

Android 11 での対象範囲別ストレージへの変更について詳しくは、Android 11 での動作の変更に関するページの対象範囲別ストレージのセクションをご覧ください。

EMPTY_INTENT_ACTION_CATEGORY

変更 ID: 151163173

デフォルトの状態: Android 11(API レベル 30)以上をターゲットとするアプリで有効。

Android 11 をターゲットとするアプリでは、インテント フィルタの action または category が空の文字列の場合、システムがエラーをスローするようになりました。Android 11 より前のプラットフォームにはバグがあり、このような場合にはエラーをスローせずに通過できました。これには、属性が null または欠落している場合は含まれませんのでご注意ください。その場合は常にエラーがスローされます。

FILTER_APPLICATION_QUERY

変更 ID: 135549675

デフォルトの状態: Android 11(API レベル 30)以上をターゲットとするアプリで有効。

アプリがデバイス上の他のアプリの詳細情報を取得する前に、使用する予定のパッケージとインテントを宣言することが必須になりました。このような宣言は、アプリのマニフェストで <queries> タグを使って行う必要があります。

Android 11 での他のインストール済みアプリに対してクエリや操作を行う方法について詳しくは、パッケージの公開設定に関するプライバシーのページをご覧ください。

FORCE_ENABLE_SCOPED_STORAGE

変更 ID: 132649864

デフォルトの状態: すべてのアプリで無効。

Android 11 をターゲットとするアプリはすべてデフォルトで対象範囲別ストレージを使用するようになり、対象範囲別ストレージをオプトアウトできなくなりました。

ただし、Android 10(API レベル 29)以下を引き続きターゲットとするアプリでは、アプリのターゲット SDK のバージョンやマニフェスト フラグの値にかかわらず、この変更をオンにすることで、対象範囲別ストレージを使ってアプリをテストできます。

Android 11 での対象範囲別ストレージへの変更について詳しくは、Android 11 での動作の変更に関するページの対象範囲別ストレージのセクションをご覧ください。

GET_DATA_CONNECTION_STATE_R_VERSION

変更 ID: 148535736

デフォルトの状態: Android 11(API レベル 30)以上をターゲットとするアプリで有効。

PreciseDataConnectionState#getDataConnectionState の SDK のバージョンを確認するための変更です。

GET_DATA_STATE_R_VERSION

変更 ID: 148534348

デフォルトの状態: Android 11(API レベル 30)以上をターゲットとするアプリで有効。

getDataState() の SDK のバージョンを確認するための変更です。

GET_PROVIDER_SECURITY_EXCEPTIONS

変更 ID: 150935354

デフォルトの状態: Android 11(API レベル 30)以上をターゲットとするアプリで有効。

Android 11(API レベル 30)以上をターゲットとするアプリでは、getProvider(String) がセキュリティ例外をスローしなくなりました。

GET_TARGET_SDK_VERSION_CODE_CHANGE

変更 ID: 145147528

デフォルトの状態: Android 10(API レベル 29)以上をターゲットとするアプリで有効。

SmsManager.sendResolverResult() メソッドの SDK のバージョンを確認するための変更です。

GWP_ASAN

変更 ID: 135634846

デフォルトの状態: すべてのアプリで無効。

サンプリングされるネイティブ メモリのバグ検出をアプリで有効にします。

この変更について詳しくは、GWP-ASan ガイドをご覧ください。

HIDE_MAXTARGETSDK_P_HIDDEN_APIS

変更 ID: 149997251

デフォルトの状態: Android 10(API レベル 29)以上をターゲットとするアプリで有効。

Android 10(API レベル 29)以上をターゲットとするアプリでは、Android 10(API レベル 29)の max-target-pgreylist-max-p)リストの一部であるすべての非 SDK インターフェースへのアクセス権が削除されます。

HIDE_MAXTARGETSDK_Q_HIDDEN_APIS

変更 ID: 149994052

デフォルトの状態: Android 11(API レベル 30)以上をターゲットとするアプリで有効。

Android 11(API レベル 30)以上をターゲットとするアプリでは、Android 11(API レベル 30)の max-target-qgreylist-max-q)リストの一部であるすべての非 SDK インターフェースへのアクセス権が削除されます。

この変更について詳しくは、Android 11 でブロックされるようになった非 SDK インターフェースをご覧ください。

LISTEN_CODE_CHANGE

変更 ID: 147600208

デフォルトの状態: Android 10(API レベル 29)以上をターゲットとするアプリで有効。

listenForSubscriber(int, String, String, PhoneStateListener, int, boolean) の SDK のバージョンを確認するための変更です。

MISSING_APP_TAG

変更 ID: 150776642

デフォルトの状態: Android 11(API レベル 30)以上をターゲットとするアプリで有効。

Android 11 をターゲットとするアプリでは、アプリのマニフェスト ファイルに application タグまたは instrumentation タグがない場合にエラーがスローされるようになりました。

NATIVE_HEAP_POINTER_TAGGING

変更 ID: 135754954

デフォルトの状態: Android 11(API レベル 30)以上をターゲットとするアプリで有効。

Android 11 をターゲットとするアプリの場合、ネイティブ ヒープ割り当てで、最上位バイトはゼロ以外のタグになりました。

詳細については、ヒープポインタのタグ付けをご覧ください。

PHONE_STATE_LISTENER_LIMIT_CHANGE_ID

変更 ID: 150880553

デフォルトの状態: すべてのアプリに対して有効。

Android 11 をターゲットとするアプリでは、任意のプロセスが TelephonyManager.listen(PhoneStateListener, int) を介して登録できる PhoneStateListener オブジェクトの数を制限するようになりました。デフォルトの上限は 50 です。これは、リモート デバイス設定の更新に応じて変更される可能性があります。この制限は、攻撃プロセスが登録しようとしているリスナーが多すぎる場合に、TelephonyManager.listen(PhoneStateListener, int) からスローされる IllegalStateException によって適用されます。

PREVENT_META_REFLECTION_BLACKLIST_ACCESS

変更 ID: 142365358

デフォルトの状態: Android 11(API レベル 30)以上をターゲットとするアプリで有効。

Android 11 をターゲットとするアプリでは、制限付きの非 SDK インターフェースにアクセスするために追加するリフレクションのレイヤを使用できなくなりました。

PROCESS_CAPABILITY_CHANGE_ID

変更 ID: 136274596

デフォルトの状態: Android 11(API レベル 30)以上をターゲットとするアプリで有効。

Android 11 をターゲットとするアプリの場合、フラグ Context.BIND_INCLUDE_CAPABILITIES を使って、クライアント プロセスから、バインドされたサービスに、使用中の機能を渡せるようになりました。

REMOVE_ANDROID_TEST_BASE

変更 ID: 133396946

デフォルトの状態: Android 11(API レベル 30)以上をターゲットとするアプリで有効。

Android 11 をターゲットとするアプリが、android.test.base ライブラリのクラスに依存する android.test.runner に依存しない場合、android.test.base ライブラリが削除されるようになりました。

REQUEST_ACCESSIBILITY_BUTTON_CHANGE

変更 ID: 136293963

デフォルトの状態: Android 11(API レベル 30)以上をターゲットとするアプリで有効。

Android 11 をターゲットとするユーザー補助サービスの場合、そのサービスのメタデータ ファイルで FLAG_REQUEST_ACCESSIBILITY_BUTTON フラグの指定が必須になりました。 それ以外の場合、このフラグは無視されます。

この変更について詳しくは、メタデータ ファイル内でユーザー補助機能ボタンの使用を宣言するをご覧ください。

RESOURCES_ARSC_COMPRESSED

変更 ID: 132742131

デフォルトの状態: Android 11(API レベル 30)以上をターゲットとするアプリで有効。

Android 11(API レベル 30)をターゲットとするアプリは、圧縮された resources.arsc ファイルが含まれている場合、またはこのファイルが 4 バイト境界に揃えられていない場合はインストールできません。

この変更について詳しくは、圧縮されたリソース ファイルをご覧ください。

RESTRICT_STORAGE_ACCESS_FRAMEWORK

変更 ID: 141600225

デフォルトの状態: Android 11(API レベル 30)以上をターゲットとするアプリで有効。

Android 11 をターゲットとするアプリがストレージ アクセス フレームワーク(SAF)を使用する場合、ACTION_OPEN_DOCUMENTACTION_OPEN_DOCUMENT_TREE のインテントのアクションを使った一部のディレクトリへのアクセスはできなくなります。この変更について詳しくは、Android 11 のストレージに関連するプライバシーの更新について説明しているページでディレクトリへのアクセス制限のセクションをご覧ください。

SELINUX_LATEST_CHANGES

変更 ID: 143539591

デフォルトの状態: Android 11(API レベル 30)以上をターゲットとするアプリで有効。

この変更は、アプリによる untrusted_app_R-targetSDk SELinux ドメインへのアクセスをコントロールします。 これは、互換性フレームワークの基本的な変更のひとつで、アプリが targetSdkVersion を条件とするその他の変更を、アプリの targetSDKVersion を変更せずに切り替えられるようになります。そのため、Android 11 をターゲットとするアプリではこの変更を無効にしないでください。アプリが機能しなくなります。

この変更は、共有ユーザー ID を使用するアプリには影響しません。

THROW_SECURITY_EXCEPTIONS

変更 ID: 147340954

デフォルトの状態: Android 11(API レベル 30)以上をターゲットとするアプリで有効。

Android 11 より前のバージョンでは、SecurityException は、権限エラーの場合のみ setEnabled API(たとえば、setEnabled(String, boolean, UserHandle))によりスローされます。Android 11 ではこのように限定できなくなりました。SecurityException は呼び出し元に公開されないさまざまな理由で、スローされることがあります。

既存の API の動作を維持するため、Android 11 をターゲットとしないアプリで以前の権限エラーまたはアクター適用エラーが発生した場合、例外は Android 11 より前のソースに存在する IllegalStateException で強制的に発生します。

USE_SET_LOCATION_ENABLED

変更 ID: 117835097

デフォルトの状態: Android 11(API レベル 30)以上をターゲットとするアプリで有効。

Android 11 をターゲットとする管理アプリでは、DevicePolicyManager.setSecureSetting(ComponentName, String, String) を使ってサポートの終了した Settings.Secure.LOCATION_MODE の設定を変更することはできなくなりました。代わりに DevicePolicyManager.setLocationEnabled(ComponentName, boolean) を使用してください。