本頁說明 Android 11 (API 級別 30) 相容性架構中新增的各項應用程式影響行為變更。當您準備好指定 Android 11 為目標版本時,請使用此清單搭配開發人員選項和 ADB 指令,為應用程式進行測試與偵錯。
ADD_CONTENT_OBSERVER_FLAGS
變更 ID:150939131
預設狀態:指定 Android 11 (API 級別 30) 以上版本的應用程式會啟用這項功能。
針對指定 Android 11 的應用程式,有一個新的公用 API 超載 onChange(boolean, Uri, int),其中包含整數 flags 引數。
如果應用程式使用非 SDK onChange() 超載方法 (包含整數 userId 引數),則可改用這個新的公用 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,現在必須具備 Manifest.permission.WRITE_APN_SETTINGS 權限,才能存取 APN 資料庫。
如要進一步瞭解這項異動,請參閱「APN 資料庫的讀取權限受限」。
BACKGROUND_RATIONALE_CHANGE_ID
變更 ID:147316723
預設狀態:指定 Android 11 (API 級別 30) 以上版本的應用程式會啟用這項功能。
應用程式現在每次要求在背景存取裝置位置資訊時,都必須提供有效的理由。
如要進一步瞭解這項異動,請參閱「在 Android 11 中存取背景位置資訊」指南,其中說明 Android 11 中與位置資訊相關的隱私權異動。
CALLBACK_ON_CLEAR_CHANGE
變更 ID:119147584
預設狀態:指定 Android 11 (API 級別 30) 以上版本的應用程式會啟用這項功能。
現在,每當呼叫 Editor.clear 時,系統都會使用 null 鍵向 OnSharedPreferenceChangeListener.onSharedPreferenceChanged 發出回呼。
如要進一步瞭解這項異動,請參閱「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 配置的意圖,不會再將使用者導向應用程式專屬畫面,管理相關權限。而是會導向一個畫面,讓使用者管理所有要求權限的應用程式。
變更系統中的文字浮動式訊息
變更 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 之前的平台錯誤允許這種情況通過,而不會擲回錯誤。請注意,這不包括屬性為空值或缺少屬性的情況,因為這類情況一律會擲回錯誤。
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-p (greylist-max-p) 清單中所有非 SDK 介面的存取權。
HIDE_MAXTARGETSDK_Q_HIDDEN_APIS
變更 ID:149994052
預設狀態:指定 Android 11 (API 級別 30) 以上版本的應用程式會啟用這項功能。
如果應用程式指定 Android 11 (API 級別 30) 以上版本,則移除 Android 11 (API 級別 30) 的 max-target-q (greylist-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.runner (因為依附於 android.test.base 程式庫中的類別),則 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_DOCUMENT 和 ACTION_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 之前,setEnabled API 只會針對權限錯誤擲回 SecurityException。在 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)。