機能と API の概要

Android 15 では、デベロッパー向けに優れた新しい機能と API が導入されています。以下のセクションでは、関連する API の使用を開始するにあたって役立つ機能の概要を示します。

新しい API、変更した API、削除された API の詳細なリストについては、API 差分レポートをご覧ください。新しい API について詳しくは、Android API リファレンスをご覧ください。新しい API は、見つけやすいようにハイライト表示されています。また、プラットフォームの変更がアプリに影響する領域については、Android 15 の Android 15 をターゲットとするアプリに影響する動作変更と、targetSdkVersion に関係なくすべてのアプリに影響する動作変更をご確認ください。

カメラとメディア

Android 15 には、カメラとメディアのエクスペリエンスを向上させるさまざまな機能が搭載されています。これにより、クリエイターが Android でビジョンを具現化できるよう、ツールやハードウェアにアクセスできるようになります。

アプリ内カメラ コントロール

Android 15 では、サポート対象デバイスのカメラ ハードウェアとアルゴリズムをより詳細に制御するための新しい拡張機能が追加されています。

  • 高度なフラッシュの強さの調整: 画像の撮影中に SINGLE モードと TORCH モードの両方でフラッシュの強さを細かく制御できます。

HDR ヘッドルーム コントロール

Android 15 では、基盤となるデバイスの機能とパネルのビット深度に適した HDR ヘッドルームが選択されます。1 つの HDR サムネイルを表示するメッセージ アプリなど、SDR コンテンツが大量にあるページの場合、この動作は SDR コンテンツの明度に悪影響を及ぼす可能性があります。Android 15 では、setDesiredHdrHeadroom を使用して HDR ヘッドルームを制御し、SDR と HDR のコンテンツのバランスを取ることができます。

左側の画面の SDR UI 要素の明るさは、右側の画面の明るさよりも均一に見えるため、HDR と SDR のコンテンツが混在している場合に生じる可能性があるヘッドルームの問題をシミュレートします。HDR ヘッドルームを調整することで、SDR コンテンツと HDR コンテンツのバランスを改善できます。

ラウドネス コントロール

Android 15 では、CTA-2075 ラウドネス標準のサポートが導入されています。これにより、オーディオのラウドネスの不整合を回避し、コンテンツを切り替えるときに音量を絶えず調整する必要がなくなります。システムは、出力デバイス(ヘッドフォンとスピーカー)の既知の特性と、AAC オーディオ コンテンツで利用可能なラウドネス メタデータを利用して、オーディオの音量とダイナミック レンジの圧縮レベルをインテリジェントに調整します。

この機能を有効にするには、AAC コンテンツでラウドネス メタデータが利用できることを確認し、アプリでプラットフォーム機能を有効にする必要があります。そのためには、関連付けられた AudioTrack のオーディオ セッション ID で create ファクトリ メソッドを呼び出して、LoudnessCodecController オブジェクトをインスタンス化します。これにより、オーディオの更新が自動的に適用されるようになります。OnLoudnessCodecUpdateListener を渡して、MediaCodec に適用する前にラウドネス パラメータを変更またはフィルタできます。

// Media contains metadata of type MPEG_4 OR MPEG_D
val mediaCodec = …
val audioTrack = AudioTrack.Builder()
                                .setSessionId(sessionId)
                                .build()
...
// Create new loudness controller that applies the parameters to the MediaCodec
try {
   val lcController = LoudnessCodecController.create(mSessionId)
   // Starts applying audio updates for each added MediaCodec

AndroidX media3 ExoPlayer はまもなく更新され、シームレスなアプリ統合のために LoudnessCodecController API を利用するようになります。

ローライト ブースト

Android 15 では、新しい自動露出モードであるローライト ブーストが導入され、カメラ 2夜間モードのカメラ拡張機能の両方で使用できます。ローライト ブーストは、暗い場所でプレビュー ストリームの露出を調整します。これは、夜間モードのカメラ拡張機能が静止画像を作成する方法とは異なります。夜間モードでは、大量の写真を組み合わせて 1 つの補正された画像を作成するためです。夜間モードは静止画像の作成には適していますが、フレームの連続ストリームを作成することはできませんが、ローライト ブーストは作成できます。そのため、ローライト ブーストにより、次のような新しいカメラ機能が有効になります。

  • 強化された画像プレビューを提供することで、ユーザーが暗い場所での写真をより適切にフレームに収められるようにする
  • 暗い場所での QR コードのスキャン

ローライト ブーストを有効にすると、光量が不足すると自動的にオンになり、光量が増加するとオフになります。

アプリは、暗い場所でプレビュー ストリームから録画して、明るい動画を保存できます。

詳しくは、ローライト ブーストをご覧ください。

仮想 MIDI 2.0 デバイス

Android 13 では、Universal MIDI Packets(UMP)を使用して通信する USB を使用して MIDI 2.0 デバイスに接続するためのサポートが追加されました。Android 15 では、UMP のサポートが仮想 MIDI アプリに拡張されています。これにより、合成アプリは USB MIDI 2.0 デバイスの場合と同様に、シンセサイザー アプリを仮想 MIDI 2.0 デバイスとして制御できます。

接続性

Android 15 ではプラットフォームが更新され、最新の通信機能をアプリが利用できるようになります。

衛星のサポート

Android 15 では、引き続き衛星接続のプラットフォーム サポートを拡張しており、衛星接続の状況全体で一貫したユーザー エクスペリエンスを実現するため、いくつかの UI 要素が含まれています。

アプリは ServiceState.isUsingNonTerrestrialNetwork() を使用して、デバイスが衛星に接続されていることを検出できます。これにより、完全なネットワーク サービスが利用できない理由について、より認識しやすくなります。また、Android 15 では、SMS アプリと MMS アプリ、プリロードされた RCS アプリで、衛星接続を使用してメッセージを送受信できます。

デバイスが衛星に接続すると通知が表示されます。

NFC 操作がよりスムーズに

Android 15 では、Android の堅牢な NFC アプリ エコシステムを引き続きサポートしながら、タッチ決済のエクスペリエンスをよりシームレスで信頼性の高いものにするよう努めています。サポートされているデバイスでは、アプリは NfcAdapter に対して、監視モードに入るようリクエストできます。このモードでは、デバイスはリッスンするが NFC リーダーには応答せず、アプリの NFC サービスの PollingFrame オブジェクトを送信して処理します。PollingFrame オブジェクトを使用すると、NFC リーダーへの最初の通信に先立って認証を行うことができます。これにより、多くの場合、ワンタップのトランザクションが可能になります。

ウォレットの役割

Android 15 では、ユーザーが使用するウォレット アプリとより緊密に統合できるウォレットの新しいロールが導入されています。このロールは、NFC のデフォルトの非接触型決済の設定に代わるものです。ウォレットのロールを保持するユーザーは、[設定] > [アプリ] > [デフォルト アプリ] に移動して管理できます。

ウォレットのロールは、支払いカテゴリに登録されている AID に NFC タップをルーティングする場合に使用します。同じ AID に登録されている別のアプリがフォアグラウンドで実行されている場合を除き、タップは常にウォレットのロール所有者に移動します。

このロールは、ウォレットのクイックアクセス タイルが有効な場合にどこに配置するかを決定するためにも使用されます。ロールが「なし」に設定されている場合、QuickAccess タイルは使用できず、支払いカテゴリの NFC タップはフォアグラウンド アプリにのみ配信されます。

デベロッパーの生産性とツール

生産性を向上させるための Google の取り組みのほとんどは Android StudioJetpack ComposeAndroid Jetpack ライブラリなどのツールを中心に据えていますが、Google はビジョンの実現を容易にする方法を常に模索しています。

PDF の改善

Android 15 デベロッパー プレビュー 2 には、PdfRenderer API を大幅に改善した早期プレビュー版が含まれています。アプリには、パスワード保護されたファイルのレンダリング、アノテーション、フォームの編集検索、コピーによる選択などの高度な機能を組み込むことができます。線形化された PDF の最適化がサポートされ、ローカルの PDF 表示を高速化し、リソース使用量を削減できます。

PDF レンダリングの最新のアップデートには、埋め込み PDF ファイルの検索などの機能が含まれています。

PdfRenderer は、プラットフォーム リリースに関係なく Google Play システム アップデートを使用して更新できるモジュールに移動されました。PdfRendererPreV という Android 15 より前の互換性のある API サーフェスを作成することで、これらの変更を Android 11(API レベル 30)まで遡ってサポートしています。

PdfRenderer API サーフェスの機能強化について皆様からのフィードバックをお待ちしております。今後の Android Jetpack ライブラリでは、こうした API の組み込みがより簡単になる予定です。

言語の自動切り替えの改良

Android 14 では、言語の自動切り替えを伴うデバイス上の多言語認識機能が追加されていますが、特に 2 つの発話間の一時停止が少なく言語が切り替わる場合は、単語が欠落する可能性があります。Android 15 では、アプリがユースケースに合わせてこの切り替えを調整できるように、コントロールが追加されています。 EXTRA_LANGUAGE_SWITCH_INITIAL_ACTIVE_DURATION_TIME_MILLIS は自動切り替えを音声セッションの開始に制限し、EXTRA_LANGUAGE_SWITCH_MATCH_SWITCHES は定義された回数の切り替えの後に言語切り替えを無効にします。これらのオプションは、セッション中に 1 つの言語が自動検出されることを想定している場合に特に便利です。

細かな改行コントロール

Android 15 以降では、TextView とその基になる改行を挿入して、読みやすくするために、同じ行の指定された部分を保持できます。この改行のカスタマイズを利用するには、文字列リソースで <nobreak> タグを使用するか、createNoBreakSpan を使用します。同様に、<nohyphen> タグまたは createNoHyphenationSpan を使用すると、ハイフンでつないだ単語を保持できます。

たとえば、次の文字列リソースには改行がなく、「Google Pixel 8 Pro」というテキストで不適切な位置で改行されます。

<resources>
    <string name="pixel8pro">The power and brains behind Pixel 8 Pro.</string>
</resources>

一方、この文字列リソースには <nobreak> タグが含まれています。このタグは「Google Pixel 8 Pro」というフレーズを囲み、改行を防ぎます。

<resources>
    <string name="pixel8pro">The power and brains behind <nobreak>Pixel 8 Pro.</nobreak></string>
</resources>

これらの文字列のレンダリング方法の違いを次の画像に示します。

「Google Pixel 8 Pro」というフレーズが <nobreak> タグでラップされていないテキスト行のレイアウト。
「Google Pixel 8 Pro」というフレーズが <nobreak> タグで囲まれているテキスト行と同じ行のレイアウト。

OpenJDK 17 の更新

Android 15 では、最新の OpenJDK LTS リリースの機能に合わせて Android のコアライブラリを更新する取り組みが引き続き行われています。

主な機能と改善点は次のとおりです。

これらの API は、Google Play システム アップデートを通じて Android 12(API レベル 31)以降を搭載した 10 億台を超えるデバイスで更新されるため、最新のプログラミング機能をターゲットにできます。

Java および OpenJDK は、Oracle およびその関連会社の商標または登録商標です。

大画面とフォーム ファクタ

Android 15 は、大画面、フリップ式、折りたたみ式デバイスなど、Android のフォーム ファクタを最大限に活用するためのサポートをアプリに提供します。

カバー画面のサポート

アプリは、サポートされているフリップ式デバイスの小さなカバー画面に Application または Activity を表示できるように、Android 15 で使用されるプロパティを宣言できます。これらの画面は小さすぎるため、Android アプリの実行可能なターゲットとして見なされませんが、アプリでサポートをオプトインすることで、より多くの場所でアプリを利用できるようになります。

パフォーマンスとバッテリー

Android は、引き続きアプリのパフォーマンスと品質の改善のサポートに重点を置いています。Android 15 では、アプリ内のタスクの実行、アプリのパフォーマンスの最適化、アプリに関する分析情報の収集に役立つ新しい API が導入されています。

ApplicationStartInfo API

以前のバージョンの Android では、アプリの起動が少し謎でした。アプリ内で、コールド状態、ウォーム状態、ホット状態のうちどれで開始されたのかを判断するのが困難でした。また、プロセスのフォーク、onCreate の呼び出し、最初のフレームの描画など、さまざまなリリース フェーズにアプリが費やした時間を把握するのも困難でした。Application クラスがインスタンス化された時点では、アプリがブロードキャスト、コンテンツ プロバイダ、ジョブ、バックアップ、起動完了、アラーム、Activity のどれから開始されたかを知る方法がありませんでした。

Android 15 の ApplicationStartInfo API は、これらすべてを提供します。独自のタイムスタンプをフローに追加して、タイミング データを 1 か所に収集することもできます。ApplicationStartInfo を使用すると、指標を収集するだけでなく、アプリの起動を直接最適化することもできます。たとえば、ブロードキャストによってアプリが起動したときに、Application クラス内で UI 関連ライブラリのインスタンス化のコストがかからなくなります。

アプリサイズの詳細情報

Android 8.0(API レベル 26)以降、アプリのインストール サイズを 1 つのバイト数として要約する StorageStats.getAppBytes API が追加されました。これは、APK サイズ、APK から抽出されたファイルのサイズ、デバイス上で生成されたファイル(AOT コンパイル済みコードなど)の合計です。この数値は、アプリがストレージをどのように使用しているかという点から見て、あまり意味がありません。

Android 15 では、StorageStats.getAppBytesByDataType([type]) API が追加されています。これにより、APK ファイルの分割、AOT と高速化に関連するコード、dex メタデータ、ライブラリ、ガイド付きプロファイルなど、アプリがその容量をどのように使用しているかに関する分析情報を取得できます。

SQLite データベースの改善

Android 15 では、基盤となる SQLite エンジンの高度な機能を公開する新しい SQLite API が導入されています。これらの API は、アプリに現れる特定のパフォーマンス問題を対象としています。

デベロッパーは、特に大規模なデータベースを扱う場合や、レイテンシの影響を受けやすいクエリを実行する場合は、SQLite のパフォーマンスに関するベスト プラクティスを参照して SQLite データベースを最大限に活用する必要があります。

  • 読み取り専用の遅延トランザクション: 読み取り専用のトランザクション(書き込みステートメントを含まない)を発行する場合は、beginTransactionReadOnly()beginTransactionWithListenerReadOnly(SQLiteTransactionListener) を使用して読み取り専用の DEFERRED トランザクションを発行します。このようなトランザクションは相互に同時に実行でき、データベースが WAL モードの場合、IMMEDIATE または EXCLUSIVE トランザクションと同時に実行できます。
  • 行数と ID: 追加のクエリを発行せずに、変更された行の数または最後に挿入された行 ID を取得できる新しい API が追加されました。getLastChangedRowCount() は、現在のトランザクション内の最新の SQL ステートメントによって挿入、更新、削除された行数を返します。getTotalChangedRowCount() は現在の接続の数を返します。getLastInsertRowId() は、現在の接続に挿入される最後の行の rowid を返します。
  • 未加工ステートメント: 未処理の SQlite ステートメントを発行し、コンビニエンス ラッパーや追加の処理オーバーヘッドをバイパスします。

Android Dynamic Performance Framework のアップデート

Android 15 では、Android Dynamic Performance Framework(ADPF)への投資を継続します。ADPF は、ゲームやパフォーマンス集約型のアプリが Android デバイスの電源システムや温度システムとより直接やり取りできるようにする API セットです。サポートされているデバイスでは、Android 15 で新しい ADPF 機能が追加されます。

  • 関連するスレッドがパフォーマンスよりも省電力を優先する必要があることを示すヒント セッションの省電力モード。長時間実行されるバックグラウンド ワークロードに最適です。
  • GPU と CPU の作業時間の両方をヒント セッションでレポートできます。これにより、システムは CPU と GPU の周波数を一緒に調整してワークロードの需要を最大限に満たすことができます。
  • サーマル ヘッドルームしきい値。ヘッドルーム予測に基づいてサーマル スロットリング ステータスを解釈します。

アプリやゲームで ADPF を使用する方法について詳しくは、こちらのドキュメントをご覧ください。

プライバシー

Android 15 には、アプリ デベロッパーがユーザーのプライバシーを保護するために役立つさまざまな機能が用意されています。

画面録画の検出

Android 15 では、録画されていることを検出するアプリのサポートが追加されています。コールバックは、画面録画内でアプリが表示と非表示を切り替えるたびに呼び出されます。登録プロセスの UID が所有するアクティビティが記録されている場合、アプリは可視と見なされます。これにより、アプリが機密性の高いオペレーションを実行している場合に、記録されていることをユーザーに通知できます。

val mCallback = Consumer<Int> { state ->
  if (state == SCREEN_RECORDING_STATE_VISIBLE) {
    // We're being recorded
  } else {
    // We're not being recorded
  }
}

override fun onStart() {
   super.onStart()
   val initialState =
      windowManager.addScreenRecordingCallback(mainExecutor, mCallback)
   mCallback.accept(initialState)
}

override fun onStop() {
    super.onStop()
    windowManager.removeScreenRecordingCallback(mCallback)
}

IntentFilter 機能の拡張

Android 15 では、UriRelativeFilterGroup を通じて、より正確な Intent 解決をサポートしています。これには、URL クエリ パラメータ、URL フラグメント、ブロックルールまたは除外ルールなど、それぞれ満たす必要がある Intent 一致ルールのセットを形成する一連の UriRelativeFilter オブジェクトが含まれています。

これらのルールは、AndroidManifest XML ファイルで新しい <uri-relative-filter-group> タグを使用して定義できます。このタグには必要に応じて android:allow タグを含めることができます。これらのタグには、既存のデータタグ属性を使用する <data> タグと、新しい android:query 属性と android:fragment 属性を含めることができます。

AndroidManifest 構文の例を次に示します。

<intent-filter>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.BROWSABLE" />
  <data android:scheme="http" />
  <data android:scheme="https" />
  <data android:domain="astore.com" />
  <uri-relative-filter-group>
    <data android:pathPrefix="/auth" />
    <data android:query="region=na" />
  </uri-relative-filter-group>
  <uri-relative-filter-group android:allow="false">
    <data android:pathPrefix="/auth" />
    <data android:query="mobileoptout=true" />
  </uri-relative-filter-group>
  <uri-relative-filter-group android:allow="false">
    <data android:pathPrefix="/auth" />
    <data android:fragmentPrefix="faq" />
  </uri-relative-filter-group>
</intent-filter>

Android 版プライバシー サンドボックス

Android 15 では、Android 広告サービスが拡張レベル 10 に引き上げられ、最新バージョンの Android 版プライバシー サンドボックスが組み込まれています。これは、モバイルアプリでユーザーのプライバシーを強化し、効果的なパーソナライズド広告体験を可能にする新しいテクノロジーを開発する取り組みの一環です。プライバシー サンドボックスのページには、Android 版プライバシー サンドボックスのデベロッパー プレビューとベータ版プログラムに関する詳細情報が記載されています。

ヘルスコネクト

Android 15 では、Android 14 拡張機能 10 が Android のヘルスコネクトに統合されています。これは、アプリで収集された健康やフィットネスのデータを管理および共有するための、安全で一元化されたプラットフォームです。このアップデートでは、フィットネス栄養など、新しいデータ型のサポートが追加されています。

部分的画面共有

Android 15 では部分的な画面共有がサポートされているため、ユーザーはデバイスの画面全体ではなく、アプリ ウィンドウのみを共有または録画できます。この機能には Android 14 QPR2 で初めて有効になり、アプリで部分的な画面共有のエクスペリエンスをカスタマイズできる MediaProjection コールバックが含まれています。Android 14(API レベル 34)以降をターゲットとするアプリでは、MediaProjection キャプチャ セッションごとにユーザーの同意が必要になりました。

セキュリティ

Android 15 では、アプリのセキュリティを強化し、アプリのデータを保護できます。

fs-verity を使用してファイルを保護する

Android 15 の FileIntegrityManager には、Linux カーネルの fs-verity 機能を利用する新しい API が含まれています。fs-verity を使用すると、ファイルをカスタム暗号署名で保護できるため、改ざんや破損がないことを保証できます。これによりセキュリティが強化され、アプリの機能やデータを損なうおそれのあるマルウェアや不正なファイル変更から保護できます。

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

Android 15 では、アプリ デベロッパーとユーザーは、ニーズに合わせてデバイスをきめ細かく柔軟に設定できます。

サイレント モード ルールの改善

AutomaticZenRule を使用すると、アプリはアテンション管理(サイレント モード)ルールをカスタマイズし、いつ有効にするか無効にするかを決定できます。Android 15 では、ユーザー エクスペリエンスの向上を目的として、これらのルールが大幅に強化されています。次の機能強化が含まれています。

  • AutomaticZenRule にタイプを追加し、システムで一部のルールに特別な処理を適用できるようにしました。
  • AutomaticZenRule にアイコンを追加して、モードを認識しやすくしました。
  • ユーザーに対してルールをアクティブにする条件を記述する triggerDescription 文字列を AutomaticZenRule に追加します。
  • AutomaticZenRuleZenDeviceEffects が追加され、グレースケール表示、夜間モード、壁紙を暗くするなどのルールをトリガーできるようになりました。