機能と 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 chooses HDR headroom that is appropriate for the underlying device capabilities and bit-depth of the panel. For pages that have lots of SDR content, such as a messaging app displaying a single HDR thumbnail, this behavior can end up adversely influencing the perceived brightness of the SDR content. Android 15 lets you control the HDR headroom with setDesiredHdrHeadroom to strike a balance between SDR and HDR content.

The brightness of SDR UI elements on the left screen appears to be more uniform than the brightness on the right screen, which simulates possible headroom issues when HDR and SDR content are mixed. By adjusting the HDR headroom, you can achieve a better balance between the SDR and HDR content.

ラウドネス コントロール

Android 15 introduces support for the CTA-2075 loudness standard to help you avoid audio loudness inconsistencies and ensure users don't have to constantly adjust volume when switching between content. The system leverages known characteristics of the output devices (headphones and speaker) along with loudness metadata available in AAC audio content to intelligently adjust the audio loudness and dynamic range compression levels.

To enable this feature, you need to ensure loudness metadata is available in your AAC content and enable the platform feature in your app. For this, you instantiate a LoudnessCodecController object by calling its create factory method with the audio session ID from the associated AudioTrack; this automatically starts applying audio updates. You can pass an OnLoudnessCodecUpdateListener to modify or filter loudness parameters before they are applied on the 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 will soon be updated to leverage LoudnessCodecController APIs for a seamless app integration.

ローライト ブースト

Android 15 introduces Low Light Boost, a new auto-exposure mode available to both Camera 2 and the night mode camera extension. Low Light Boost adjusts the exposure of the Preview stream in low-light conditions. This is different from how the night mode camera extension creates still images, because night mode combines a burst of photos to create a single, enhanced image. While night mode works very well for creating a still image, it can't create a continuous stream of frames, but Low Light Boost can. Thus, Low Light Boost enables new camera capabilities, such as:

  • Providing an enhanced image preview, so users are better able to frame their low-light pictures
  • Scanning QR codes in low light

If you enable Low Light Boost, it automatically turns on when there's a low light level, and turns off when there's more light.

Apps can record off the Preview stream in low-light conditions to save a brightened video.

For more information, see Low Light Boost.

仮想 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 continues to extend platform support for satellite connectivity and includes some UI elements to ensure a consistent user experience across the satellite connectivity landscape.

Apps can use ServiceState.isUsingNonTerrestrialNetwork() to detect when a device is connected to a satellite, giving them more awareness of why full network services might be unavailable. Additionally, Android 15 provides support for SMS and MMS apps as well as preloaded RCS apps to use satellite connectivity for sending and receiving messages.

A notification appears when the device connects to a satellite.

NFC 操作がよりスムーズに

Android 15 is working to make the tap to pay experience more seamless and reliable while continuing to support Android's robust NFC app ecosystem. On supported devices, apps can request the NfcAdapter to enter observe mode, where the device listens but doesn't respond to NFC readers, sending the app's NFC service PollingFrame objects to process. The PollingFrame objects can be used to auth ahead of the first communication to the NFC reader, allowing for a one tap transaction in many cases.

ウォレットの役割

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

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

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

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

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

PDF の改善

Android 15 Developer Preview 2 includes an early preview of substantial improvements to the PdfRenderer APIs. Apps can incorporate advanced features such as rendering password-protected files, annotations, form editing, searching, and selection with copy. Linearized PDF optimizations are supported to speed local PDF viewing and reduce resource use.

The latest updates to PDF rendering include features such as searching an embedded PDF file.

The PdfRenderer has been moved to a module that can be updated using Google Play system updates independent of the platform release, and we're supporting these changes back to Android 11 (API level 30) by creating a compatible pre-Android 15 version of the API surface, called PdfRendererPreV.

We value your feedback on the enhancements we've made to the PdfRenderer API surface, and we plan to make it even easier to incorporate these APIs into your app with an upcoming Android Jetpack library.

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

Android 14 added on-device, multi-language recognition in audio with automatic switching between languages, but this can cause words to get dropped, especially when languages switch with less of a pause between the two utterances. Android 15 adds additional controls to help apps tune this switching to their use case. EXTRA_LANGUAGE_SWITCH_INITIAL_ACTIVE_DURATION_TIME_MILLIS confines the automatic switching to the beginning of the audio session, while EXTRA_LANGUAGE_SWITCH_MATCH_SWITCHES deactivates the language switching after a defined number of switches. These options are particularly useful if you expect that there will be a single language spoken during the session that should be autodetected.

細かな改行コントロール

Starting in Android 15, a TextView and the underlying line breaker can preserve the given portion of text in the same line to improve readability. You can take advantage of this line break customization by using the <nobreak> tag in string resources or createNoBreakSpan. Similarly, you can preserve words from hyphenation by using the <nohyphen> tag or createNoHyphenationSpan.

For example, the following string resource doesn't include a line break, and renders with the text "Pixel 8 Pro." breaking in an undesirable place:

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

In contrast, this string resource includes the <nobreak> tag, which wraps the phrase "Pixel 8 Pro." and prevents line breaks:

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

The difference in how these strings are rendered is shown in the following images:

Layout for a line of text where the phrase "Pixel 8 Pro." isn't wrapped using a <nobreak> tag.
Layout for the same line of text where the phrase "Pixel 8 Pro." is wrapped using a <nobreak> tag.

OpenJDK 17 の更新

Android 15 continues the work of refreshing Android's core libraries to align with the features in the latest OpenJDK LTS releases.

The following key features and improvements are included:

These APIs are updated on over a billion devices running Android 12 (API level 31) and higher through Google Play System updates, so you can target the latest programming features.

Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.

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

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

カバー画面のサポート

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

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

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

ApplicationStartInfo API

In previous versions of Android, app startup has been a bit of a mystery. It was challenging to determine within your app whether it started from a cold, warm, or hot state. It was also difficult to know how long your app spent during the various launch phases: forking the process, calling onCreate, drawing the first frame, and more. When your Application class was instantiated, you had no way of knowing whether the app started from a broadcast, a content provider, a job, a backup, boot complete, an alarm, or an Activity.

The ApplicationStartInfo API on Android 15 provides all of this and more. You can even choose to add your own timestamps into the flow to help collect timing data in one place. In addition to collecting metrics, you can use ApplicationStartInfo to help directly optimize app startup; for example, you can eliminate the costly instantiation of UI-related libraries within your Application class when your app is starting up due to a broadcast.

アプリサイズの詳細情報

Since Android 8.0 (API level 26), Android has included the StorageStats.getAppBytes API that summarizes the installed size of an app as a single number of bytes, which is a sum of the APK size, the size of files extracted from the APK, and files that were generated on the device such as ahead-of-time (AOT) compiled code. This number is not very insightful in terms of how your app is using storage.

Android 15 adds the StorageStats.getAppBytesByDataType([type]) API, which lets you get insight into how your app is using up all that space, including APK file splits, AOT and speedup related code, dex metadata, libraries, and guided profiles.

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 continues our investment in the Android Dynamic Performance Framework (ADPF), a set of APIs that allow games and performance intensive apps to interact more directly with power and thermal systems of Android devices. On supported devices, Android 15 will add new ADPF capabilities:

  • A power-efficiency mode for hint sessions to indicate that their associated threads should prefer power saving over performance, great for long-running background workloads.
  • GPU and CPU work durations can both be reported in hint sessions, allowing the system to adjust CPU and GPU frequencies together to best meet workload demands.
  • Thermal headroom thresholds to interpret possible thermal throttling status based on headroom prediction.

To learn more about how to use ADPF in your apps and games, head over to the documentation.

プライバシー

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 lets apps customize Attention Management (Do Not Disturb) rules and decide when to activate or deactivate them. Android 15 greatly enhances these rules with the goal of improving the user experience. The following enhancements are included:

  • Adding types to AutomaticZenRule, allowing the system to apply special treatment to some rules.
  • Adding an icon to AutomaticZenRule, helping to make the modes be more recognizable.
  • Adding a triggerDescription string to AutomaticZenRule that describes the conditions on which the rule should become active for the user.
  • Added ZenDeviceEffects to AutomaticZenRule, allowing rules to trigger things like grayscale display, night mode, or dimming the wallpaper.