Android 13 平台包含可能影響應用程式的行為變更。
下列行為變更適用於在 Android 13 上執行的「所有應用程式」。
不論 targetSdkVersion
為何。您應測試應用程式,然後按照
以及適當地支援這些技術
請務必檢閱影響應用程式的行為變更清單 針對 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
供應商,而非
以硬式編碼的方式
寫入特定應用程式