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

Android 15 プラットフォームには、アプリに影響する可能性がある動作変更が含まれています。 Android 15 で実行されるすべてのアプリに以下の動作変更が適用されます。 targetSdkVersion に関係なく適用されます。アプリをテストしてから 必要に応じて適切にサポートします

アプリにのみ影響する動作変更のリストも必ずご確認ください。 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 are updating 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 以降では、ページサイズが 16 KB(16 KB のデバイス)を使用するように構成されているデバイスがサポートされています。

デバイス メーカーは、引き続き大容量の物理メモリ(RAM)を搭載したデバイスを開発しています。そのため、これらのデバイスの多くは、デバイスのパフォーマンスを最適化するために、16 KB(最終的にはより大きなページサイズ)に設定されます。16 KB デバイスのサポートを追加すると、これらのデバイスでアプリを実行できるようになり、関連するパフォーマンスの向上によるメリットが得られます。そのために、アプリが影響を受けるかどうかを確認する方法アプリを再ビルドする方法(該当する場合)、エミュレータと実機の両方を使用して 16 KB の環境でアプリをテストする方法に関するガイダンスを提供しています。

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

ページサイズが 16 KB に設定されたデバイスは、平均でわずかに多くのメモリを使用しますが、システムとアプリの両方でさまざまなパフォーマンスの向上が得られます。

  • システムがメモリ不足の状況にあるときのアプリの起動時間が短縮: 平均で 3.16% 短縮され、テストした一部のアプリでは大幅な改善(最大 30%)を達成
  • アプリ起動時の消費電力の削減: 平均 4.56% を削減
  • カメラの起動の高速化: ホットスタートが平均 4.48% 高速化、コールド スタートが平均 6.60% 高速化
  • システムの起動時間の改善: 平均 1.5%(約 0.8 秒)改善

これらの改善は初期テストに基づくため、実際のデバイスでの結果とは異なる可能性があります。Google はテストを継続し、アプリの潜在的な利点に関して追加の分析を提供します。

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

アプリでネイティブ コードを使用している場合は、16 KB デバイスをサポートするようにアプリを再ビルドする必要があります。アプリがネイティブ コードを使用しているかどうか不明な場合は、APK Analyzer を使用して、ネイティブ コードが存在するかどうかを確認できます。

すべてのライブラリや 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() メソッドを使用して、プライベート スペースのプロフィールがロックされているかどうかを確認することもできます。

アプリストア アプリ

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

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

以前の PNG ベースの絵文字フォント ファイル(NotoColorEmojiLegacy.ttf)は、 ベクトルベースのファイルだけが残ります。Android 13(API)以降 レベル 33)、システム絵文字レンダラで使用される絵文字フォント ファイルは、 PNG ベースのファイルからベクターベースのファイルに変換できます。システムが保持する 互換性の理由から Android 13 および 14 の従来のフォント ファイルを変更せず、 独自のフォント レンダラを使用するアプリでは、従来のフォント ファイルを引き続き使用できます。 アップグレードが可能になるまで待つ必要は ありません

アプリは、いくつかの方法で適応させることができます。

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

最小対象 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 では、すべてのカメラとメディアの動作が次のように変更されます。 。

直接再生とオフロード音声再生で、リソースの上限に達すると、以前開いていたダイレクト トラックまたはオフロード オーディオ トラックが無効になるようになりました

Android 15 より前では、アプリが音声を再生しているときに、アプリが音声再生の直接またはオフロードをリクエストし、リソース制限に達した場合、アプリは新しい AudioTrack を開くことができませんでした。

Android 15 以降では、アプリがダイレクト再生またはオフロード再生をリクエストし、リソースの上限に達すると、現在開いている AudioTrack オブジェクトがすべて無効になり、新しいトラック リクエストを実行できなくなります。

(通常、ダイレクト オーディオ トラックとオフロード オーディオ トラックは圧縮音声形式の再生用に開きます。ダイレクト オーディオを再生する一般的なユースケースとして、エンコードされたオーディオを HDMI 経由でテレビにストリーミングすることがあります。オフロード トラックは通常、ハードウェア DSP アクセラレーションを備えたモバイル デバイスで圧縮音声を再生するために使用されます)。

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

Android 15 では、一貫性を保ち、 直感的に操作できます

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

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

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

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

Android 15 を搭載したデバイスでユーザーがアプリを強制停止すると、そのアプリのウィジェットがすべて一時的に無効になります。ウィジェットはグレー表示され、ユーザーは操作できません。これは、Android 15 以降、アプリが強制停止されると、システムがアプリのペンディング インテントをすべてキャンセルするためです。

ウィジェットは、ユーザーが次にアプリを起動したときに、再び有効になります。

詳しくは、パッケージ停止状態の変更をご覧ください。

サポートの終了

各リリースで、特定の Android API が古くなったり、廃止する必要があったりします。 デベロッパー エクスペリエンスの向上や新しいプラットフォームのサポートのためにリファクタリングされた 提供しますそのような場合は、廃止された API を正式に非推奨化し、 代わりに使用する代替 API をデベロッパーに提示します。

非推奨とは、API の公式サポートを終了したことですが、今後 引き続きデベロッパーが利用できるようになっています。注目すべきトピックについて 非推奨に関するページをご覧ください。