行為變更:指定 Android 11 的應用程式

和先前版本一樣,Android 11 也包含可能會影響應用程式的行為變更。以下行為變更僅適用於指定 Android 11 以上版本的應用程式。如果應用程式將 targetSdkVersion 設為 30,建議您視情況修改應用程式,以支援這些行為。

此外,請務必查看影響所有在 Android 11 中執行的應用程式的行為變更清單。

隱私權

為了加強使用者隱私,Android 11 推出了幾項異動和限制,包括:

  • 強制使用限定範圍儲存空間存取外部儲存空間目錄僅限於應用程式專屬目錄,以及應用程式已建立的特定媒體類型。
  • 自動重設權限如果使用者已連續數月未與應用程式互動,系統會自動重設應用程式的私密資訊權限。
  • 背景位置資訊存取權必須將使用者導向系統設定,才能授予應用程式背景位置資訊存取權。
  • 套件瀏覽權限當應用程式查詢裝置上安裝的應用程式清單時,系統會篩選傳回的清單。

詳情請參閱隱私權頁面。

安全性

堆積指標標記

變更項目詳細資訊

變更名稱NATIVE_HEAP_POINTER_TAGGING

變更 ID135754954

切換方式

測試應用程式與 Android 11 的相容性時,可以使用下列 ADB 指令開啟或關閉這項變更:

adb shell am compat enable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME
adb shell am compat disable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME

如要進一步瞭解相容性架構和切換變更,請參閱「在應用程式中測試平台行為變更並進行偵錯」。

在最重要的位元組 (MSB) 中,堆積指標現在有非零標記。現在,使用錯誤指標的應用程式 (包括修改 MSB 的應用程式) 可能會當機或遇到其他問題。為了支援日後啟用 ARM Memory Tagging Extension (MTE) 的硬體,我們必須做出這項變更。詳情請參閱「標記指標」。

如要停用這項功能,請參閱 allowNativeHeapPointerTagging 資訊清單說明文件。

浮動式訊息更新

已封鎖背景自訂浮動式訊息

基於安全考量並維持良好的使用者體驗,如果指定 Android 11 以上版本的應用程式從背景傳送包含自訂檢視畫面的浮動式訊息,系統會封鎖包含自訂檢視畫面的浮動式訊息。請注意,系統仍允許傳送文字浮動式訊息,這些是使用不會呼叫 setView()Toast.makeText() 建立的浮動式訊息。

如果應用程式嘗試從背景發布包含自訂檢視畫面的浮動式訊息,系統不會向使用者顯示此訊息。而是會在 logcat 中記錄下列訊息:

W/NotificationService: Blocking custom toast from package \
  <package> due to package not in the foreground

浮動式訊息回呼

如果您想在浮動式訊息 (文字或自訂) 顯示或消失時收到通知,請使用 Android 11 新增的 addCallback() 方法。

文字浮動式訊息 API 變更

以 Android 11 或以上為目標版本的應用程式會產生下列文字浮動式訊息的副作用:

連線

設有限制的 APN 資料庫讀取權限

變更項目詳細資訊

變更名稱APN_READING_PERMISSION_CHANGE_ID

變更 ID124107808

切換方式

測試應用程式與 Android 11 的相容性時,可以使用下列 ADB 指令開啟或關閉這項變更:

adb shell am compat enable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME
adb shell am compat disable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME

如要進一步瞭解相容性架構和切換變更,請參閱「在應用程式中測試平台行為變更並進行偵錯」。

以 Android 11 為目標的應用程式現在需要 Manifest.permission.WRITE_APN_SETTINGS 特殊權限,才能讀取或存取電話供應商 APN 資料庫。如果沒有這項權限,嘗試存取 APN 資料庫,就會產生安全性例外狀況。

無障礙功能

在資訊清單檔案中宣告與 TTS 引擎的互動

由於套件瀏覽權限有所變更,如果應用程式以 Android 11 為目標版本並與文字轉語音 (TTS) 引擎互動,就必須將下列 <queries> 元素加入其資訊清單檔案:

<queries>
  <intent>
    <action
       android:name="android.intent.action.TTS_SERVICE" />
  </intent>
</queries>

在中繼資料檔案中宣告無障礙按鈕使用情形

變更項目詳細資訊

變更名稱REQUEST_ACCESSIBILITY_BUTTON_CHANGE

變更 ID136293963

切換方式

測試應用程式與 Android 11 的相容性時,可以使用下列 ADB 指令開啟或關閉這項變更:

adb shell am compat enable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME
adb shell am compat disable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME

如要進一步瞭解相容性架構和切換變更,請參閱「在應用程式中測試平台行為變更並進行偵錯」。

從 Android 11 開始,無障礙服務不得在執行階段宣告其與系統的無障礙工具按鈕相關聯。如果您將 AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON 附加至 AccessibilityServiceInfo 物件的 flags 屬性,則架構不會將無障礙工具按鈕回呼事件傳遞至您的服務。

如要在無障礙服務中接收無障礙功能回呼事件,請使用無障礙服務中繼資料檔案,宣告服務與無障礙工具的關聯。在 accessibilityFlags 屬性的定義中加入 flagRequestAccessibilityButton 值。無障礙服務中繼資料檔案的常見位置為 res/raw/accessibilityservice.xml

相機

媒體意圖動作需要系統預設攝影機

從 Android 11 開始,只有預先安裝的系統相機應用程式可以回應下列意圖動作:

如果有多個預先安裝的系統相機應用程式,系統會顯示對話方塊,讓使用者選取應用程式。如果您希望應用程式使用特定的第三方相機應用程式代表圖片或影片,可以為意圖設定套件名稱或元件,讓這些意圖明確。

應用程式封裝和安裝

壓縮資源檔案

變更項目詳細資訊

變更名稱RESOURCES_ARSC_COMPRESSED

變更 ID132742131

切換方式

測試應用程式與 Android 11 的相容性時,可以使用下列 ADB 指令開啟或關閉這項變更:

adb shell am compat enable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME
adb shell am compat disable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME

如要進一步瞭解相容性架構和切換變更,請參閱「在應用程式中測試平台行為變更並進行偵錯」。

如果指定 Android 11 (API 級別 30) 以上版本的應用程式包含壓縮resources.arsc 檔案,或這個檔案未對齊 4 位元組邊界,就無法安裝該應用程式。只要出現其中一個條件,系統就無法對應此檔案的記憶體。無法對應記憶體的資源資料表必須讀取 RAM 的緩衝區,這會造成系統不必要的記憶體壓力,並大幅增加裝置的 RAM 用量。

如果您之前使用的是壓縮的 resources.arsc 檔案,請改為嘗試其他策略,例如縮減應用程式資源或其他方法來縮減、模糊化及最佳化應用程式

現在必須使用 APK 簽署配置 v2

如果應用程式以 Android 11 (API 級別 30) 為目標,且目前只透過 APK Signature Scheme v1 進行簽署,您現在也必須使用 APK Signature Scheme v2 或以上版本進行簽署。使用者無法在搭載 Android 11 的裝置上安裝或更新僅以 APK Signature Scheme v1 簽署的應用程式。

如要確認應用程式是以 APK Signature Scheme v2 以上版本簽署,您可以使用 Android Studio 或指令列上的 apksigner 工具。

Firebase

Firebase JobDispatcher 和 GCMNetworkManager

如果應用程式指定 API 級別 30 以上版本,則搭載 Android 6.0 (API 級別 23) 以上版本的裝置會停用 Firebase JobDispatcher 和 GcmNetworkManager API 呼叫。如需遷移相關資訊,請參閱「從 Firebase JobDispatcher 遷移至 WorkManager」和「從 GCMNetworkManager 遷移至 WorkManager」一文。

語音辨識

由於套件瀏覽權限有所變更,如果應用程式以 Android 11 為目標版本並與語音辨識服務互動,就必須將下列 <queries> 元素加入資訊清單檔案:

<queries>
  <intent>
    <action
       android:name="android.speech.RecognitionService" />
  </intent>
</queries>

OnSharedPreferenceChangeListener 回呼變更

變更項目詳細資訊

變更名稱CALLBACK_ON_CLEAR_CHANGE

變更 ID119147584

切換方式

測試應用程式與 Android 11 的相容性時,可以使用下列 ADB 指令開啟或關閉這項變更:

adb shell am compat enable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME
adb shell am compat disable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME

如要進一步瞭解相容性架構和切換變更,請參閱「在應用程式中測試平台行為變更並進行偵錯」。

對於指定 Android 11 (API 級別 30) 的應用程式,現在每次呼叫 Editor.clear 時,系統都會使用 null 鍵向 OnSharedPreferenceChangeListener.onSharedPreferenceChanged 發出回呼。

非 SDK 介面限制

基於與 Android 開發人員合作及最新的內部測試,Android 11 包含更新後的受限制非 SDK 介面清單。在限制非 SDK 介面之前,我們盡可能確保公開替代方案的可得性。

如果您的應用程式並不是以 Android 11 為目標版本,則此處所述的某些變更可能不會立即對您造成影響。不過,雖然您目前可以使用某些非 SDK 介面 (視應用程式的目標 API 級別而定),但使用任何非 SDK 方法或欄位時,都會面臨應用程式中斷的高風險。

如果不確定應用程式是否使用非 SDK 介面,可對應用程式進行測試以便確認。如果您的應用程式仰賴非 SDK 介面,則建議您開始規劃遷移至 SDK 替代方案。我們瞭解有些應用程式可使用非 SDK 介面運作。如果您除了為應用程式中的某個功能使用非 SDK 介面外,已別無他法,則應要求新的公用 API

如要進一步瞭解此 Android 版本中的變更,請參閱 Android 11 的非 SDK 介面限制更新內容。如要進一步瞭解非 SDK 介面的一般資訊,請參閱非 SDK 介面的限制