本頁說明在 Android 11 (API 級別 30) 相容性架構中新增的各項應用程式影響行為變更。您可以使用此清單與開發人員選項和 ADB 指令搭配使用,在準備指定 Android 11 為目標時測試應用程式並進行偵錯。
新增內容
變更 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 的管理員應用程式降低密碼品質時,不再套用的任何現有密碼要求會重設為預設值。
應用程式資料導向重新導向
變更 ID:143937733
預設狀態:已針對指定 Android 11 (API 級別 30) 以上版本為目標的應用程式啟用。
無論應用程式的目標 SDK 版本為何,以 Android 11 為目標版本的應用程式都無法再存取「任何」應用程式私人資料目錄中的檔案。
詳情請參閱「存取私人目錄」。
APN_READING_PERMISSION_CHANGE_ID
變更 ID:124107808
預設狀態:已針對指定 Android 11 (API 級別 30) 以上版本為目標的應用程式啟用。
針對以 Android 11 為目標版本的應用程式,現在需要具備 Manifest.permission.WRITE_APN_SETTINGS
權限才能存取 APN 資料庫。
如要進一步瞭解這項變更,請參閱限制 APN 資料庫的讀取存取權。
背景 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 的前景服務類型。
變更背景
變更 ID:128611929
預設狀態:已針對指定 Android 11 (API 級別 30) 以上版本為目標的應用程式啟用。
應用程式無法再於背景發布自訂浮動式訊息。不過,應用程式仍可在背景使用 Toast.makeText(Context, CharSequence,
int)
方法及其變化版本發布浮動式訊息。
如要進一步瞭解這項變更,請參閱自訂的浮動式訊息檢視畫面已遭到封鎖。
變更 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 (而非應用程式內) 轉譯,可避免應用程式在背景發布自訂浮動式訊息時受到限制。
預設儲存空間
變更 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_查詢
變更 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 介面。
變更代碼
變更 ID:147600208
預設狀態:已針對指定 Android 10 (API 級別 29) 以上版本為目標的應用程式啟用。
檢查 TelephonyManager.listen(PhoneStateListener,
int)
的 SDK 版本。
缺少應用程式標記
變更 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
強制執行這項限制。
禁止存取
變更 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
現在可用來將使用中功能從用戶端程序傳遞至繫結服務。
移除 ANDROID_TEST_BASE
變更 ID:133396946
預設狀態:已針對指定 Android 11 (API 級別 30) 以上版本為目標的應用程式啟用。
針對以 Android 11 為目標版本的應用程式,如果應用程式不需要依附 android.test.runner
,則系統會移除 android.test.base
程式庫 (因為其依附於 android.test.base
程式庫中的類別)。
要求存取 IBILITY_BUTTON_變更
變更 ID:136293963
預設狀態:已針對指定 Android 11 (API 級別 30) 以上版本為目標的應用程式啟用。
如果無障礙服務以 Android 11 為目標版本,則必須在無障礙服務中繼資料檔案中指定 FLAG_REQUEST_ACCESSIBILITY_BUTTON
標記。否則系統會忽略該標記。
如要進一步瞭解這項變更,請參閱在中繼資料檔案中宣告無障礙按鈕使用情形。
資源已壓縮
變更 ID:132742131
預設狀態:已針對指定 Android 11 (API 級別 30) 以上版本為目標的應用程式啟用。
如果應用程式包含壓縮的 resources.arsc
檔案,或這個檔案未對齊 4 位元組邊界,就無法安裝指定 Android 11 (API 級別 30) 的應用程式。
如要進一步瞭解這項變更,請參閱「壓縮資源檔案」。
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 中,此狀態不再保留 True,而且 SecurityException
可能會基於任何原因擲回,而沒有向呼叫端公開。
為了維持現有的 API 行為,如果應用程式並非以 Android 11 為目標版本,則發生舊版權限或執行者強制執行失敗,例外狀況就會強制轉換為 Android 11 以下版本中的 IllegalStateException
。
USE_SET_LOCATION_已啟用
變更 ID:117835097
預設狀態:已針對指定 Android 11 (API 級別 30) 以上版本為目標的應用程式啟用。
以 Android 11 為目標的管理員應用程式將無法再使用 DevicePolicyManager.setSecureSetting(ComponentName, String, String)
變更已淘汰的 Settings.Secure.LOCATION_MODE
設定。請改用 DevicePolicyManager.setLocationEnabled(ComponentName, boolean)
。