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

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 ページサイズのサポート

Historically, Android has only supported 4 KB memory page sizes, which has optimized system memory performance for the average amount of total memory that Android devices have typically had. Beginning with Android 15, AOSP supports devices that are configured to use a page size of 16 KB (16 KB devices). If your app uses any NDK libraries, either directly or indirectly through an SDK, then you will need to rebuild your app for it to work on these 16 KB devices.

As device manufacturers continue to build devices with larger amounts of physical memory (RAM), many of these devices will adopt 16 KB (and eventually greater) page sizes to optimize the device's performance. Adding support for 16 KB page size devices enables your app to run on these devices and helps your app benefit from the associated performance improvements. Without recompiling, apps won't work on 16 KB devices in future Android releases.

To help you add support for your app, we've provided guidance on how to check if your app is impacted, how to rebuild your app (if applicable), and how to test your app in a 16 KB environment using emulators (including Android 15 system images for the Android Emulator).

メリットとパフォーマンスの向上

Devices configured with 16 KB page sizes use slightly more memory on average, but also gain various performance improvements for both the system and apps:

  • Lower app launch times while the system is under memory pressure: 3.16% lower on average, with more significant improvements (up to 30%) for some apps that we tested
  • Reduced power draw during app launch: 4.56% reduction on average
  • Faster camera launch: 4.48% faster hot starts on average, and 6.60% faster cold starts on average
  • Improved system boot time: improved by 8% (approximately 950 milliseconds) on average

These improvements are based on our initial testing, and results on actual devices will likely differ. We'll provide additional analysis of potential gains for apps as we continue our testing.

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

アプリがネイティブ コードを使用している場合は、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_AVAILABLE ブロードキャストおよび ACTION_PROFILE_UNAVAILABLE ブロードキャストのレシーバーを登録し、プライベート スペース コンテナのロック状態またはロック解除状態が変更されたときにアプリの UI を更新する必要があります。これらのブロードキャストのどちらにも EXTRA_USER が含まれており、アプリはこれを非公開プロファイル ユーザーの参照に使用できます。

    isQuietModeEnabled() メソッドを使用して、プライベート スペース プロファイルがロックされているかどうかを確認することもできます。

アプリストアのアプリ

プライベート スペースには、ユーザーのプライベート スペースにアプリをインストールする暗黙的なインテントを起動する [アプリをインストール] ボタンがあります。アプリがこの暗黙的インテントを受け取るには、アプリのマニフェスト ファイルで <intent-filter> を宣言し、<category>CATEGORY_APP_MARKET に設定します。

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

The legacy, PNG-based emoji font file (NotoColorEmojiLegacy.ttf) has been removed, leaving just the vector-based file. Beginning with Android 13 (API level 33), the emoji font file used by the system emoji renderer changed from a PNG-based file to a vector based file. The system retained the legacy font file in Android 13 and 14 for compatibility reasons, so that apps with their own font renderers could continue to use the legacy font file until they were able to upgrade.

To check if your app is affected, search your app's code for references to the NotoColorEmojiLegacy.ttf file.

You can choose to adapt your app in a number of ways:

  • Use platform APIs for text rendering. You can render text to a bitmap-backed Canvas and use that to get a raw image if necessary.
  • Add COLRv1 font support to your app. The FreeType open source library supports COLRv1 in version 2.13.0 and higher.
  • As a last resort, you can bundle the legacy emoji font file (NotoColorEmoji.ttf) into your APK, although in that case your app will be missing the latest emoji updates. For more information, see the Noto Emoji GitHub project page.

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

Android 15 builds on the the changes that were made in Android 14 and extends this security further. In Android 15, apps with a targetSdkVersion lower than 24 can't be installed. Requiring apps to meet modern API levels helps to ensure better security and privacy.

Malware often targets lower API levels in order to bypass security and privacy protections that have been introduced in higher Android versions. For example, some malware apps use a targetSdkVersion of 22 to avoid being subjected to the runtime permission model introduced in 2015 by Android 6.0 Marshmallow (API level 23). This Android 15 change makes it harder for malware to avoid security and privacy improvements. Attempting to install an app targeting a lower API level results in an installation failure, with a message like the following one appearing in Logcat:

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

On devices upgrading to Android 15, any apps with a targetSdkVersion lower than 24 remain installed.

If you need to test an app targeting an older API level, use the following ADB command:

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 には、より一貫性のある直感的なユーザー エクスペリエンスを実現するための変更が含まれています。

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

Beginning in Android 15, the developer option for predictive back animations has been removed. System animations such as back-to-home, cross-task, and cross-activity now appear for apps that have opted in to the predictive back gesture either entirely or at an activity level. If your app is affected, take the following actions:

  • Ensure that your app has been properly migrated to use the predictive back gesture.
  • Ensure that your fragment transitions work with predictive back navigation.
  • Migrate away from animation and framework transitions and use animator and androidx transitions instead.
  • Migrate away from back stacks that FragmentManager doesn't know about. Use back stacks managed by FragmentManager or by the Navigation component instead.

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

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.

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

Screen projection exploits expose private user data such as financial information because users don't realize their device screen is being shared.

For apps running on devices with Android 15 QPR1 or higher, a status bar chip that is large and prominent alerts users to any in‑progress screen projection. Users can tap the chip to stop their screen from being shared, cast, or recorded. Also, screen projection automatically stops when the device screen is locked.

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

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

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

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

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

In Android 15, apps that start a network request outside of a valid process lifecycle receive an exception. Typically, an UnknownHostException or other socket-related IOException. Network requests that happen outside of a valid lifecycle are usually due to apps unknowingly continuing a network request even after the app is no longer active.

To mitigate this exception, ensure your network requests are lifecycle aware and cancelled upon leaving a valid process lifecycle by using lifecycle aware components. If it is important that the network request should happen even when the user leaves the application, consider scheduling the network request using WorkManager or continue a user visible task using Foreground Service.

サポートの終了

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

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