行為變更:所有應用程式

Android 13 平台包含可能影響應用程式的行為變更。 下列行為變更適用於在 Android 13 上執行的「所有應用程式」。 不論 targetSdkVersion 為何。您應測試應用程式,然後按照 以及適當地支援這些技術

請務必檢閱影響應用程式的行為變更清單 針對 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 數量。
  • 高優先順序 FCM 配額會隨著系統向使用者顯示的通知數量,按照高優先順序 FCM 的比例增加。

和先前的 Android 版本一樣,高優先順序 FCM 超過配額時,會降級為一般優先順序。為回應 FCM 啟動前景服務 (FGS) 時,建議您檢查 RemoteMessage.getPriority() 的結果,確認其為 PRIORITY_HIGH 和/或處理任何潛在的 ForegroundServiceStartNotAllowedException 例外狀況。

如果您的應用程式不一定每次都會回應高優先順序 FCM 的回應,建議您將這些 FCM 的優先順序變更為「一般」,以免導致通知的訊息降級。

隱私權

通知的執行階段權限

Android 13 (API 級別 33) 導入了執行階段 通知權限POST_NOTIFICATIONS。 這項變更有助使用者專注處理最重要的通知 具體做法是指示 Kubernetes 建立並維護 一或多個代表這些 Pod 的物件

我們強烈建議您盡快指定 Android 13 以上版本 以便取得額外的掌控權和靈活性 這項功能

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

隱藏剪貼簿中的敏感內容

如果您的應用程式允許使用者複製密碼或信用卡資料等機密內容 請將卡片資訊新增到剪貼簿,您必須在 ClipData 的 請先ClipDescription再呼叫 ClipboardManager#setPrimaryClip()。正在新增 此標記可防止敏感內容出現在內容預覽中。

敏感內容未加上標記時的複製文字預覽
已複製文字預覽,但未標記敏感內容。
標示為敏感內容的複製文字預覽。
標示為敏感內容的複製文字預覽。

如要標記敏感內容,請在 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)
    }
}

如要進一步瞭解新版剪貼簿 UI,請造訪 「複製及貼上」功能頁面。

安全性

捨棄共用使用者 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 移除了 SpeechService 實作項目,包括 語音輸入法編輯器,RecognitionService 以及意圖導向的 API:來自 Google 應用程式。

在 Android 12 中,出現下列異動:

  • 已將 SpeechService 項功能遷移至 Google 語音服務 Google 敬上 應用程式 並成為預設的 SpeechService 供應平台
  • RecognitionService 功能已移至 Android 系統 支援裝置端語音辨識功能的情報應用程式。

為協助維持 Android 12 的應用程式相容性,Google 應用程式 使用 Trampoline 將流量導向 Google 應用程式語音服務。於 Android 13 則已移除這個 Trampoline。

應用程式應使用裝置預設的 SpeechService 供應商,而非 以硬式編碼的方式 寫入特定應用程式