相容性架構異動 (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。

為讓先前已實作 InputConnection.commitContent(InputContentInfo, int, Bundle) API 的應用程式能更順利地採用這個 API,如果應用程式尚未實作 OnReceiveContentListener,我們會將該 API 重複使用做為備用方案。這個備用方案僅會在 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
預設狀態:已為所有應用程式停用。

表示此裝置支援攝影機和麥克風指示燈。如果有顯示的話,將會是 false,因為如果未顯示變更 ID,則 CompatChanges#isChangeEnabled 方法會傳回 true

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) 以上版本的應用程式,在查詢及通知呼叫狀態的 API (例如 TelecomManager#getCallStateTelephonyManager.getCallStateForSubscription()TelephonyCallback.CallStateListener) 上啟用 READ_PHONE_STATE 保護功能。

ENABLE_GET_PHONE_ACCOUNT_PERMISSION_PROTECTION

變更 ID:183407956
預設狀態:已針對指定 Android 12 (API 級別 31) 以上版本為目標的應用程式啟用。

如果應用程式指定 Android 12 (API 級別 31) 以上版本,請在 getPhoneAccount(PhoneAccountHandle) 上啟用 READ_PHONE_NUMBERSREAD_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 權限的應用程式要求原始外部儲存空間存取權。

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.xml 中使用 uses-native-library 標記定義。如果無法滿足任何依附元件 (例如其中一個依附元件不存在),套件管理工具就不會安裝應用程式。您可以使用標記中的 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) 以上版本,系統會在裝置間 (D2D) 傳輸期間忽略使用 android:fullBackupContent 指定的納入和排除規則。

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
預設狀態:已為所有應用程式停用。

啟用後,可能會因為新的裁舊策略而無法建立 KeyStore 作業。以往在建立加密作業一律成功的假設下,KeyStore 是可以正常運作的。不過,KeyMint 後端的運算單元數量有限。

為了將運算單元維持在「無限大」的景象,KeyStore Daemon 會在沒有可用運算單元的情況下,刪除最近使用過的運算。如此一來可能會導致正常運算提前終止。這會使得 AndroidKeystore 陷入阻斷服務 (DoS) 攻擊與非預期活結 (Livelock) 的風險之中。舉例來說,假設多個應用程式因電源管理最佳化調整而同時被喚醒,並試圖執行加密運算,那麼這些程序會開始終止彼此的運作,導致沒有任何進度產生,這就是活結的概念。

為了要中斷活結並避免蒙受 DoS 攻擊,我們已變更裁舊策略,使其以使用少量運算單元的客戶為優先。因此,依照裁舊策略,不會閒置超過 5 秒以上的單一運算幾乎一律不會受到中斷。有些與檔案系統加密相關的運算也會對這些運算進行裁舊,但此情況十分罕見。這項新的裁舊策略運算有一個連帶作用,如果用戶端的裁舊能力低於所有現有運算的裁舊能力,建立作業會立刻失敗。

裁舊策略:為了找出適當的候選對象,我們會計算呼叫端和每個現有作業的 Malus。Malus 即裁舊能力 (呼叫端) 的反義詞,又稱 (現有運算的) 裁舊阻力。呼叫端必須找到一個比自身 Malus 更高的運算,才能裁舊某項運算。如要進一步瞭解裁舊策略,請參閱 operation.rs 的實作方式。在 Android 11 (API 級別 30) 及更低版本中,KeyStore2 會輪詢 KeyStore Daemon 以取得可用的作業運算單元。針對指定 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 Memory Tagging Extension (MTE) 的硬體。

NATIVE_MEMTAG_SYNC

變更 ID:177438394
預設狀態:已為所有應用程式停用。

在此程序中啟用同步 (SYNC) 記憶體標記檢查。此標記只會影響支援 ARM Memory Tagging Extension (MTE) 的硬體。若同時啟用 NATIVE_MEMTAG_ASYNC 和此選項,則會以此選項為優先,並在 SYNC 模式下啟用 MTE。

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) 以上版本為目標版本的應用程式啟用。

為改善應用程式效能和使用者體驗,目標 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) 以上版本,則必須具備 Manifest.permission.SCHEDULE_EXACT_ALARM 權限,才能使用任何 API 設定精確鬧鐘,例如 setExactAndAllowWhileIdle(int, long, PendingIntent)setAlarmClock(AlarmClockInfo, PendingIntent)

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_ACTIVE_DATA_SUB_ID

變更 ID:182478738
預設狀態:已針對指定 Android 12 (API 級別 31) 以上版本為目標版本的應用程式啟用。

如果應用程式指定 Android 12 (API 級別 31) 以上版本,則必須具備 Manifest.permission.READ_PHONE_STATE 權限才能呼叫 TelephonyCallback.ActiveDataSubscriptionIdListener

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_CELL_INFO

變更 ID:184323934
預設狀態:已針對指定 Android 12 (API 級別 31) 以上版本為目標的應用程式啟用。

如果應用程式指定 Android 12 (API 級別 31) 以上版本,則必須具備 Manifest.permission.READ_PHONE_STATE 權限才能呼叫 TelephonyCallback.CellInfoListener

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_DISPLAY_INFO

變更 ID:183164979
預設狀態:已針對指定 Android 12 (API 級別 31) 以上版本為目標的應用程式啟用。

如果應用程式指定 Android 12 (API 級別 31) 以上版本,則必須具備 Manifest.permission.READ_PHONE_STATE 權限才能呼叫 TelephonyCallback.DisplayInfoListener

RESTRICT_ADB_BACKUP

變更 ID:171032338
預設狀態:已針對指定 Android 12 (API 級別 31) 以上版本為目標的應用程式啟用。

如果應用程式指定 Android 12 (API 級別 31) 以上版本,系統會自動為以偵錯模式運作的應用程式啟用 adb backup (android:debuggable 設為 true),其他應用程式則無法使用。

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_HTTP 和/或 IntentFilter.SCHEME_HTTPS,不使用其他配置

在舊版 Android 中,Intent.CATEGORY_BROWSABLE 並非必要條件,系統允許使用其他配置,如果在任何意圖篩選器中將 autoVerify 設為 true,系統會間接假設所有意圖篩選器都設為 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) 以上版本為目標版本的應用程式關閉這項變更,不會產生任何效果。對於使用共用使用者 ID 的應用程式,這項變更不會產生任何效果。

SETTINGS_API_V2

變更 ID:178111421
預設狀態:已為所有應用程式啟用。

目前的平台預覽版尚未實作用於驗證在 AndroidManifest.xml 意圖篩選器中標示為 autoVerify=true 的網域的新使用者偏好設定 API。目前,您可以啟用此 ChangeId,並使用 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