動作の変更点: すべてのアプリ

Android 14 プラットフォームには、アプリに影響する可能性がある動作変更が含まれています。下記の動作変更は、targetSdkVersion に関係なく、Android 14 上で稼働するすべてのアプリに適用されます。該当する場合は、アプリをテストし、必要に応じて修正して、適切に対応してください。

Android 14 をターゲットとするアプリにのみ影響する動作変更のリストも必ずご確認ください。

コア機能

正確なアラームのスケジュールはデフォルトで拒否される

正確なアラームは、ユーザーの意図に基づく通知や、正確な時刻で実行する必要があるアクションに適しています。Android 14 以降では、SCHEDULE_EXACT_ALARM 権限が、Android 13 以降をターゲットとする新しくインストールされたアプリのほとんどで、事前付与されなくなりました。この権限はデフォルトで拒否されます。

詳しくは、正確なアラームのスケジュール設定の権限の変更をご覧ください。

アプリがキャッシュされている間、コンテキスト登録されたブロードキャストがキューに追加される

Android 14 では、アプリがキャッシュに保存された状態にあるときに、コンテキスト登録されたブロードキャストがキューに配置されることがあります。これは、Android 12(API レベル 31)で非同期バインダー トランザクションに導入されたキュー動作に似ています。マニフェストで宣言されたブロードキャストはキューに登録されず、アプリはブロードキャスト配信のためにキャッシュに保存された状態から削除されます。

アプリがフォアグラウンドに戻るなど、キャッシュに保存された状態を終了すると、キュー内のブロードキャストがすべて配信されます。特定のブロードキャストの複数のインスタンス 1 つのブロードキャストに統合される場合があります他の要因(システムなど)による アプリはキャッシュから削除されたり、以前にキューに入れられた ブロードキャストが配信されます。

アプリは自身のバックグラウンド プロセスのみを強制終了できる

从 Android 14 开始,当您的应用调用 killBackgroundProcesses() 时,该 API 只能终止您自己应用的后台进程。

如果您传入另一个应用的软件包名称,此方法对该应用的后台进程没有影响,并且 Logcat 中会显示以下消息:

Invalid packageName: com.example.anotherapp

您的应用不应使用 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 では、アプリを制限付きスタンバイ バケットに配置できる新しい理由が導入されました。アプリのジョブで、onStartJobonStopJob、または onBind メソッドのタイムアウトが原因で ANR エラーが複数回トリガーされます。(onStartJobonStopJob の変更については、JobScheduler がコールバックとネットワークの動作を強化をご覧ください)。

アプリが制限付きスタンバイ バケットに入ったかどうかを追跡するには、ジョブの実行時に API UsageStatsManager.getAppStandbyBucket() を使用してロギングするか、アプリの起動時に UsageStatsManager.queryEventsForSelf() を使用してロギングすることをおすすめします。

mlock の上限は 64 KB

Android 14(API レベル 34)以降では、mlock() を使用してロックできる最大メモリがプロセスごとに 64 KB に減らされます。以前のバージョンでは、上限はプロセスごとに 64 MB でした。この制限により、アプリとシステム全体でメモリ管理が改善されます。デバイス間での整合性を高めるために、Android 14 では、互換性のあるデバイスの新しい mlock() の上限に関する新しい CTS テストが追加されています。

システムがキャッシュに保存されたアプリのリソース使用量を適用する

設計上、アプリのプロセスは、バックグラウンドに移行され、アプリの他のプロセス コンポーネントが実行されていない場合、キャッシュされた状態になります。このようなアプリのプロセスは、システムメモリの負荷が高くなったときに強制終了されます。アプリのプロセスがこのような状態にある場合、onStop() メソッドが呼び出され、返された後に Activity インスタンスが実行する処理の信頼性は低いため、このような状態で処理を実行しないことを強くおすすめします。

Android 14 では、この設計に一貫性と強制適用が導入されています。アプリのプロセスがキャッシュに保存された状態になった直後は、プロセス コンポーネントがライフサイクルのアクティブな状態に戻るまで、バックグラウンド処理が禁止されます。

各種サービスJobSchedulerJetpack WorkManager など、フレームワークでサポートされている一般的なライフサイクル API を使用するアプリは、この変更の影響を受けません。

ユーザー エクスペリエンス

閉じることができない通知のユーザー エクスペリエンスに関する変更

如果您的应用向用户显示不可关闭的前台通知,请注意: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%) 的情况下执行界面测试,确保应用能够在不影响易用性的情况下适应较大的字号。

セキュリティ

インストール可能な最小対象 API レベル

Android 14 以降では、targetSdkVersion が 23 未満のアプリはインストールできません。これらの最小対象 API レベルの要件をアプリが満たすことを必須とすることで、ユーザーのセキュリティとプライバシーを強化しています。

マルウェアは多くの場合、新しい Android バージョンで導入されたセキュリティとプライバシー保護を回避するため、古い API レベルをターゲットにします。たとえば、一部のマルウェア アプリは、2015 年に Android 6.0 Marshmallow(API レベル 23)で導入された実行時の権限モデルの対象にならないよう、22 の targetSdkVersion を使用します。この 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 如何出于隐私保护目的而过滤软件包可见性