Android 14 平台包含可能對應用程式造成影響的行為變更。無論 targetSdkVersion 為何,當應用程式在 Android 14 上執行時,下列行為變更將會套用至所有應用程式。您應測試應用程式,並視需要修改,以便在適當情況下支援新版本功能。
另請務必查看僅對指定 Android 14 為目標版本的應用程式造成影響的行為變更。
核心功能
根據預設,系統會拒絕排定精確鬧鐘
精確鬧鐘是針對使用者需求或需要在確切時間發生的操作所設計的通知。自 Android 14 起,SCHEDULE_EXACT_ALARM 權限不再預先授予以 Android 13 以上版本為目標所安裝的最新應用程式;該權限依預設為拒絕狀態。
進一步瞭解精準鬧鐘排程權限變更。
在應用程式快取期間,註冊使用情境的廣播訊息會排入佇列
在 Android 14 中,當應用程式處於快取狀態時,系統可以將已註冊使用情境的廣播訊息排入佇列。這類似於佇列 Android 12 (API 級別 31) 為非同步繫結器引入的行為 交易系統不會將宣告資訊清單的廣播訊息排入佇列,而且應用程式會遭到移除 以便進行廣播傳遞
當應用程式結束快取狀態 (例如返回前景時), 系統會傳送所有排入佇列的廣播訊息某些廣播訊息的多個執行個體可以合併為單一廣播訊息。根據其他因素,例如系統 健康狀態、應用程式可能會從快取狀態中移除, 廣播訊息
應用程式只能終止自己的背景處理程序
自 Android 14 起,當應用程式呼叫 killBackgroundProcesses() 時,
API 只能終止您自有應用程式的背景處理程序。
如果傳入其他應用程式的套件名稱,此方法不會 ,而 Logcat 中會顯示以下訊息:
Invalid packageName: com.example.anotherapp
您的應用程式不應使用 killBackgroundProcesses() API,或嘗試影響其他應用程式的處理程序生命週期,即使是在舊版 OS 上也是如此。Android 的設計是為了在背景作業中保留快取的應用程式,並且能夠在系統需要記憶體時自動終止這些應用程式。如果您的應用程式不小心關閉其他應用程式,可能會因為需要在稍後重新啟動這些應用程式 (比起恢復現有已快取的應用程式會耗用更多的資源),進而降低系統效能並增加電池用量。
MTU 會設為 517,供第一個要求 MTU 的 GATT 用戶端使用
自 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
在 Android 14 (API 級別 34) 以上版本中,平台會將可使用 mlock() 鎖定的最大記憶體量,從每個程序 64 KB 降至 64 KB。在先前版本中,每個程序的限制為 64 MB。這項限制可促進應用程式和系統的記憶體管理。為在各裝置上提供更一致的體驗,Android 14 新增了新的 CTS 測試,針對相容裝置的新 mlock() 限制進行測試。
系統會強制執行快取應用程式的資源用量
从设计上讲,当应用的进程移至后台且没有任何其他应用进程组件在运行时,应用进程将处于缓存状态。此类应用进程可能会因系统内存压力而终止。在此状态下,Activity 实例在调用并返回 onStop() 方法后执行的任何工作均不可靠,强烈建议不要这样做。
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% 的字型縮放倍數,為使用者提供額外的無障礙選項。
如果您已使用可縮放像素 (sp) 單位定義文字大小,這項變更可能不會對應用程式造成重大影響。不過,您應啟用最大字型大小 (200%) 進行 UI 測試,確保應用程式能夠在不影響可用性的情況下,因應更大的字型。
安全性
可安裝的目標 API 級別下限
从 Android 14 开始,targetSdkVersion 低于 23 的应用无法安装。要求应用满足这些最低目标 API 级别要求有助于提高用户的安全性和隐私性。
恶意软件通常会以较旧的 API 级别为目标平台,以绕过在较新版本 Android 中引入的安全和隐私保护机制。例如,有些恶意软件应用使用 targetSdkVersion 22,以避免受到 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 低于 23 的所有应用都将继续保持安装状态。
如果您需要测试以旧版 API 级别为目标平台的应用,请使用以下 ADB 命令:
adb install --bypass-low-target-sdk-block FILENAME.apk
媒體擁有者的套件名稱可能會被遮蓋
媒体库支持查询 OWNER_PACKAGE_NAME 列,该列表示存储特定媒体文件的应用。从 Android 14 开始,除非满足以下条件之一,否则系统会隐去此值:
- 存储媒体文件的应用有一个软件包名称始终对其他应用可见。
查询媒体库的应用会请求
QUERY_ALL_PACKAGES权限。
详细了解 Android 如何出于隐私保护目的而过滤软件包可见性。