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

図 1. 開発者向けオプションの [アプリの互換性の変更] 画面に、切り替え可能な変更の一覧が表示されています。

このページでは、Android 12(API レベル 31)の互換性フレームワークに含まれる個々の動作変更について説明します。Android 12 をサポートし、ターゲットとするアプリのテストとデバッグを行うには、このリストを開発者向けオプションおよび ADB コマンドと組み合わせて使用してください。

以下に、互換性フレームワーク ツールでできることをいくつか示します。

  • アプリの targetSdkVersion を実際には変更せずに、ターゲット固有の変更をテストする。切り替えを使用して、特定のターゲット固有の動作変更を強制的に有効にし、既存のアプリに対する影響を評価できます。
  • 特定の変更にテストを集中させる。切り替えを使用することで、テスト対象以外のターゲット固有の変更をすべて無効にできます。これにより、一度にすべてのターゲット固有の変更に対処する必要がなくなります。
  • adb を介して切り替えを管理する。adb コマンドを使用すると、切り替え可能な変更を自動テスト環境で有効または無効にできます。
  • 標準の変更 ID を使用して迅速にデバッグする。切り替え可能な変更にはそれぞれ一意の ID と名前が付けられており、ログ出力から問題の根本原因を速やかにデバッグできます。

各ユースケースでのツールの使用方法について詳しくは、互換性フレームワーク ツールをご覧ください。

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

このセクションでは、Android 12 の互換性フレームワークに含まれる各動作変更について説明します。

変更リストはデフォルトの状態でフィルタできます。

Android 12 の互換性フレームワークに追加された動作変更

ALWAYS_SANDBOX_DISPLAY_APIS

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

有効にすると、ウィンドウ処理モードに関係なく、Display API のサンドボックス化がパッケージに適用されます。Display API では常にアプリの境界が設定されます。

この変更について詳しくは、Android 12 の動作変更ページで、 サポートが終了した表示メソッドに関するセクションをご覧ください。

AUTOFILL_NON_TEXT_REQUIRES_ON_RECEIVE_CONTENT_LISTENER

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

Android 12 以降では、拡張された自動入力フレームワーク(自動入力サービスを参照)を使用して、テキスト以外の候補(画像など)を提供できます。こういった候補をアプリで扱えるようにするには、通常は OnReceiveContentListener API を実装する必要があります。

この API を、以前に InputConnection.commitContent(InputContentInfo, int, Bundle) API を実装したアプリにスムーズに導入できるようにするため、この API を、OnReceiveContentListener がまだアプリで実装されていない場合のフォールバックとして再利用します。このフォールバックは Android 12(API レベル 31)でのみ有効です。この変更 ID でフォールバックが無効になり、Android 12(API レベル 32)以上をターゲットとするアプリで、テキスト以外の候補に対応するには OnReceiveContentListener API を実装することが必要となります。

BLOCK_FLAG_SLIPPERY

変更 ID: 157929241
デフォルトの状態: すべてのアプリで有効。

Android 12(API レベル 31)で動作するアプリの場合、アプリ内のウィンドウで FLAG_SLIPPERY が使用されているかどうかを確認します。このフラグは、サポートされていないフィールドであるため、システム コンポーネントによってのみ使用されることを想定しています。その場合は、制限されます。

BLOCK_GPS_STATUS_USAGE

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

Android 12(API レベル 31)以上をターゲットとするアプリでは、GpsStatus API の使用をすべて GnssStatus API に置き換える必要があります。

BLOCK_IMMUTABLE_PENDING_INTENTS

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

Android 12(API レベル 31)以上をターゲットとするアプリでは、位置情報 API に渡される不変の PendingIntent オブジェクトによって IllegalArgumentException. が生成されます。

BLOCK_PENDING_INTENT_SYSTEM_API_USAGE

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

Android 12(API レベル 31)以上をターゲットとするアプリでは、LocationRequest システム API を PendingIntent 位置情報リクエストと一緒に使用することはできません。

BLOCK_UNTRUSTED_TOUCHES

変更 ID: 158002302
デフォルトの状態: すべてのアプリで有効。

システム セキュリティと優れたユーザー エクスペリエンスを維持するため、Android 12 は、オーバーレイが安全でない方法でアプリを覆い隠している場合にタッチイベントをアプリが使用することを許しません。

この変更について詳しくは、信頼できないタッチイベントはブロックされるをご覧ください。

CALL_ACTIVITY_RESULT_BEFORE_RESUME

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

Android 12(API レベル 32)以上をターゲットとするアプリで、アクティビティの結果のライフサイクルが修正され、再開する直前にアクティビティがアクティビティの結果を取得することが保証されるように修正されます。

CAMERA_MIC_INDICATORS_NOT_PRESENT

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

このデバイスがカメラとマイクのインジケーターをサポートすることを示します。変更 ID が存在しない場合、CompatChanges#isChangeEnabled メソッドは true を返すので、存在する場合は false になります。

CANNOT_INSTALL_WITH_BAD_PERMISSION_GROUPS

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

Android 12(API レベル 32)以上をターゲットとするアプリで、不正な形式の権限グループがあると、パッケージ マネージャーでパッケージがインストールされません。権限グループは、証明書を共有するアプリ間でのみ共有してください。権限がグループに属している場合は、そのグループも定義する必要があります。

CHANGE_ID_AUTH_STATE_DENIED

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

Android 12(API レベル 31)以上をターゲットとするクライアント アプリの場合、承認が拒否された状態で nanoapp にメッセージを送信しようとすると、SecurityException がスローされます。

CHANGE_ID_SAMPLING_RATE_SENSORS_PERMISSION

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

Android 12(API レベル 31)以上をターゲットとするアプリでは、HIGH_SAMPLING_RATE_SENSORS 権限がなく、デバッグモードで実行され、200 Hz を超えるサンプリング レートがリクエストされた場合に、SecurityException がスローされます。

DELIVER_HISTORICAL_LOCATIONS

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

Android 12(API レベル 31)以上をターゲットとするアプリでは、状況によっては、位置情報クライアントが過去の位置情報を受け取ることがあります。

DISPLAY_INFO_NR_ADVANCED_SUPPORTED

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

Android 12(API レベル 31)以上をターゲットとするアプリでは、TelephonyDisplayInfo の変更に対する下位互換性を提供します。

DISPLAY_MODE_RETURNS_PHYSICAL_REFRESH_RATE

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

Android 12(API レベル 31)以上をターゲットとするアプリでは、より望ましい場合、プラットフォームがアプリのフレームレートをリフレッシュ レートの除数に抑制することがあります(たとえばアプリが Surface.setFrameRate(float, int) を呼び出した場合)。それにより、抑制されたフレームレートで Choreographer.postFrameCallback(Choreographer.FrameCallback) のコールバックとバックプレッシャーが発生します。アプリは Display.getRefreshRate()Display.Mode.getRefreshRate() を使用して、ディスプレイのリフレッシュ レートを確認します。アプリがフレーム ペーシングを正しく行えるように、Display.getRefreshRate() は常に物理的なディスプレイのリフレッシュ レートではなくアプリのフレームレートを返します。Display.Mode.getRefreshRate() を以前のリリースにコンパイルした場合にはアプリのフレームレートが返され、Android 12(API レベル 31)以降にコンパイルした場合には、物理的なディスプレイのリフレッシュ レートが返されます。

DOWNSCALED

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

この変更は、アプリごとのすべてのバッファ ダウンスケーリング変更のゲートキーパーです。この変更を有効にすると、次のスケーリング ファクタを適用できます。

この変更がアプリ パッケージに対して有効になっている場合、アプリは有効な最大のスケーリング ファクタに強制的にサイズ変更されます。たとえば、80% と 70% の両方(DOWNSCALE_80DOWNSCALE_70)が有効になっている場合は 80% が使用されます。

DOWNSCALE_30

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

DOWNSCALED も有効になっている場合、パッケージに対してこの変更を有効にすると、アプリは実際のディスプレイの垂直解像度と水平解像度の 30% のディスプレイで実行されていると認識します。

DOWNSCALE_35

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

DOWNSCALED も有効になっている場合、パッケージに対してこの変更を有効にすると、アプリは実際のディスプレイの垂直解像度と水平解像度の 35% のディスプレイで実行されていると認識します。

DOWNSCALE_40

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

DOWNSCALED も有効になっている場合、パッケージに対してこの変更を有効にすると、アプリは実際のディスプレイの垂直解像度と水平解像度の 40% のディスプレイで実行されていると認識します。

DOWNSCALE_45

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

DOWNSCALED も有効になっている場合、パッケージに対してこの変更を有効にすると、アプリは実際のディスプレイの垂直解像度と水平解像度の 45% のディスプレイで実行されていると認識します。

DOWNSCALE_50

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

DOWNSCALED も有効になっている場合、パッケージに対してこの変更を有効にすると、アプリは実際のディスプレイの垂直解像度と水平解像度の 50% のディスプレイで実行されていると認識します。

DOWNSCALE_55

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

DOWNSCALED も有効になっている場合、パッケージに対してこの変更を有効にすると、アプリは実際のディスプレイの垂直解像度と水平解像度の 55% のディスプレイで実行されていると認識します。

DOWNSCALE_60

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

DOWNSCALED も有効になっている場合、パッケージに対してこの変更を有効にすると、アプリは実際のディスプレイの垂直解像度と水平解像度の 60% のディスプレイで実行されていると認識します。

DOWNSCALE_65

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

DOWNSCALED も有効になっている場合、パッケージに対してこの変更を有効にすると、アプリは実際のディスプレイの垂直解像度と水平解像度の 65% のディスプレイで実行されていると認識します。

DOWNSCALE_70

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

DOWNSCALED も有効になっている場合、パッケージに対してこの変更を有効にすると、アプリは実際のディスプレイの垂直解像度と水平解像度の 70% のディスプレイで実行されていると認識します。

DOWNSCALE_75

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

DOWNSCALED も有効になっている場合、パッケージに対してこの変更を有効にすると、アプリは実際のディスプレイの垂直解像度と水平解像度の 75% のディスプレイで実行されていると認識します。

DOWNSCALE_80

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

DOWNSCALED も有効になっている場合、パッケージに対してこの変更を有効にすると、アプリは実際のディスプレイの垂直解像度と水平解像度の 80% のディスプレイで実行されていると認識します。

DOWNSCALE_85

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

DOWNSCALED も有効になっている場合、パッケージに対してこの変更を有効にすると、アプリは実際のディスプレイの垂直解像度と水平解像度の 85% のディスプレイで実行されていると認識します。

DOWNSCALE_90

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

DOWNSCALED も有効になっている場合、パッケージに対してこの変更を有効にすると、アプリは実際のディスプレイの垂直解像度と水平解像度の 90% のディスプレイで実行されていると認識します。

DO_NOT_DOWNSCALE_TO_1080P_ON_TV

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

Android 12(API レベル 31)以上をターゲットとする Android TV アプリでは、あらゆるウィンドウ サイズ(1080p を超えるウィンドウを含む)が処理されると想定されます。 以前のバージョンの Android をターゲットとするアプリは、1080p を超えるウィンドウを受け取ることが想定されないため、必要に応じてウィンドウが 1080p にスケールダウンされます。

DROP_CLOSE_SYSTEM_DIALOGS

変更 ID: 174664120
デフォルトの状態: すべてのアプリで有効。

アプリとシステムを操作しているときのユーザー制御を改善するため、Android 12 では ACTION_CLOSE_SYSTEM_DIALOGS インテント アクションのサポートが終了しました。

この変更について詳しくは、アプリからシステム ダイアログを閉じるアクションが不可にをご覧ください。

ENABLE_CHECKS_FOR_PRIVATE_FILES

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

Android 12(API レベル 31)以上をターゲットとするアプリの場合、メディア プロバイダを使用してプライベート ファイルを挿入または更新することはできません。

ENABLE_DEFERRED_SCAN

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

このオプションを有効にすると、MediaProvider#update() の一部としてトリガーされるスキャンが延期されます。

ENABLE_GET_CALL_STATE_PERMISSION_PROTECTION

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

Android 12(API レベル 31)以上をターゲットとするアプリでは、TelecomManager#getCallStateTelephonyManager.getCallStateForSubscription()TelephonyCallback.CallStateListener などの呼び出し状態をクエリして通知する API で READ_PHONE_STATE の保護を有効にします。

ENABLE_GET_PHONE_ACCOUNT_PERMISSION_PROTECTION

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

Android 12(API レベル 31)以上をターゲットとするアプリでは、getPhoneAccount(PhoneAccountHandle)READ_PHONE_NUMBERS または READ_PRIVILEGED_PHONE_STATE の保護を有効にします。

ENABLE_INCLUDE_ALL_VOLUMES

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

このオプションを有効にすると、最近マウント解除されたボリュームのファイルのデータベース行が MediaProvider#query に追加されます。

ENABLE_RAW_MANAGE_EXTERNAL_STORAGE_ACCESS

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

このオプションを有効にすると、Manifest.permission.MANAGE_EXTERNAL_STORAGE 権限を持つアプリが外部の RAW ストレージへのアクセスをリクエストできるようになります。

ENFORCE_MINIMUM_WINDOW_ON_INEXACT_ALARMS

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

Android 12(API レベル 31)以上をターゲットとするアプリでは、不正確なアラームはすべて、最小限の時間枠(数分間)を必要とします。これよりも短い時間枠を必要とするアラームは、実質的に正確なアラームと同じになるため、それに対応する API(setExact(int, long, PendingIntent) など)を使用する必要があります。短い時間枠を指定しても不正確なアラームの場合は、システムによって時間枠が延長されます。

ENFORCE_NATIVE_SHARED_LIBRARY_DEPENDENCIES

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

Android 12(API レベル 31)以上をターゲットとするアプリの場合、AndroidManifest.xmluses-native-library タグを使用してデバイス メーカーが定義した公開ネイティブ共有ライブラリへの依存関係を宣言する必要があります。いずれかの依存関係が満たされない場合(依存関係の 1 つが存在しない場合など)、パッケージ マネージャーはアプリをインストールしません。依存関係は、タグ内の android:required 属性で任意として指定できます。任意として指定した場合、依存関係が満たされなくてもインストールは中止されません。

インストール後、アプリ マニフェストで指定されたネイティブ共有ライブラリのみがアプリに提供されます。アプリ マニフェストにないネイティブ共有ライブラリで dlopen を呼び出した場合、ライブラリが実際にデバイスに存在していても、呼び出しは失敗します。

ENFORCE_STRICT_QUERY_BUILDER

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

有効にすると、SQLiteQueryBuilder はすべての CalendarProvider2 クエリの選択に対し、悪意のある引数がないか検証します。

FGS_BG_START_RESTRICTION_CHANGE_ID

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

Android 12(API レベル 31)以上をターゲットとするアプリでは、アプリがバックグラウンドで動作しているときにフォアグラウンド サービスを開始できるタイミングを制限します。

FGS_START_EXCEPTION_CHANGE_ID

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

Android 12(API レベル 31)以上をターゲットとするアプリでは、アプリがバックグラウンドで動作しているときにフォアグラウンド サービスを開始しようとすると、システムが IllegalStateException をスローできるようになります。

FINISH_INPUT_NO_FALLBACK_CONNECTION

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

Android 12(API レベル 31)以上をターゲットとするアプリでは、デバイスが non-interactive になると InputConnection を終了します。

現在の input method によって有効化されている場合、デバイスが非インタラクティブになるたびに、現在の入力接続が finished になります。

有効でない場合は、デバイスがインタラクティブでなくなると、代わりに現在の入力接続がサイレントに無効化され、デバイスが再びインタラクティブになると onFinishInput()onStartInput() のペアがディスパッチされます。

FORCE_DISABLE_HEVC_SUPPORT

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

アプリが HEVC メディア機能のサポートを強制的に無効にします。 アプリは、サポートされているメディア機能をマニフェストで宣言する必要がありますが、このフラグを使用すると、アプリが HEVC をサポートしないように強制できるため、HEVC でエンコードされたメディアにアクセスする際に、コード変換を強制適用できます。このフラグを設定すると、アプリの OS レベルのデフォルトがオーバーライドされます。デフォルトでは無効になっています。つまり、OS のデフォルトが優先されます。このフラグと FORCE_ENABLE_HEVC_SUPPORT の両方が有効になっている場合、OS は両方のフラグを無視します。

FORCE_ENABLE_HEVC_SUPPORT

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

アプリが HEVC メディア機能を強制的にサポートできるようにする場合、アプリは、サポート対象のメディア機能をマニフェストで宣言する必要があります。ただし、このフラグを使用すると、アプリに HEVC のサポートを強制して、HEVC でエンコードされたメディアにアクセスする際のコード変換を回避できます。このフラグを設定すると、アプリの OS レベルのデフォルトがオーバーライドされます。デフォルトでは無効になっています。つまり、OS のデフォルトが優先されます。このフラグと FORCE_DISABLE_HEVC_SUPPORT の両方が有効になっている場合、OS は両方のフラグを無視します。

FORCE_NON_RESIZE_APP

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

適用されるパッケージを強制的にサイズ変更不可にします。

FORCE_RESIZE_APP

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

適用されるパッケージを強制的にサイズ変更可能にします。全画面ウィンドウ モードでのみサイズ変更が可能ですが、アプリを強制的にサイズ変更可能なマルチウィンドウ モードにすることはできません。

HIDE_PROP_ICUBINARY_DATA_PATH

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

Android 12(API レベル 31)以上をターゲットとするアプリでは、android.icu.impl.ICUBinary.dataPath プロパティへのアクセス権が削除されます。

IGNORE_ALLOW_BACKUP_IN_D2D

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

Android 12(API レベル 31)以上をターゲットとするアプリの場合、デバイス間(D2D)の移行時に android:allowBackup は無視されます。

IGNORE_FULL_BACKUP_CONTENT_IN_D2D

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

Android 12(API レベル 31)以上をターゲットとするアプリでは、android:fullBackupContent を使用して指定するインクルード ルールと除外ルールは、デバイス間(D2D)の移行時に無視されます。

IME_AUTOFILL_DEFAULT_SUPPORTED_LOCALES_IS_EMPTY

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

Android 12(API レベル 31)以上をターゲットとするアプリでは、getSupportedLocales() が設定されていない場合、デフォルトのシステム ロケールではなく、空のロケールリストを返すようになりました。

IS_BACKUP_SERVICE_ACTIVE_ENFORCE_PERMISSION_IN_SERVICE

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

Android 12(API レベル 31)以上をターゲットとするアプリでは、isBackupServiceActive() に必要な BACKUP 権限が、クライアント側ではなくサービス側の BackupManager に適用されます。

KEYSTORE_OPERATION_CREATION_MAY_FAIL

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

有効にすると、新しいプルーニング戦略に従ってキーストア オペレーションの作成が失敗することがあります。キーストアは、これまで暗号オペレーションの作成が常に成功するという前提で機能していました。ただし、KeyMint バックエンドのオペレーション スロット数は限られています。

オペレーション スロットを「無限」に維持するため、使用可能なオペレーション スロットがない場合、キーストア デーモンは最も長い間使われていないオペレーションをプルーニングします。その結果、正常なオペレーションが早期に終了する可能性があります。これにより、AndroidKeystore がサービス拒否攻撃(DoS)や意図しないライブロックにさらされることになります。たとえば、電源管理の最適化により複数のアプリが同時に起動し、暗号オペレーションを実行しようとした場合、互いの処理が進行することなく終了し始めます。

ライブロックを解除し、DoS の試行を抑止するために、少数のオペレーション スロットを短時間しか使用しないクライアントを優先するようにプルーニング戦略を変更しました。その結果、非アクティブ状態が 5 秒以上続かない単一のオペレーションは、ほとんどの場合、プルーニング戦略によって妨げられることなく終了します。ファイル システムの暗号化に関連するオペレーションの中には、こうしたオペレーションすらプルーニングできるものもありますが、そのようなケースは非常にまれです。この新しいプルーニング戦略オペレーションの副作用として、クライアントのプルーニング能力が既存のすべてのオペレーションよりも低い場合、作成が失敗する可能性があります。

プルーニング戦略: 適切な候補を見つけるため、呼び出し元と既存の各オペレーションのマルスを計算します。マルウェアは、プルーニング能力(呼び出し元)またはプルーニング耐性(既存のオペレーション)の逆数です。呼び出し元がオペレーションをプルーニングできるようにするには、それよりも高いマルスを持つオペレーションを見つける必要があります。プルーニング戦略の詳細については、operation.rs の実装をご覧ください。Android 11(API レベル 30)以前では、KeyStore2 はキーストア デーモンをポーリングして空きオペレーション スロットを取得します。Android 11(API レベル 30)以前をターゲットとするアプリの場合、暗号と署名のオブジェクトの初期化は常に成功するように見えますが、オペレーションの取得には時間がかかることがあります。すべての Android バージョンで、より公平なオペレーション スロットのスケジューリングが可能になり、オペレーションを正常に完了できる可能性が高くなります。

LOCK_DOWN_CLOSE_SYSTEM_DIALOGS

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

Android 12(API レベル 31)以上をターゲットとするアプリでは、android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS 権限がない限り Intent.ACTION_CLOSE_SYSTEM_DIALOGS を送信することはできません。これは制限が強化された #DROP_CLOSE_SYSTEM_DIALOGS であり、アプリが Android 12(API レベル 31)以上をターゲットとしたときに Intent.ACTION_CLOSE_SYSTEM_DIALOGS インテントの送信を停止することが想定されています。

LOCK_DOWN_COLLAPSE_STATUS_BAR

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

Android 12(API レベル 31)以上をターゲットとするアプリでは、セキュリティ上の理由により、ステータスバー パネルを折りたたむには Manifest.permission.STATUS_BAR 権限が必要です。これはマルウェアによって悪用され、ユーザーが重要な通知にアクセスするのを妨げていました。

LOW_POWER_EXCEPTIONS

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

Android 12(API レベル 31)以上をターゲットとするアプリでは、呼び出し元が LOCATION_HARDWARE 権限を持っていない場合、低電力としてマークされたすべての LocationRequest オブジェクトは、メッセージを表示せずにリクエストの低電力部分をドロップする代わりに、例外をスローします。

MISSING_EXPORTED_FLAG

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

Android 12(API レベル 31)以上をターゲットとするアプリでは、インテント フィルタを定義する際に、android:exported 属性に明示的な値を指定する必要があります。

この変更について詳しくは、コンポーネントのより安全なエクスポートをご覧ください。

NATIVE_HEAP_POINTER_TAGGING_APP_ZYGOTE

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

Android 12(API レベル 32)以上をターゲットとするアプリの場合、AppZygote プロセスとその子孫でのネイティブのヒープ割り当てで最上位バイトに非ゼロのタグを使用します。

この変更について詳しくは、タグ付きポインタをご覧ください。

NATIVE_HEAP_ZERO_INIT

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

ネイティブ ヒープのメモリ割り当ての自動ゼロ初期化を有効にします。

NATIVE_MEMTAG_ASYNC

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

このプロセスで非同期(ASYNC)メモリタグのチェックを有効にします。このフラグは、ARM メモリタグ付け拡張機能(MTE)をサポートするハードウェアにのみ影響します。

NATIVE_MEMTAG_SYNC

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

このプロセスで同期(SYNC)メモリタグのチェックを有効にします。このフラグは、ARM メモリタグ付け拡張機能(MTE)をサポートするハードウェアにのみ影響します。NATIVE_MEMTAG_ASYNC とこのオプションの両方を有効にした場合は、このオプションが優先されます。また、MTE が SYNC モードで有効化されます。

NEVER_SANDBOX_DISPLAY_APIS

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

有効にすると、Display API のサンドボックス化がレターボックスまたは SCM アクティビティに適用されなくなります。Display API は、今後も引き続き DisplayArea 境界を提供します。

この変更について詳しくは、Android 12 の動作変更ページで、 サポートが終了した表示メソッドに関するセクションをご覧ください。

NOTIFICATION_CANCELLATION_REASONS

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

通知リスナーが、より具体的な新しいキャンセル理由を理解できるようにします。

NOTIFICATION_TRAMPOLINE_BLOCK

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

アプリのパフォーマンスと UX を改善するため、Android 12 をターゲットとするアプリでは、サービスまたはブロードキャスト レシーバを通知トランポリンとして使用できなくなりました。

この変更について詳しくは、サービスまたはブロードキャスト レシーバからの通知トランポリン作成が不可にをご覧ください。

NULL_TELEPHONY_THROW_NO_CB

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

現在のプロセスのターゲットとする SDK のバージョンが Android 12(API レベル 31)以降かどうかを確認するために使用されます。

以下のメソッドに適用されます。

OVERRIDE_MIN_ASPECT_RATIO

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

この変更により、所定の最小アスペクト比を強制的に適用するすべての変更が管理されます。この変更を有効にすると、以下の最小アスペクト比を適用できます。

アプリのパッケージでこの変更が有効になっている場合、アプリのマニフェストで指定されている最小のアスペクト比が、最大の有効なアスペクト比よりも優先されます(アプリのマニフェスト値の方が大きい場合を除く)。

OVERRIDE_MIN_ASPECT_RATIO_LARGE

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

OVERRIDE_MIN_ASPECT_RATIO も有効になっている場合、パッケージでこの変更を有効にすると、アクティビティの最小のアスペクト比が OVERRIDE_MIN_ASPECT_RATIO_LARGE_VALUE で定義された高値に設定されます。

OVERRIDE_MIN_ASPECT_RATIO_MEDIUM

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

OVERRIDE_MIN_ASPECT_RATIO も有効になっている場合、パッケージでこの変更を有効にすると、アクティビティの最小アスペクト比が OVERRIDE_MIN_ASPECT_RATIO_MEDIUM_VALUE で定義された中央値に設定されます。

PENDING_INTENT_EXPLICIT_MUTABILITY_REQUIRED

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

Android 12(API レベル 31)以上をターゲットとするアプリでは、アプリが作成する各 PendingIntent オブジェクトの可変性を指定する必要があります。この追加要件により、アプリのセキュリティが強化されます。

この変更について詳しくは、ペンディング インテントで可変性の宣言が必須にをご覧ください。

PREVENT_SETTING_PASSWORD_QUALITY_ON_PARENT

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

Android 12(API レベル 31)以上をターゲットとする管理アプリでは、DevicePolicyManager.setPasswordQuality(ComponentName, int) を使用して、DevicePolicyManager.getParentProfileInstance(ComponentName) を呼び出して取得した DevicePolicyManager インスタンスでパスワード品質を設定することはできません。 代わりに DevicePolicyManager.setRequiredPasswordComplexity(int) を使用して、デバイス全体で大まかなパスワード要件を設定する必要があります。

RATE_LIMIT_TOASTS

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

Toast.show() 呼び出し回数のレート制限を有効にして、限られた時間内に大量のトーストでユーザーに負担がかかることを防ぎます。特定の期間内に許可された数を超えるトーストを表示しようとすると、トーストは破棄されます。

REQUIRE_EXACT_ALARM_PERMISSION

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

Android 12(API レベル 31)以上をターゲットとするアプリでは、setExactAndAllowWhileIdle(int, long, PendingIntent)setAlarmClock(AlarmClockInfo, PendingIntent) などの API を使用して正確なアラームを設定するには、Manifest.permission.SCHEDULE_EXACT_ALARM 権限が必要です。

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_ACTIVE_DATA_SUB_ID

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

Android 12(API レベル 31)以上をターゲットとするアプリで TelephonyCallback.ActiveDataSubscriptionIdListener を呼び出すには、アプリに Manifest.permission.READ_PHONE_STATE 権限が必要です。

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_CELL_INFO

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

Android 12(API レベル 31)以上をターゲットとするアプリで TelephonyCallback.CellInfoListener を呼び出すには、アプリに Manifest.permission.READ_PHONE_STATE 権限が必要です。

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_DISPLAY_INFO

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

Android 12(API レベル 31)以上をターゲットとするアプリで TelephonyCallback.DisplayInfoListener を呼び出すには、アプリに Manifest.permission.READ_PHONE_STATE 権限が必要です。

RESTRICT_ADB_BACKUP

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

Android 12(API レベル 31)以上をターゲットとするアプリの場合、デバッグ可能(android:debuggabletrue に設定)として実行される、他のアプリで使用できないアプリに対して、adb backup が自動的にオンになります。

RESTRICT_DOMAINS

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

Android 12(API レベル 31)以上をターゲットとするアプリでは、アプリリンクの検証 API の更新版が必要です。この要件により、アプリは次のすべてを含むインテント フィルタ内でドメインを宣言する必要があります。

  • android:autoVerify="true"
  • Intent.ACTION_VIEW
  • Intent.CATEGORY_BROWSABLE
  • Intet.CATEGORY_DEFAULT
  • IntentFilter.SCHEME_HTTPIntentFilter.SCHEME_HTTPS のいずれか一方または両方(他のスキームは不可)

以前のバージョンの Android では Intent.CATEGORY_BROWSABLE は必須ではなく、他のスキームも許容されていました。インテント フィルタ内で autoVerifytrue に設定すると、すべてのインテント フィルタが autoVerify="true" に設定されることが暗黙的に想定されていました。

SECURITY_EXCEPTION_ON_INVALID_ATTRIBUTION_TAG_CHANGE

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

Android 12(API レベル 31)以上をターゲットとするアプリでは、noteOp(String, int, String)noteProxyOp(String, String)startOp(String, int, String) に送信されるすべての attributionTags が、メソッドのパラメータとして指定されたパッケージのマニフェストで定義されます。

この変更を有効にするには、noteOp(String, int, String) を呼び出すパッケージと、メソッドのパラメータとして指定されたパッケージの両方で、この変更が有効になっている必要があります。

SELINUX_LATEST_CHANGES

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

Android 12(API レベル 31)以上をターゲットとするアプリでは、最新の SELinux の変更にオプトインします。Android 12(API レベル 31)以上をターゲットとするアプリでこの変更をオフにした場合、効果は no-op です。共有ユーザー ID を使用するアプリには影響しません。

SETTINGS_API_V2

変更 ID: 178111421
デフォルトの状態: すべてのアプリで有効。

AndroidManifest.xml インテント フィルタで autoVerify=true とマークされたドメインを検証するための新しいユーザー設定 API は、現在のプラットフォーム プレビューではまだ実装されていません。現時点では、adb shell pm set-app-links-user-selection や同様のコマンドを使用してこの変更を有効にすると、新しいユーザー設定の変更をプレビューできます。

USE_SHORT_FGS_USAGE_INTERACTION_TIME

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

Android 12(API レベル 31)以上をターゲットとするアプリでは、アプリがフォアグラウンド サービスを開始するときに、スタンバイ バケットを ACTIVE に上げる前に、短いタイムアウトを使用するかどうかを決定します。