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

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

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

コア機能

Android 15 では、Android システムのさまざまなコア機能が変更または拡張されています。

パッケージの停止状態の変更

The intention of the package FLAG_STOPPED state (which users can engage in AOSP builds by long-pressing an app icon and selecting "Force Stop") has always been to keep apps in this state until the user explicitly removes the app from this state by directly launching the app or indirectly interacting with the app (through the sharesheet or a widget, selecting the app as live wallpaper, etc.). In Android 15, we've updated the behavior of the system to be aligned with this intended behavior. Apps should only be removed from the stopped state through direct or indirect user action.

To support the intended behavior, in addition to the existing restrictions, the system also cancels all pending intents when the app enters the stopped state on a device running Android 15. When the user's actions remove the app from the stopped state, the ACTION_BOOT_COMPLETED broadcast is delivered to the app providing an opportunity to re-register any pending intents.

You can call the new ApplicationStartInfo.wasForceStopped() method to confirm whether the app was put into the stopped state.

16 KB ページサイズのサポート

これまで Android は 4 KB のメモリ ページサイズのみをサポートしており、Android デバイスが通常備えている合計メモリの平均量に合わせてシステム メモリのパフォーマンスを最適化してきました。Android 15 以降、AOSP は 16 KB のページサイズを使用するように構成されたデバイス(16 KB デバイス)をサポートしています。アプリが NDK ライブラリを直接的または SDK を介して間接的に使用している場合は、16 KB デバイスで動作するようにアプリを再ビルドする必要があります。

デバイス メーカーが物理メモリ(RAM)の容量が大きいデバイスを構築し続けるにつれて、これらのデバイスの多くは、デバイスのパフォーマンスを最適化するために 16 KB(最終的にはそれ以上)のページサイズを採用するようになります。16 KB ページサイズのデバイスのサポートを追加すると、アプリをこれらのデバイスで実行できるようになり、関連するパフォーマンスの改善のメリットをアプリで享受できるようになります。再コンパイルしないと、今後の Android リリースで 16 KB デバイスでアプリが動作しなくなります。

アプリのサポートを追加するにあたって、アプリが影響を受けるかどうかを確認する方法、アプリを再ビルドする方法(該当する場合)、エミュレータ(Android Emulator の Android 15 システム イメージを含む)を使用して 16 KB 環境でアプリをテストする方法に関するガイダンスをご用意しました。

Benefits and performance gains

16 KB のページサイズで構成されたデバイスでは、平均でメモリ使用量が若干増加しますが、システムとアプリの両方でさまざまなパフォーマンスが向上します。

  • システムのメモリ負荷が高いときのアプリ起動時間の短縮: 平均 3.16% 短縮、テストした一部のアプリでは大幅な改善(最大 30%)
  • アプリ起動時の消費電力の削減: 平均 4.56% 削減
  • カメラの起動が速くなる: ホット スタートが平均 4.48%、コールド スタートが平均 6.60% 高速化
  • システムの起動時間の短縮: 平均で 8%(約 950 ミリ秒)短縮

これらの改善は初期テストに基づくものであり、実際のデバイスでの結果は異なる可能性があります。テストを継続する中で、アプリの潜在的な収益増加に関する追加の分析情報を提供していきます。

Check if your app is impacted

アプリがネイティブ コードを使用している場合は、16 KB デバイスをサポートするようにアプリを再ビルドする必要があります。アプリがネイティブ コードを使用しているかどうか不明な場合は、APK Analyzer を使用してネイティブ コードが存在するかどうかを特定し、見つかった共有ライブラリの ELF セグメントのアライメントを確認できます。Android Studio には、配置の問題を自動的に検出するのに役立つ機能も用意されています。

ライブラリや SDK もすべて含めて、Java プログラミング言語または Kotlin で記述されたコードだけを使用しているアプリは、すでに 16 KB デバイスをサポートしています。ただし、アプリの動作に予期しない回帰がないことを確認するため、16 KB の環境でアプリをテストすることをおすすめします。

一部のアプリでプライベート スペースをサポートするために必要な変更

私密空间是 Android 15 中推出的一项新功能,可让用户在设备上创建一个单独的空间,在额外的身份验证层保护下,防止敏感应用遭到窥探。由于私密空间中的应用具有受限的公开范围,因此某些类型的应用需要执行额外的步骤,才能查看和与用户私密空间中的应用互动。

所有应用

由于私密空间中的应用会保存在单独的用户资料中(类似于工作资料),因此应用不应假定其任何未位于主资料中的已安装副本都位于工作资料中。如果您的应用包含与工作资料应用相关的逻辑,并且做出了上述假设,则需要调整此逻辑。

医疗应用

当用户锁定私密空间时,私密空间中的所有应用都会停止运行,并且这些应用无法执行前台或后台活动,包括显示通知。此行为可能会严重影响安装在私密空间中的医疗应用的使用和功能。

私密空间设置体验会向用户发出警告,告知私密空间不适合需要执行关键前台或后台活动的应用,例如显示医疗应用发送的通知。不过,应用无法确定自己是否在私密空间中使用,因此无法在这种情况下向用户显示警告。

因此,如果您开发的是医疗应用,请检查此功能可能会对您的应用产生哪些影响,并采取适当的措施(例如告知用户不要在私密空间中安装您的应用),以免中断关键的应用功能。

启动器应用

如果您开发的是启动器应用,则必须执行以下操作,才能看到私密空间中的应用:

  1. 您的应用必须被指定为设备的默认启动器应用,即具有 ROLE_HOME 角色。
  2. 您的应用必须在应用的清单文件中声明 ACCESS_HIDDEN_PROFILES 普通权限。

声明 ACCESS_HIDDEN_PROFILES 权限的启动器应用必须处理以下私密空间用例:

  1. 您的应用必须为安装在私密空间中的应用提供单独的启动器容器。使用 getLauncherUserInfo() 方法确定要处理的用户个人资料类型。
  2. 用户必须能够隐藏和显示私密空间容器。
  3. 用户必须能够锁定和解锁私密空间容器。使用 requestQuietModeEnabled() 方法锁定(通过传递 true)或解锁(通过传递 false)私密空间。
  4. 在锁定状态下,私密空间容器中的任何应用都应不可见,也无法通过搜索等机制被发现。您的应用应为 ACTION_PROFILE_AVAILABLEACTION_PROFILE_UNAVAILABLE 广播注册接收器,并在私密空间容器的锁定或解锁状态发生变化时更新应用中的界面。这两种状态的广播都包含 EXTRA_USER,您的应用可以使用该常量来引用不公开个人资料的用户。

    您还可以使用 isQuietModeEnabled() 方法检查私密空间个人资料是否已锁定。

应用商店应用

私密空间包含一个“安装应用”按钮,用于启动隐式 intent 以将应用安装到用户的私密空间。为了让应用能够接收此隐式 intent,请在应用的清单文件中声明一个 <intent-filter>,并将 <category> 设为 CATEGORY_APP_MARKET

PNG ベースの絵文字フォントを削除

従来の PNG ベースの絵文字フォント ファイル(NotoColorEmojiLegacy.ttf)は削除され、ベクターベースのファイルのみが残されています。Android 13(API レベル 33)以降、システム 絵文字レンダラで使用される絵文字フォント ファイルは、PNG ベースのファイルからベクター ベースのファイルに変更されました。システムは互換性上の理由から、Android 13 と 14 で以前のフォント ファイルを保持しました。これにより、独自のフォント レンダラを持つアプリは、アップグレードできるまで以前のフォント ファイルを引き続き使用できました。

アプリが影響を受けているかどうかを確認するには、アプリのコードで NotoColorEmojiLegacy.ttf ファイルへの参照を検索します。

アプリを適応させる方法はいくつかあります。

  • テキストのレンダリングにはプラットフォーム API を使用します。テキストをビットマップ バックの Canvas にレンダリングし、必要に応じてそれを使用して未加工の画像を取得できます。
  • アプリに COLRv1 フォント サポートを追加します。FreeType オープンソース ライブラリは、バージョン 2.13.0 以降で COLRv1 をサポートしています。
  • 最後の手段として、以前の絵文字フォント ファイル(NotoColorEmoji.ttf)を APK にバンドルすることもできますが、その場合、アプリには最新の絵文字のアップデートが適用されません。詳しくは、Noto Emoji GitHub プロジェクトのページをご覧ください。

最小ターゲット SDK バージョンを 23 から 24 に引き上げ

Android 15 は、 Android 14 で行われた変更を セキュリティをさらに強化できます。Android 15 では、 24 未満の targetSdkVersion はインストールできません。 アプリが最新の API レベルを満たすことを必須にすることで、セキュリティと プライバシーを保護する。

マルウェアはセキュリティとプライバシーをすり抜けるために、低い API レベルをターゲットにすることが多い Android の上位バージョンで導入された保護機能。たとえば、一部のマルウェア アプリは、2015 年に Android 6.0 Marshmallow(API レベル 23)で導入された実行時の権限モデルの対象にならないよう、22 の targetSdkVersion を使用します。この Android 15 の変更により、マルウェアによるセキュリティの回避が難しくなる プライバシーが改善されます下位の API をターゲットとするアプリをインストールしようとする インストールが失敗すると、次のようなメッセージが表示されます。 Logcat に表示されます:

INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 24, but found 7

Android 15 にアップグレードするデバイスで、targetSdkVersion 未満のアプリ インストールしたままになります。

古い API レベルをターゲットとするアプリをテストする必要がある場合は、次の ADB コマンドを使用します。

adb install --bypass-low-target-sdk-block FILENAME.apk

セキュリティとプライバシー

Android 15 introduces robust measures to combat one-time passcode (OTP) fraud and to protect the user's sensitive content, focusing on hardening the Notification Listener Service and screenshare protections. Key enhancements include redacting OTPs from notifications accessible to untrusted apps, hiding notifications during screenshare, and securing app activities when OTPs are posted. These changes aim to keep the user's sensitive content safe from unauthorized actors.

Developers need to be aware of the following to ensure their apps are compatible with the changes in Android 15:

OTP Redaction

Android will stop untrusted apps that implement a NotificationListenerService from reading unredacted content from notifications where an OTP has been detected. Trusted apps such as companion device manager associations are exempt from these restrictions.

Screenshare Protection

  • Notification content is hidden during screen sharing sessions to preserve the user's privacy. If the app implements setPublicVersion(), Android shows the public version of the notification which serves as a replacement notification in insecure contexts. Otherwise, the notification content is redacted without any further context.
  • Sensitive content like password input is hidden from remote viewers to prevent revealing the user's sensitive information.
  • Activities from apps that post notifications during screenshare where an OTP has been detected will be hidden. App content is hidden from the remote viewer when launched.
  • Beyond Android's automatic identification of sensitive fields, developers can manually mark parts of their app as sensitive using setContentSensitivity, which is hidden from remote viewers during screenshare.
  • Developers can choose to toggle the Disable screen share protections option under Developer Options to be exempted from the screenshare protections for demo or testing purposes. The default system screen recorder is exempted from these changes, since the recordings remain on-device.

カメラとメディア

Android 15 では、すべてのアプリのカメラとメディアの動作に次の変更が加えられています。

リソース上限に達すると、直接再生とオフロード再生によって、以前に開いた直接オーディオ トラックまたはオフロード オーディオ トラックが無効になる

Before Android 15, if an app requested direct or offload audio playback while another app was playing audio and the resource limits were reached, the app would fail to open a new AudioTrack.

Beginning with Android 15, when an app requests direct or offload playback and the resource limits are reached, the system invalidates any currently open AudioTrack objects which prevent fulfilling the new track request.

(Direct and offload audio tracks are typically opened for playback of compressed audio formats. Common use-cases for playing direct audio include streaming encoded audio over HDMI to a TV. Offload tracks are typically used to play compressed audio on a mobile device with hardware DSP acceleration.)

ユーザー エクスペリエンスとシステム UI

Android 15 には、より一貫性のある直感的なユーザー エクスペリエンスを実現するための変更が含まれています。

オプトインしたアプリで予測型「戻る」アニメーションが有効化

Android 15 以降では、予測型「戻る」アニメーションの開発者向けオプションが削除されました。予測型「戻る」ジェスチャーを有効にしているアプリ(アプリ全体またはアクティビティ レベルで有効にしている)では、ホームに戻る、タスクを切り替える、アクティビティを切り替えるなどのシステム アニメーションが表示されるようになりました。アプリが影響を受けている場合は、次の操作を行います。

  • 予測型「戻る」ジェスチャーを使用するようにアプリが適切に移行されていることを確認します。
  • フラグメント遷移が予測型「戻る」ナビゲーションと連携して動作することを確認します。
  • アニメーションとフレームワークの遷移から移行し、代わりに Animator と androidx の遷移を使用します。
  • FragmentManager が認識していないバックスタックから移行します。代わりに、FragmentManager または Navigation コンポーネントによって管理されるバックスタックを使用します。

ユーザーがアプリを強制停止するとウィジェットが無効になる

If a user force-stops an app on a device running Android 15, the system temporarily disables all the app's widgets. The widgets are grayed out, and the user cannot interact with them. This is because beginning with Android 15, the system cancels all an app's pending intents when the app is force-stopped.

The system re-enables those widgets the next time the user launches the app.

For more information, see Changes to package stopped state.

メディア プロジェクションのステータスバー チップで、画面共有、キャスト、録画をユーザーに通知

屏幕投影漏洞会泄露用户的私密数据(例如财务信息),因为用户不知道自己的设备屏幕正在共享。

对于搭载 Android 15 QPR1 或更高版本的设备上运行的应用,系统会在状态栏中显示一个醒目的大条状标签,以提醒用户正在进行的任何屏幕投影。用户可以点按该条状标签,停止共享、投放或录制其屏幕。此外,当设备屏幕锁定时,屏幕投影会自动停止。

画面共有、キャスト、録画用のステータスバー チップ。

アプリが影響を受けるかどうかを確認する

デフォルトでは、アプリにはステータスバー チップが含まれており、ロック画面が有効になると画面投影が自動的に一時停止されます。

これらのユースケースでアプリをテストする方法については、ステータスバー チップと自動停止をご覧ください。

バックグラウンドでのネットワーク アクセスの制限

在 Android 15 中,如果应用在有效的进程生命周期之外启动网络请求,则会收到异常。通常是 UnknownHostException 或其他与套接字相关的 IOException。在有效生命周期之外发生的网络请求通常是因为应用在不再活跃后,不知不觉地继续发出网络请求。

为缓解此异常,请使用生命周期感知型组件,确保您的网络请求具有生命周期感知功能,并在离开有效的进程生命周期时取消。如果您非常重视即使用户离开应用也要发出网络请求,请考虑使用 WorkManager 调度网络请求,或使用前台服务继续执行对用户可见的任务。

サポートの終了

リリースのたびに、特定の Android API が古くなったり、デベロッパー エクスペリエンスの向上や新しいプラットフォーム機能のサポートを目的としたリファクタリングが必要になったりすることがあります。このような場合、Android は古くなった API のサポートを正式に終了し、代わりに代替 API を使用するようデベロッパーに案内します。

サポートの終了とは、API の正式なサポートが終了したことを指しますが、デベロッパーは引き続きそうした API を利用できます。Android の今回のリリースでサポートが終了した API について詳しくは、サポート終了ページをご覧ください。