互換性フレームワークの変更(Android 11)

このページでは、Android 11(API レベル 30)で互換性フレームワークに追加された、アプリに影響する動作変更について説明します。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 での Android ストレージへの変更に関するページで対象範囲別ストレージのセクションをご覧ください。

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 での Android ストレージへの変更に関するページで対象範囲別ストレージのセクションをご覧ください。

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)以上をターゲットとするアプリで有効。

TelephonyManager.listen(PhoneStateListener, int) の 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 によりスローされます。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) を使用してください。