Android 15 プラットフォームには、アプリに影響する可能性がある動作変更が含まれています。下記の動作変更は、targetSdkVersion
に関係なく、Android 15 上で稼働するすべてのアプリに適用されます。該当する場合は、アプリをテストし、必要に応じて修正して、適切に対応してください。
Android 15 をターゲットとするアプリにのみ影響する動作変更のリストも必ずご確認ください。
コア機能
Android 15 では、Android システムのコア機能が変更または拡張されています。
パッケージの停止状態の変更
パッケージ FLAG_STOPPED
状態(ユーザーがアプリアイコンを長押しして [強制停止] を選択することで AOSP ビルドを開始できる状態)の目的は、ユーザーがアプリを直接起動するか、(共有シートまたはウィジェットを介して、アプリをライブ壁紙としてアプリを選択などして)間接的に操作して、この状態からアプリを明示的に削除するまで、アプリをこの状態に保つことです。Android 15 では、この意図された動作に合わせてシステムの動作を更新しています。アプリは、直接または間接のユーザー操作によってのみ、停止状態から解除する必要があります。
意図した動作をサポートするために、Android 15 を搭載したデバイスでアプリが停止状態になると、既存の制限に加えて、システムは保留中のインテントもすべてキャンセルします。ユーザーの操作によってアプリが停止状態を解除すると、ACTION_BOOT_COMPLETED
ブロードキャストがアプリに配信され、保留中のインテントを再登録する機会が提供されます。
新しい ApplicationStartInfo.wasForceStopped()
メソッドを呼び出すと、アプリが停止状態に入ったかどうかを確認できます。
16 KB ページサイズのサポート
これまで、Android は 4 KB のメモリページサイズしかサポートしていませんでした。 システムメモリのパフォーマンスを最適化 Android デバイスでは通常、これが行われています。Android 15 以降、AOSP は 16 KB(16 KB)のページサイズを使用するように設定されているデバイス 。アプリで NDK ライブラリを直接使用している場合は、 または SDK を介して間接的に行う場合、アプリを再ビルドして 16 KB のデバイスで使用できます。
デバイス メーカーは次々と、より多くのデバイスで 物理メモリ(RAM)に加え、これらのデバイスの多くに 16 KB( ページサイズを拡大して、デバイスのパフォーマンスを最適化します。追加しています 16 KB ページサイズのデバイスをサポートしているため、アプリはこれらの 関連するパフォーマンスの恩恵をアプリに提供するため 改善されています。16 KB デバイスでは、再コンパイルしないとアプリが動作しない可能性があります 将来の Android リリースで製品化される際の要件です。
アプリのサポートを追加できるように、 アプリが影響を受ける場合は、 アプリを再構築し(該当する場合)、アプリをテスト エミュレータ(Android 15 を含む)を使用した 16 KB 環境 Android Emulator 用のシステム イメージ)を作成します。
メリットとパフォーマンスの向上
16 KB のページサイズで構成されたデバイスでは、平均でメモリ使用量が若干増加しますが、システムとアプリの両方でさまざまなパフォーマンスが向上します。
- システムのメモリ負荷が高いときのアプリ起動時間の短縮: 平均 3.16% 短縮、テストした一部のアプリでは大幅な改善(最大 30%)
- アプリ起動時の消費電力の削減: 平均 4.56% 削減
- カメラの起動が速くなる: ホット スタートが平均 4.48%、コールド スタートが平均 6.60% 高速化
- システムの起動時間の短縮: 平均で 8%(約 950 ミリ秒)短縮
これらの改善は初期テストに基づくものであり、実際のデバイスでの結果は異なる可能性があります。テストを継続する中で、アプリの潜在的な収益増加に関する追加の分析情報を提供していきます。
アプリが影響を受けるかどうかを確認する
アプリがネイティブ コードを使用している場合は、16 KB デバイスをサポートするようにアプリを再ビルドする必要があります。アプリがネイティブ コードを使用しているかどうか不明な場合は、APK アナライザを使用してネイティブ コードが存在するかどうかを特定し、検出された共有ライブラリの ELF セグメントの配置をチェックします。
ライブラリや SDK もすべて含めて、Java プログラミング言語または Kotlin で記述されたコードだけを使用しているアプリは、すでに 16 KB デバイスをサポートしています。ただし、16 KB 環境でアプリをテストし、アプリの動作に予期しないリグレッションがないことを確認することをおすすめします。
一部のアプリがプライベート スペースに対応するために必要な変更
プライベート スペースは Android 15 の新機能で、 機密性の高いアプリを閉じ込めるスペースをデバイスに作成する 追加の認証レイヤの下でのぞき見を防ぐことができます。なぜなら、 制限付き公開が設定されているため、一部の種類のアプリでは、 ユーザーのプライベート スペースでアプリを表示、操作するための追加の手順が 選択します。
すべてのアプリ
プライベート スペースのアプリは、ユーザー プロファイルと同様に 仕事用プロファイルに紐づけることで、アプリは メイン プロファイルに含まれていないアプリのコピーは仕事用プロファイルにあります。条件 お客様のアプリには、この仮定を行う仕事用プロファイル アプリに関連するロジックがあります。 このロジックを調整する必要があります
医療アプリ
ユーザーがプライベート スペースをロックすると、そのプライベート スペース内のアプリはすべて停止します。 フォアグラウンドまたはバックグラウンドのアクティビティを実行できない 表示されます。この動作は、Google Cloud サービスの使用と プライベート空間にインストールした医療アプリの機能。
プライベート スペースの設定画面で、プライベート スペースが利用できないことがユーザーに警告される 重要なフォアグラウンドまたはバックグラウンドを実行する必要があるアプリに適している 医療アプリからの通知の表示などのアクティビティ。ただし、 アプリは、プライベート スペースで使用されているかどうかを判断できません。 このケースでユーザーに警告が表示されないようにします
こうした理由から、医療アプリを開発する場合は、この機能が アプリに影響を及ぼし、適切な措置を講じる プライベート空間にアプリをインストールして、重要なアプリの中断を防ぎます 提供します
ランチャー アプリ
ランチャー アプリを開発する場合は、 非公開のスペースが表示されます。
- アプリをデバイスのデフォルトのランチャー アプリとして割り当てる必要があります。
ROLE_HOME
ロールを付与されていることです。 - アプリが
ACCESS_HIDDEN_PROFILES
を宣言する必要があります。 標準の権限(アプリのマニフェスト ファイル内)に追加します。
ACCESS_HIDDEN_PROFILES
権限を宣言するランチャー アプリで処理する必要がある
次のようなユースケースがあります。
- アプリには、ローカルにインストールされたアプリ用の個別のランチャー コンテナが必要です。
プライベート スペースに移動します。
getLauncherUserInfo()
メソッドを使用して、以下を行います。 処理するユーザー プロファイルのタイプを指定します。 - ユーザーは、プライベート スペース コンテナの表示と非表示を切り替えられる必要があります。
- ユーザーは、プライベート スペース コンテナのロックとロック解除を行える必要があります。使用
ロックする
requestQuietModeEnabled()
メソッド( (true
を渡す)か、ロックを解除(false
を渡して)します。 ロックされている間は、プライベート スペース コンテナ内のアプリは表示されません。 簡単に見つけてもらいやすくなります。アプリは 受信機
ACTION_PROFILE_AVAILABLE
、ACTION_PROFILE_UNAVAILABLE
がブロードキャストし、 プライベート スペースのロック状態またはロック解除状態のときのアプリの UI 変更します。どちらのブロードキャストにもEXTRA_USER
: アプリはこれを使用して、 。また、
isQuietModeEnabled()
メソッドを使用して、 プライベート スペースのプロフィールがロックされているかどうかを確認する。
アプリストア アプリ
プライベート スペースには [アプリをインストール] ボタンと暗黙的な呼び出しを
ユーザーのプライベート スペースにアプリをインストールするインテントです。アプリが
この暗黙的インテントを受信したときに、<intent-filter>
を宣言し、
これをアプリのマニフェスト ファイルで指定し、<category>
を次の値に置き換えます。
CATEGORY_APP_MARKET
。
PNG ベースの絵文字フォントが削除されました
以前の PNG ベースの絵文字フォント ファイル(NotoColorEmojiLegacy.ttf
)は、
ベクトルベースのファイルだけが残ります。Android 13(API)以降
レベル 33)、システム絵文字レンダラで使用される絵文字フォント ファイルは、
PNG ベースのファイルからベクターベースのファイルに変換できます。システムが保持する
互換性の理由から Android 13 および 14 の従来のフォント ファイルを変更せず、
独自のフォント レンダラを使用するアプリでは、従来のフォント ファイルを引き続き使用できます。
アップグレードが可能になるまで待つ必要は
ありません
アプリが影響を受けるかどうかを確認するには、アプリのコードで
NotoColorEmojiLegacy.ttf
ファイル。
アプリは、いくつかの方法で適応させることができます。
- テキストのレンダリングにはプラットフォーム 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 では、通知リスナー サービスと画面共有の保護強化に重点を置き、ワンタイム パスコード(OTP)の不正行為に対処し、ユーザーの機密コンテンツを保護するための堅牢な対策が導入されています。主な機能強化には、信頼できないアプリがアクセスできる通知から OTP を削除する、画面共有中に通知を非表示にする、OTP が投稿されたときにアプリ アクティビティを保護するなどがあります。これらの変更は、ユーザーの機密コンテンツを不正な行為者から保護することを目的としています。
アプリが Android 15 の変更に対応できるようにするには、デベロッパーは以下の点に注意する必要があります。
OTP の除去
Android では、NotificationListenerService
を実装する信頼できないアプリが、OTP が検出された通知から未修正のコンテンツを読み取ることを禁止します。コンパニオン デバイス管理アプリの関連付けなどの信頼できるアプリは、これらの制限の対象外です。
画面共有の保護
- ユーザーのプライバシーを保護するため、画面共有セッション中は通知の内容は表示されません。アプリが
setPublicVersion()
を実装している場合、Android は、安全でないコンテキストで置換通知として機能する通知の公開版を表示します。それ以外の場合、通知の内容は編集され、コンテキストは表示されません。 - パスワード入力などの機密情報は、リモート ビューアに対して非表示になり、ユーザーの機密情報が漏洩するのを防ぎます。
- 画面共有中に OTP が検出されたアプリから通知が送信されたアクティビティは非表示になります。アプリのコンテンツは、起動時にリモート ビューアには表示されません。
- Android が機密性の高いフィールドを自動的に識別するだけでなく、デベロッパーは
setContentSensitivity
を使用してアプリの一部を手動で機密性の高いものとしてマークできます。このマークは、画面共有中にリモート ビューアから非表示になります。 - デベロッパーは、[開発者向けオプション] で [画面共有の保護を無効にする] オプションを切り替えて、デモやテスト目的で画面共有の保護から除外できます。デフォルトのシステム画面レコーダーは、録画がデバイス上に残るため、これらの変更の対象外です。
カメラとメディア
Android 15 では、すべてのアプリのカメラとメディアの動作が次のように変更されます。
リソースの上限に達すると、直接再生とオフロード再生で、以前に開いた直接再生またはオフロード再生の音声トラックが無効になる
Android 15 より前では、アプリが音声を再生しているときに、アプリが音声再生の直接またはオフロードをリクエストし、リソース制限に達した場合、アプリは新しい AudioTrack
を開くことができませんでした。
Android 15 以降では、アプリがダイレクト再生またはオフロード再生をリクエストし、リソースの上限に達すると、現在開いている AudioTrack
オブジェクトがすべて無効になり、新しいトラック リクエストを実行できなくなります。
(通常、ダイレクト オーディオ トラックとオフロード オーディオ トラックは圧縮音声形式の再生用に開きます。ダイレクト オーディオを再生する一般的なユースケースとして、エンコードされたオーディオを HDMI 経由でテレビにストリーミングすることがあります。オフロード トラックは通常、ハードウェア DSP アクセラレーションを備えたモバイル デバイスで圧縮音声を再生するために使用されます)。
ユーザー エクスペリエンスとシステム UI
Android 15 では、より一貫性があり直感的なユーザー エクスペリエンスを実現するための変更がいくつか加えられています。
有効にしたアプリで予測型「戻る」アニメーションが有効
Android 15 以降、予測型「戻る」アニメーションの開発者向けオプションは削除されています。ホームに戻る、タスク間、クロスアクティビティなどのシステム アニメーションは、全体またはアクティビティ レベルで予測型「戻る」ジェスチャーをオプトインしたアプリに表示されるようになりました。アプリが影響を受ける場合は、次のように対応します。
- 予測型「戻る」ジェスチャーを使用するようにアプリが適切に移行されていることを確認します。
- フラグメントの遷移が予測型「戻る」ナビゲーションと連携することを確認します。
- アニメーションとフレームワークの遷移から移行し、代わりに Animator と androidx の遷移を使用してください。
FragmentManager
が認識していないバックスタックから移行します。代わりに、FragmentManager
または Navigation コンポーネントによって管理されるバックスタックを使用してください。
ユーザーがアプリを強制停止したときにウィジェットが無効になる
Android 15 を搭載したデバイスでユーザーがアプリを強制停止すると、そのアプリのウィジェットがすべて一時的に無効になります。ウィジェットはグレー表示され、ユーザーは操作できません。これは、Android 15 以降、アプリが強制停止されると、システムがアプリのペンディング インテントをすべてキャンセルするためです。
ウィジェットは、ユーザーが次にアプリを起動したときに、再び有効になります。
詳しくは、パッケージ停止状態の変更をご覧ください。
メディア プロジェクションのステータスバー チップで、画面共有、キャスト、録画についてユーザーに通知
Screen projection exploits expose private user data such as financial information because users don't realize their device screen is being shared. Android has until now shown screen cast and screen record icons on the status bar, but the icons are small and often overlooked. Also, stopping screen sharing or recording is cumbersome because controls are in Quick Settings.
Android 15 introduces a new status bar chip that is large and prominent, which should alert users to any in-progress screen projection. Users can tap the chip to stop their screen from being shared, cast, or recorded.
To provide an intuitive user experience, screen projection now automatically stops when the device screen is locked.
Benefits and performance gains
The new media projection status bar chip enhances the user experience as follows:
- Alerts users to in-progress screen sharing, casting, or recording
- Enable users to terminate screen projection by tapping the chip
Automatic suspension of screen projection when the device screen is locked ensures user privacy.
Check if your app is impacted
By default, your app includes the new status bar chip and automatically suspends
screen projection when the lock screen activates. Test your app by implementing
the
onStop()
method of the
MediaProjection.Callback
.
Verify that your app responds appropriately when the screen projection stops as
a result of the user tapping the status bar chip or when the lock screen
activates.
サポートの終了
リリースのたびに、特定の Android API が古くなったり、デベロッパー エクスペリエンスの向上や新しいプラットフォーム機能のサポートを目的としたリファクタリングが必要になったりすることがあります。このような場合、Google は古くなった API のサポートを正式に終了し、代わりに使用する代替 API をデベロッパーに案内します。
サポートの終了とは、API の正式なサポートが終了したことを指しますが、デベロッパーは引き続きそうした API を利用できます。Android の今回のリリースでサポートが終了した主な API の詳細については、非推奨の API のページをご覧ください。