Android 14 平台包含可能對應用程式造成影響的行為變更。無論 targetSdkVersion 為何,當應用程式在 Android 14 上執行時,下列行為變更將會套用至所有應用程式。您應測試應用程式,並視需要修改,以便在適當情況下支援新版本功能。
另請務必查看僅對指定 Android 14 為目標版本的應用程式造成影響的行為變更。
核心功能
根據預設,系統會拒絕排定精確鬧鐘
精確鬧鐘是針對使用者需求或需要在確切時間發生的操作所設計的通知。自 Android 14 起,SCHEDULE_EXACT_ALARM 權限不再預先授予以 Android 13 以上版本為目標所安裝的最新應用程式;該權限依預設為拒絕狀態。
進一步瞭解精準鬧鐘排程權限變更。
在應用程式快取期間,註冊使用情境的廣播訊息會排入佇列
在 Android 14 中,当应用处于缓存状态时,系统可以将上下文注册的广播放入队列中。这与 Android 12(API 级别 31)为异步 binder 事务引入的队列行为类似。在清单中声明的广播不会加入队列,并且应用会从缓存状态中移除以进行广播传递。
当应用离开缓存状态(例如返回前台)时,系统会传递所有已加入队列的广播。某些广播的多个实例 可能会合并为一个广播。取决于其他因素,如系统 运行状况,则可能会从缓存状态中移除应用,以及之前排队 广播。
應用程式只能終止自己的背景處理程序
自 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() 限制進行測試。
系統會強制執行快取應用程式的資源用量
依設計,當應用程式移至背景,且當下沒有其他正在執行的應用程式處理程序元件,應用程式的處理程序會處於快取狀態。這類應用程式處理程序可能會因為系統記憶體不足而遭終止。在此狀態下,若呼叫 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% 的字型縮放倍數,為使用者提供額外的無障礙選項。
如果您已使用可縮放像素 (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 如何篩選套件的瀏覽權限,以保護隱私權。