行為變更:所有應用程式

Android 13 平台包含可能對應用程式造成影響的行為變更。無論 targetSdkVersion 為何,當應用程式在 Android 13 上執行時,下列行為變更將會套用至所有應用程式。您應測試應用程式,並視需要修改,以便在適當情況下支援新版本功能。

另請務必查看僅對指定 Android 13 為目標版本的應用程式造成影響的行為變更

效能和電池

工作管理員

通知匣底部會顯示按鈕,指出目前在背景執行的應用程式數量。按下這個按鈕後,系統會顯示列出不同應用程式名稱的對話方塊。每個應用程式右側都有「停止」按鈕
圖 1:工作管理員的工作流程,可讓使用者停止執行中的前景服務。這項工作流程只會顯示在搭載 Android 13 以上版本的裝置上。

從 Android 13 (API 級別 33) 開始,使用者可以從通知導覽匣完成工作流程,停止執行中的前景服務應用程式,如圖 1 所示。這項功能稱為「工作管理員」。應用程式必須能夠處理使用者啟動的停止動作

使用 JobScheduler 改善預先擷取工作處理程序

應用程式可透過 JobScheduler 將特定工作標示為「預先擷取」工作 (使用 JobInfo.Builder.setPrefetch()),也就是說,這些工作最好在下次啟動應用程式前執行,以提升使用者體驗。過去,JobScheduler 只會使用信號,讓預先擷取工作視情況使用免費或多餘的資料。

在 Android 13 (API 級別 33) 以上版本中,系統會嘗試判斷應用程式下次啟動的時間,並根據這項預估結果執行預先擷取作業。應用程式應盡量使用預先擷取工作,在下次啟動應用程式前完成任何工作。

電池資源使用率

Android 13 (API 級別 33) 提供下列方式,讓系統更有效管理裝置電池續航力:

  • 更新系統將應用程式排入「受限制」應用程式待命值區的規則。
  • 使用者將應用程式設為「受限制」狀態,減少背景耗電量時,應用程式可執行的工作會受到新的限制。

測試應用程式時,請務必檢查下列事項:

  • 測試系統將應用程式排入「受限制」的應用程式待命值區時,應用程式的反應。請使用下列 Android Debug Bridge (ADB) 指令,將應用程式指派至這個值區:

    adb shell am set-standby-bucket PACKAGE_NAME restricted
    
  • 測試應用程式對下列限制的反應,這些限制通常適用於「受限制」狀態的應用程式,以減少背景耗電量:

    • 無法啟動前景服務
    • 現有前景服務會從前景移除
    • 無法觸發鬧鐘
    • 無法執行工作

    請使用下列 ADB 指令,將應用程式設為「受限」狀態:

    adb shell cmd appops set PACKAGE_NAME RUN_ANY_IN_BACKGROUND ignore
    

高優先順序 Firebase 雲端訊息 (FCM) 配額

Android 13 (API 級別 33) 更新了 Firebase 雲端通訊 (FCM) 配額,針對會顯示通知來回應高優先順序 FCM 的應用程式,提升高優先順序 FCM 傳送的可靠性。Android 13 (API 級別 33) 的變更如下:

  • 應用程式待命值區不再決定應用程式可使用多少高優先順序 FCM。
  • 如果系統偵測到應用程式持續傳送高優先順序訊息,但未產生通知,就會降低這類訊息的優先順序。

與先前的 Android 版本相同,如果高優先順序的 FCM 超出配額,系統會將其降級為一般優先順序。在 FCM 的回應中啟動前景服務 (FGS) 時,建議檢查 RemoteMessage.getPriority() 的結果,確認是否為 PRIORITY_HIGH,並/或處理任何可能的 ForegroundServiceStartNotAllowedException 例外狀況。

如果應用程式並非一律會在收到高優先順序 FCM 時發布通知,建議您將這些 FCM 的優先順序變更為一般,以免導致通知訊息遭到降級。

隱私權

通知的執行階段權限

Android 13 (API 級別 33) 導入了執行階段通知權限POST_NOTIFICATIONS。這項變更可協助使用者關注自己最重視的通知。

我們強烈建議您盡快指定 Android 13 以上版本,才能享有這項功能的額外控管功能和彈性。

進一步瞭解應用程式權限最佳做法

隱藏剪貼簿中的敏感內容

如果應用程式允許使用者將敏感內容 (例如密碼或信用卡資訊) 複製到剪貼簿,您必須在呼叫 ClipboardManager#setPrimaryClip() 前,先在 ClipData 的 ClipDescription 中加上標記。加上此標記後,內容預覽畫面就不會顯示敏感內容。

敏感內容未加上標記時的複製文字預覽
敏感內容未加上標記時的複製文字預覽。
敏感內容加上標記後的複製文字預覽。
敏感內容加上標記後的複製文字預覽。

如要為敏感內容加上標記,請在 ClipDescription 中新增布林值附加項目。無論目標 API 級別為何,所有應用程式都必須執行這項作業。


// When your app is compiled with the API level 33 SDK or higher
clipData.apply {
    description.extras = PersistableBundle().apply {
        putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, true)
    }
}

// If your app is compiled with a lower SDK
clipData.apply {
    description.extras = PersistableBundle().apply {
        putBoolean("android.content.extra.IS_SENSITIVE", true)
    }
}

如要進一步瞭解新版剪貼簿使用者介面,請參閱「複製及貼上」功能頁面。

安全性

改用其他使用者 ID

如果應用程式使用已淘汰的 android:sharedUserId 屬性,且不再依賴該屬性的功能,您可以將 android:sharedUserMaxSdkVersion 屬性設為 32,如下列程式碼片段所示:

<manifest ...>
    <!-- To maintain backward compatibility, continue to use
         "android:sharedUserId" if you already added it to your manifest. -->
    android:sharedUserId="SHARED_PACKAGE_NAME"
    android:sharedUserMaxSdkVersion="32"
    ...
</manifest>

這項屬性會告知系統,您的應用程式不再依賴共用使用者 ID。如果應用程式聲明 android:sharedUserMaxSdkVersion,且最近安裝在搭載 Android 13 以上版本的裝置上,則應用程式會如從未定義過 android:sharedUserId 一般運作。更新後的應用程式仍會使用現有的共用使用者 ID。

共用的使用者 ID 會在套件管理員中造成不確定因素的行為。 應用程式應改用適當的通訊機制 (例如服務和內容供應器),以促進共用元件之間的互通性。

使用者體驗

可關閉的前景服務通知

在搭載 Android 13 以上版本的裝置上,使用者預設可以關閉與前景服務相關的通知

核心功能

已移除語音服務實作的舊版副本

Android 13 會從 Google 應用程式中移除 SpeechService 實作項目,包括語音 IME、RecognitionService意圖式 API

Android 12 進行了下列變更:

  • SpeechService 功能已遷移至 Google 語音服務應用程式,並成為預設的 SpeechService 提供者。
  • RecognitionService 功能已移至 Android System Intelligence 應用程式,以支援裝置端語音辨識。

為確保 Android 12 上的應用程式相容性,Google 應用程式會使用跳板將流量轉移至 Google 語音服務應用程式。Android 13 則移除了這個跳板。

應用程式應使用裝置的預設供應商進行 SpeechService,而非硬式編碼特定應用程式。