Android 14 プラットフォームには、アプリに影響する可能性がある動作変更が含まれています。下記の動作変更は、targetSdkVersion に関係なく、Android 14 上で稼働するすべてのアプリに適用されます。該当する場合は、アプリをテストし、必要に応じて修正して、適切に対応してください。
Android 14 をターゲットとするアプリにのみ影響する動作変更のリストも必ずご確認ください。
コア機能
正確なアラームのスケジュールはデフォルトで拒否される
精确的闹钟适用于用户指定的通知,或是在确切时间需要执行的操作。从 Android 14 开始,系统不再向以 Android 13 及更高版本为目标平台的大多数新安装应用预先授予 SCHEDULE_EXACT_ALARM 权限,该权限默认处于拒绝状态。
详细了解安排精确闹钟的权限变化。
アプリがキャッシュされている間、コンテキスト登録されたブロードキャストがキューに追加される
Android 14 では、アプリがキャッシュに保存された状態にあるときに、コンテキスト登録されたブロードキャストがキューに配置されることがあります。これは、Android 12(API レベル 31)で非同期バインダー トランザクションに導入されたキュー動作に似ています。マニフェストで宣言されたブロードキャストはキューに登録されず、アプリはブロードキャスト配信のためにキャッシュに保存された状態から削除されます。
アプリがフォアグラウンドに戻るなど、キャッシュに保存された状態を終了すると、キュー内のブロードキャストがすべて配信されます。特定のブロードキャストの複数のインスタンス 1 つのブロードキャストに統合される場合があります他の要因(システムなど)による アプリはキャッシュから削除されたり、以前にキューに入れられた ブロードキャストが配信されます。
アプリは自身のバックグラウンド プロセスのみを強制終了できる
Android 14 以降では、アプリが killBackgroundProcesses() を呼び出した場合、API は自身のアプリのバックグラウンド プロセスのみを強制終了できます。
別のアプリのパッケージ名を渡した場合、このメソッドはそのアプリのバックグラウンド プロセスに影響せず、Logcat に次のメッセージが表示されます。
Invalid packageName: com.example.anotherapp
古いバージョンの OS であっても、アプリで killBackgroundProcesses() API を使用したり、他のアプリプロセスのライフサイクルに影響を与えようとしたりしないでください。Android は、キャッシュに保存されたアプリをバックグラウンドで保持し、システムにメモリが必要なときは自動的にそうしたアプリを強制終了するように設計されています。アプリが不必要に他のアプリを強制終了した場合、後でそれらのアプリを完全に再起動する必要があるため、システム パフォーマンスが低下し、バッテリー消費量が増加する可能性があります。これには、キャッシュに保存された既存のアプリを再開するよりもはるかに多くのリソースが必要になります。
MTU をリクエストする最初の GATT クライアントの MTU が 517 に設定される
从 Android 14 开始,Android 蓝牙堆栈会更严格地遵循 蓝牙核心规范 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 MB。此限制有助于更好地管理应用和系统的内存。为了在各种设备上提供更一致的体验,Android 14 针对兼容设备上的新 mlock() 限制添加了一项新的 CTS 测试。
システムがキャッシュに保存されたアプリのリソース使用量を適用する
从设计上讲,当应用的进程移至后台且没有任何其他应用进程组件在运行时,应用进程将处于缓存状态。此类应用进程可能会因系统内存压力而终止。在此状态下,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の通知- エンタープライズ向けの Device Policy Controller(DPC)とサポート パッケージ
- メディアの通知
- デフォルトの検索セレクタ パッケージ
データ セーフティ情報の視認性が向上
为了加强用户隐私保护,Android 14 增加了系统显示您在 Play 管理中心表单中声明的信息的位置数量。目前,用户可以在 Google Play 中的应用详情的数据安全部分查看此信息。
我们建议您查看应用的位置数据分享政策,并花一点时间对应用的 Google Play“数据安全”部分进行任何适用的更新。
如需了解详情,请参阅有关如何在 Android 14 上以更显眼的方式显示数据安全信息的指南。
ユーザー補助
非線形フォント スケーリングを 200% にする
从 Android 14 开始,系统支持字体放大高达 200%,为用户提供了其他无障碍功能选项。
如果您已使用放大像素 (sp) 单位来定义文本大小,这项更改可能不会对您的应用产生太大影响。不过,您应在启用最大字号 (200%) 的情况下执行界面测试,确保应用能够在不影响易用性的情况下适应较大的字号。
セキュリティ
インストール可能な最小対象 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 以降では、次の条件の少なくとも 1 つに該当する場合を除き、この値が削除されます。
- メディア ファイルを保存したアプリに、他のアプリに常に表示されるパッケージ名がある。
メディアストアをクエリするアプリが
QUERY_ALL_PACKAGES権限をリクエストする。
詳しくは、Android でプライバシー保護を目的としてパッケージの公開設定をフィルタする方法をご覧ください。