Android 14 平台包含可能對應用程式造成影響的行為變更。無論 targetSdkVersion
為何,當應用程式在 Android 14 上執行時,下列行為變更將會套用至所有應用程式。您應測試應用程式,並視需要修改,以便在適當情況下支援新版本功能。
另請務必查看僅對指定 Android 14 為目標版本的應用程式造成影響的行為變更。
核心功能
根據預設,系統會拒絕排定精確鬧鐘
Exact alarms are meant for user-intentioned notifications, or for actions that
need to happen at a precise time. Starting in Android 14, the
SCHEDULE_EXACT_ALARM
permission is no longer being pre-granted to most newly installed apps
targeting Android 13 and higher—the permission is denied by default.
Learn more about the changes to the permission for scheduling exact alarms.
在應用程式快取期間,註冊使用情境的廣播訊息會排入佇列
在 Android 14 中,當應用程式處於快取狀態時,系統可以將已註冊使用情境的廣播訊息排入佇列。這類似於佇列 Android 12 (API 級別 31) 為非同步繫結器引入的行為 交易系統不會將宣告資訊清單的廣播訊息排入佇列,而且應用程式會遭到移除 以便進行廣播傳遞
當應用程式結束快取狀態 (例如返回前景時), 系統會傳送所有排入佇列的廣播訊息某些廣播訊息的多個執行個體可以合併為單一廣播訊息。根據其他因素,例如系統 健康狀態、應用程式可能會從快取狀態中移除, 廣播訊息
應用程式只能終止自己的背景處理程序
自 Android 14 起,當應用程式呼叫 killBackgroundProcesses()
時,
API 只能終止您自有應用程式的背景處理程序。
如果傳入其他應用程式的套件名稱,此方法不會 ,而 Logcat 中會顯示以下訊息:
Invalid packageName: com.example.anotherapp
您的應用程式不應使用 killBackgroundProcesses()
API,或嘗試影響其他應用程式的處理程序生命週期,即使是在舊版 OS 上也是如此。Android 的設計是為了在背景作業中保留快取的應用程式,並且能夠在系統需要記憶體時自動終止這些應用程式。如果您的應用程式不小心關閉其他應用程式,可能會因為需要在稍後重新啟動這些應用程式 (比起恢復現有已快取的應用程式會耗用更多的資源),進而降低系統效能並增加電池用量。
針對要求 MTU 的第一個 GATT 用戶端,將 MTU 設為 517
自 Android 14 起,Android Bluetooth 堆疊會更嚴格地遵循 Bluetooth Core Specification 5.2 版,並在第一個 GATT 用戶端使用 BluetoothGatt#requestMtu(int)
API 要求 MTU 時,要求 BLE ATT MTU 為 517 個位元組,並忽略該 ACL 連線的所有後續 MTU 要求。
如要因應這項變更並讓應用程式更健全,請考慮下列選項:
- 外接裝置應以外接裝置可容納的合理值回應 Android 裝置的 MTU 要求。最終協商的值會是 Android 要求的值和遠端提供的值 (例如
min(517, remoteMtu)
) 的最小值。- 實作此修正可能需要周邊裝置的韌體更新
- 或者,您也可以根據周邊裝置已知支援的值與收到的 MTU 變更值之間的最小值,限制 GATT 特性寫入作業。
- 提醒您,請將標頭的支援大小減少 5 個位元組
- 例如:
arrayMaxLength = min(SUPPORTED_MTU, GATT_MAX_ATTR_LEN(517)) - 5
應用程式可被置入受限制待命值區的新原因
Android 14 推出了應用程式可放入受限制待命值區的新原因。應用程式的工作因 onStartJob
、onStopJob
或 onBind
方法逾時而多次觸發 ANR 錯誤。(如要瞭解 onStartJob
和 onStopJob
的變更,請參閱「JobScheduler 強化回呼和網路行為」)。
如要追蹤應用程式是否已進入受限制的待機區塊,建議您在工作執行時使用 API UsageStatsManager.getAppStandbyBucket()
進行記錄,或在應用程式啟動時使用 UsageStatsManager.queryEventsForSelf()
。
mlock 限制為 64 KB
In Android 14 (API level 34) and higher, the platform reduces the maximum memory
that can be locked using mlock()
to 64 KB per process. In
previous versions, the limit was 64 MB per process. This restriction
promotes better memory management across apps and the system. To provide more
consistency across devices, Android 14 adds a new CTS test for the
new mlock()
limit on compatible devices.
系統會強制執行快取應用程式的資源使用情形
依設計,當應用程式移至背景,且當下沒有其他正在執行的應用程式處理程序元件,應用程式的處理程序會處於快取狀態。這類應用程式處理程序可能會因為系統記憶體不足而遭終止。在此狀態下,若呼叫 onStop()
方法並傳回後,任何 Activity
執行個體執行的工作都會處於不穩定的狀態,因此強烈不建議執行此類操作。
Android 14 為此設計導入一致性和強制執行機制。在應用程式處理程序進入快取狀態後不久,系統會禁止背景工作,直到處理程序元件重新恢復生命週期的有效狀態為止。
若應用程式使用一般架構支援的生命週期 API (例如 服務、JobScheduler
和 Jetpack WorkManager),則應該不會受此類變更影響。
使用者體驗
關於使用者無法關閉通知的變更
如果您的應用程式會向使用者顯示無法關閉的前景通知,則 Android 14 已變更允許使用者關閉此類通知的行為。
這項異動適用於防止使用者關閉前景的應用程式
將 Notification.FLAG_ONGOING_EVENT
設為
Notification.Builder#setOngoing(true)
或
NotificationCompat.Builder#setOngoing(true)
。當
FLAG_ONGOING_EVENT
已變更,以便讓這類通知確實存在
可由使用者關閉。
使用者無法在以下情況中關閉這些類型的通知 條件:
- 手機鎖定時
- 當使用者選取全部清除通知動作 (有助 意外關閉)
此外,這項新行為也不適用於 以下用途:
CallStyle
通知- 裝置政策控制器 (DPC) 與企業支援套件
- 媒體通知
- 預設搜尋選取器套件
以更清楚的方式顯示資料安全性資訊
為了加強使用者隱私,Android 14 會增加系統顯示您在 Play 管理中心表單中宣告的資訊地點數量。目前,使用者可以在 Google Play 應用程式商店資訊的「資料安全性」專區中查看這項資訊。
建議您查看應用程式的位置資料分享政策,並撥冗為應用程式的 Google Play 資料安全性專區進行適用的更新。
詳情請參閱這份指南,瞭解 Android 14 如何以更清楚的方式顯示資料安全性資訊。
無障礙設定
非線性字型縮放至 200%
自 Android 14 起,系統將支援高達 200% 的字型縮放倍數,為低視能使用者提供符合無障礙網頁內容規範 (WCAG)的額外無障礙選項。
如果您已使用經過調整像素 (sp) 的單位定義文字大小,則這項變更對應用程式不會造成太大影響。不過,您應該在啟用最大字型大小 (200%) 的情況下執行 UI 測試,確保應用程式能夠在不影響可用性的情況下,因應更大的字型。
安全性
可安裝的目標 API 級別下限
自 Android 14 起,搭載
比 23 低 targetSdkVersion
。要求應用程式符合這些最低目標 API 級別
這些需求能進一步保障使用者的安全和隱私權。
為了規避 Android 較新版本的安全性和隱私權保護措施,惡意軟體通常會鎖定舊版 API 級別。舉例來說,某些惡意軟體應用程式會使用 22 的 targetSdkVersion
,以避免受到 Android 6.0 Marshmallow (API 級別 23) 在 2015 年推出的執行階段權限模型。這項 Android 14 變更讓惡意軟體更難躲過安全防護
並改善隱私權
如果要安裝以較低 API 級別為目標的應用程式,
安裝失敗,Logcat 也會顯示以下訊息:
INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 23, but found 7
在升級至 Android 14 的裝置上,targetSdkVersion
較低的所有應用程式
仍會保留安裝版本。
如要測試以舊版 API 級別為目標的應用程式,請使用下列 ADB 指令:
adb install --bypass-low-target-sdk-block FILENAME.apk
媒體擁有者的套件名稱可能會被遮蓋
您可以使用媒體儲存區查詢列有儲存特定媒體檔案應用程式的 OWNER_PACKAGE_NAME
資料欄。自 Android 14 版本起,除非符合下列至少一項條件,否則系統將遮蓋此值:
- 儲存媒體檔案的應用程式會具備一律可由其他應用程式瀏覽的套件名稱。
查詢媒體儲存區的應用程式會要求
QUERY_ALL_PACKAGES
權限。
進一步瞭解 Android 如何篩選套件的瀏覽權限,以保護隱私權。