相容性架構異動 (Android 11)

本頁說明 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 引數。

如果應用程式使用包含整數 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 為目標平台,現在必須具備 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 設定為 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 配置的 Intent 不再將使用者導向應用程式專屬畫面,以管理相關聯的權限。而是將使用者導向可管理所有要求權限應用程式的畫面。

變更系統中的文字訊息

變更 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 為目標版本,當意圖篩選器的 actioncategory 為空字串時,系統會擲回錯誤。在 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 儲存空間變更頁面中的「範圍儲存空間」一節。

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) 以上版本,系統會移除對所有非 SDK 介面的存取權,這些介面屬於 Android 10 (API 級別 29) 的 max-target-p (greylist-max-p) 清單

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 為目標版本,且應用程式的資訊清單檔案缺少 applicationinstrumentation 標記,系統現在會擲回錯誤。

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,可透過遠端裝置設定更新變更。 系統會使用 IllegalStateException,在違規程序嘗試註冊過多監聽器時,透過 TelephonyManager.listen(PhoneStateListener, int) 擲回這項限制。

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.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_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)