機能と API の概要

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

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

カメラとメディア

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

Android のメディアとカメラの最新機能とデベロッパー ソリューションについて詳しくは、Google I/O の最新の Android メディアとカメラ エクスペリエンスの構築の講演をご覧ください。

ローライト ブースト

Android 15 introduces Low Light Boost, an 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 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.

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

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 コンテンツを編集して、アプリでプラットフォーム機能を有効にします。そのために、 LoudnessCodecController オブジェクトをインスタンス化する 音声とともに create ファクトリ メソッドを呼び出す 関連付けられている AudioTrack のセッション ID。 自動的にオーディオ アップデートの適用が開始されます。渡すには、 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。

Virtual MIDI 2.0 デバイス

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

AV1 ソフトウェア デコードの効率化

dav1d ロゴ

VideoLAN の一般的な AV1 ソフトウェア デコーダである dav1d が、ハードウェアでの AV1 デコードをサポートしていない Android デバイスで利用できるようになりました。dav1d は、従来の AV1 ソフトウェア デコーダよりも最大 3 倍のパフォーマンスが高く、一部の低中層デバイスを含む多くのユーザーが HD AV1 再生が可能です。

現時点では、アプリで "c2.android.av1-dav1d.decoder" という名前で dav1d を呼び出して、dav1d の使用を有効にする必要があります。dav1d は、今後のアップデートでデフォルトの AV1 ソフトウェア デコーダになります。このサポートは標準化されており、Google Play システム アップデートを受信する Android 11 デバイスにバックポートされています。

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

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

OpenJDK 17 の更新

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

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

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

PDF の改善

Android 15 では、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 つの言語が自動検出されることを想定している場合に特に便利です。

OpenType Variable Font API を改善

Android 15 では、OpenType 変数フォントのユーザビリティが改善されています。今すぐ を指定せずに可変フォントから FontFamily インスタンスを作成します。 buildVariableFamily API による重量軸。テキストレンダラは 表示テキストに合わせて wght 軸の値。

新しい API を使用すると、Typeface を作成するためのコードが簡素化されます。 かなり:

Kotlin

val newTypeface = Typeface.CustomFallbackBuilder(
            FontFamily.Builder(
                Font.Builder(assets, "RobotoFlex.ttf").build())
                    .buildVariableFamily())
    .build()

Java

Typeface newTypeface = Typeface.CustomFallbackBuilder(
            new FontFamily.Builder(
                new Font.Builder(assets, "RobotoFlex.ttf").build())
                    .buildVariableFamily())
    .build();

以前は、同じ Typeface を作成するには、より多くのコードが必要でした。

Kotlin

val oldTypeface = Typeface.CustomFallbackBuilder(
            FontFamily.Builder(
                Font.Builder(assets, "RobotoFlex.ttf")
                    .setFontVariationSettings("'wght' 400")
                    .setWeight(400)
                    .build())
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 100")
                        .setWeight(100)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 200")
                        .setWeight(200)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 300")
                        .setWeight(300)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 500")
                        .setWeight(500)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 600")
                        .setWeight(600)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 700")
                        .setWeight(700)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 800")
                        .setWeight(800)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 900")
                        .setWeight(900)
                        .build()
                ).build()
        ).build()

Java

Typeface oldTypeface = new Typeface.CustomFallbackBuilder(
    new FontFamily.Builder(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 400")
            .setWeight(400)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 100")
            .setWeight(100)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 200")
            .setWeight(200)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 300")
            .setWeight(300)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 500")
            .setWeight(500)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 600")
            .setWeight(600)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 700")
            .setWeight(700)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 800")
            .setWeight(800)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 900")
            .setWeight(900)
            .build()
    )
    .build()
).build();

新旧両方の API を使用して Typeface を作成する方法の例を次に示します。 レンダリング:

新旧で Typeface レンダリングがどのように異なるかを示す例
API

この例では、古い API で作成された Typeface に 350、450、550、650 のフォント ウェイトを正確に作成 Font インスタンスなので、レンダラは最も近い重みにフォールバックします。たとえば この場合、350 ではなく 300 がレンダリングされ、450 ではなく 400 がレンダリングされます。 できます。一方、新しい API で作成された Typeface は、 指定された重みに対する Font インスタンス。350 度は正確な重みがレンダリングされます。 450、550、650 も選択できます

きめの細かい改行コントロール

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.

アプリのアーカイブ

Android と Google Play は昨年、アプリのアーカイブのサポートを発表しました。これにより、Google Play で Android App Bundle を使用して公開された、使用頻度の低いアプリをデバイスから部分的に削除して、空き容量を増やすことができます。Android 15 では、アプリのアーカイブとアーカイブ解除の OS レベルのサポートが追加され、すべてのアプリストアでより簡単に実装できるようになりました。

REQUEST_DELETE_PACKAGES 権限を持つアプリは、PackageInstaller requestArchive メソッドを呼び出して、インストール済みのアプリ パッケージのアーカイブをリクエストできます。これにより、APK とキャッシュに保存されたファイルが削除されますが、ユーザーデータは保持されます。アーカイブされたアプリは、LauncherApps API を通じて表示可能なアプリとして返されます。ユーザーには、それらのアプリがアーカイブされていることを示す UI 処理が表示されます。ユーザーがアーカイブされたアプリをタップすると、担当インストーラがそのアプリのアーカイブ解除リクエストを受け取ります。復元プロセスは、ACTION_PACKAGE_ADDED ブロードキャストによってモニタリングできます。

グラフィック

Android 15 では、ANGLE や Canvas グラフィック システムの追加など、最新のグラフィック改善が行われています。

Android の GPU アクセスのモダナイゼーション

Vulkan logo

Android hardware has evolved quite a bit from the early days where the core OS would run on a single CPU and GPUs were accessed using APIs based on fixed-function pipelines. The Vulkan® graphics API has been available in the NDK since Android 7.0 (API level 24) with a lower-level abstraction that better reflects modern GPU hardware, scales better to support multiple CPU cores, and offers reduced CPU driver overhead — leading to improved app performance. Vulkan is supported by all modern game engines.

Vulkan is Android's preferred interface to the GPU. Therefore, Android 15 includes ANGLE as an optional layer for running OpenGL® ES on top of Vulkan. Moving to ANGLE will standardize the Android OpenGL implementation for improved compatibility, and, in some cases, improved performance. You can test out your OpenGL ES app stability and performance with ANGLE by enabling the developer option in Settings -> System -> Developer Options -> Experimental: Enable ANGLE on Android 15.

The Android ANGLE on Vulkan roadmap

Roadmap of upcoming changes to the Android GPU APIs.

As part of streamlining our GPU stack, going forward we will be shipping ANGLE as the GL system driver on more new devices, with the future expectation that OpenGL/ES will be only available through ANGLE. That being said, we plan to continue support for OpenGL ES on all devices.

Recommended next steps

Use the developer options to select the ANGLE driver for OpenGL ES and test your app. For new projects, we strongly encourage using Vulkan for C/C++.

Canvas の改善点

Android 15 では、次の新機能によって Android のキャンバス グラフィック システムのモダナイゼーションが引き続き行われています。

  • Matrix44 は、キャンバスを 3D で操作する場合に使用する座標を変換するための 4x4 マトリックスを提供します。
  • clipShader は現在のクリップと指定されたシェーダーを交差させ、clipOutShader はクリップを現在のクリップとシェーダーの差分に設定し、それぞれがシェーダーをアルファマスクとして扱います。これにより、複雑な図形の描画が効率的にサポートされます。

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

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

バッテリー効率の高いおすすめの方法、ネットワークと電力使用量のデバッグ、および Android 15 と Android の最近のバージョンにおけるバックグラウンド処理のバッテリー効率を向上させる方法について詳しくは、Google I/O の Android でのバックグラウンド処理のバッテリー効率を改善するをご覧ください。

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 メタデータ、ライブラリ、ガイド付きプロファイルなど、アプリがその容量をどのように使用しているかに関する分析情報を取得できます。

アプリ管理のプロファイリング

Android 15 には、アプリ内からプロファイリング情報を収集できる新しい ProfilingManager クラスが含まれています。プロファイリング リクエストの作成を簡素化する Android Jetpack API でこれをラップする予定ですが、コア API ではヒープダンプ、ヒープ プロファイル、スタック サンプリングなどの収集が可能になります。出力ファイルを識別するタグで指定されたコールバックをアプリに提供します。出力ファイルは、アプリのファイル ディレクトリに配信されます。パフォーマンスへの影響を最小限に抑えるために、API はレート制限を行います。

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 では、より正確な Intent 解像度のサポートが組み込まれており、 UriRelativeFilterGroup: 一連の Intent を形成する UriRelativeFilter オブジェクト URL クエリ パラメータ、URL クエリ パラメータ、URL ルールなど、 フラグメント、ブロックルールや除外ルールを 作成できます

これらのルールは、新しい AndroidManifest <uri-relative-filter-group> タグ。必要に応じて android:allow タグ。これらのタグには、既存のデータを使用する <data> タグを含めることができます。 タグ属性、新しい android:queryandroid: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>

プライベート スペース

The private space can be unlocked and locked to show or hide sensitive apps on a device.

Private space lets users create a separate space on their device where they can keep sensitive apps away from prying eyes, under an additional layer of authentication. The private space uses a separate user profile. The user can choose to use the device lock or a separate lock factor for the private space.

Apps in the private space show up in a separate container in the launcher, and are hidden from the recents view, notifications, settings, and from other apps when the private space is locked. User-generated and downloaded content (such as media or files) and accounts are separated between the private space and the main space. The system sharesheet and the photo picker can be used to give apps access to content across spaces when the private space is unlocked.

Users can't move existing apps and their data into the private space. Instead, users select an install option in the private space to install an app using whichever app store they prefer. Apps in the private space are installed as separate copies from any apps in the main space (new copies of the same app).

When a user locks the private space, the profile is stopped. While the profile is stopped, apps in the private space are no longer active and can't perform foreground or background activities, including showing notifications.

We recommend that you test your app with private space to make sure your app works as expected, especially if your app falls into one of the following categories:

「選択した写真へのアクセス」について最新のユーザー選択をクエリする

Apps can now highlight only the most-recently-selected photos and videos when partial access to media permissions is granted. This feature can improve the user experience for apps that frequently request access to photos and videos. To use this feature in your app, enable the QUERY_ARG_LATEST_SELECTION_ONLY argument when querying MediaStore through ContentResolver.

Kotlin

val externalContentUri = MediaStore.Files.getContentUri("external")

val mediaColumns = arrayOf(
   FileColumns._ID,
   FileColumns.DISPLAY_NAME,
   FileColumns.MIME_TYPE,
)

val queryArgs = bundleOf(
   // Return only items from the last selection (selected photos access)
   QUERY_ARG_LATEST_SELECTION_ONLY to true,
   // Sort returned items chronologically based on when they were added to the device's storage
   QUERY_ARG_SQL_SORT_ORDER to "${FileColumns.DATE_ADDED} DESC",
   QUERY_ARG_SQL_SELECTION to "${FileColumns.MEDIA_TYPE} = ? OR ${FileColumns.MEDIA_TYPE} = ?",
   QUERY_ARG_SQL_SELECTION_ARGS to arrayOf(
       FileColumns.MEDIA_TYPE_IMAGE.toString(),
       FileColumns.MEDIA_TYPE_VIDEO.toString()
   )
)

Java

Uri externalContentUri = MediaStore.Files.getContentUri("external");

String[] mediaColumns = {
    FileColumns._ID,
    FileColumns.DISPLAY_NAME,
    FileColumns.MIME_TYPE
};

Bundle queryArgs = new Bundle();
queryArgs.putBoolean(MediaStore.QUERY_ARG_LATEST_SELECTION_ONLY, true);
queryArgs.putString(MediaStore.QUERY_ARG_SQL_SORT_ORDER, FileColumns.DATE_ADDED + " DESC");
queryArgs.putString(MediaStore.QUERY_ARG_SQL_SELECTION, FileColumns.MEDIA_TYPE + " = ? OR " + FileColumns.MEDIA_TYPE + " = ?");
queryArgs.putStringArray(MediaStore.QUERY_ARG_SQL_SELECTION_ARGS, new String[] {
    String.valueOf(FileColumns.MEDIA_TYPE_IMAGE),
    String.valueOf(FileColumns.MEDIA_TYPE_VIDEO)
});

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

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

ヘルスコネクト

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

皮膚温のトラッキングを使用すると、ウェアラブルなどのトラッキング デバイスからより正確な温度データを保存し、共有できます。

トレーニング プランは、ユーザーがフィットネスの目標を達成できるように構造化されたワークアウト プランです。トレーニング プランは、さまざまな完了目標やパフォーマンス目標をサポートしています。

Android のヘルスコネクトの最新アップデートについては、Google I/O の講演 Android Health で適応性の高いエクスペリエンスを構築するをご覧ください。

部分的画面共有

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

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

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

Android 15 の最新の改善点を使用してアプリのユーザー エクスペリエンスを改善する方法について詳しくは、Google I/O の Android アプリのユーザー エクスペリエンスを改善するをご覧ください。

Generated Previews API によるリッチなウィジェット プレビュー

Android 15 より前では、ウィジェット ピッカーのプレビューを提供する唯一の方法は、 静的な画像リソースやレイアウト リソース。これらのプレビューは多くの場合、 ウィジェットを家に配置した際のデザインと見た目が大きく異なります。 表示されます。また、Jetpack Glance では静的リソースを作成できないため、 デベロッパーは、ウィジェットのスクリーンショットを撮るか、XML レイアウトを作成して ウィジェットのプレビュー。

Android 15 では、生成されたプレビューのサポートが追加されています。つまりアプリウィジェットは 代わりに、選択ツールのプレビューとして使用する RemoteViews を生成できます。 学びます。

<ph type="x-smartling-placeholder">
</ph>
アプリはウィジェット選択ツールにリモートビューを提供できるため、 選択ツールのコンテンツを更新して、ユーザーとの関連性が高いものになるようにします。 表示されます。

push API

アプリは push API を使用して、生成されたプレビューを提供できます。アプリが提供できるもの ライフサイクルのどの時点でもプレビューであり、明示的なリクエストは プレビューが表示されます。プレビューは AppWidgetService で保持されます。 ホストがオンデマンドでリクエストできます。次の例では、XML ウィジェットを読み込みます。 それをプレビューとして設定します。

AppWidgetManager.getInstance(appContext).setWidgetPreview(
   ComponentName(
       appContext,
       SociaLiteAppWidgetReceiver::class.java
   ),
   AppWidgetProviderInfo.WIDGET_CATEGORY_HOME_SCREEN,
   RemoteViews("com.example", R.layout.widget_preview)
)

想定されるフローは次のとおりです。

  1. ウィジェット プロバイダはいつでも setWidgetPreview を呼び出します。提供された プレビューは他のプロバイダ情報とともに AppWidgetService に保持されます。
  2. setWidgetPreview は、API を介して更新されたプレビューをホストに通知します。 AppWidgetHost.onProvidersChanged コールバック。これに対してウィジェットは ホストがすべてのプロバイダ情報を再読み込みします。
  3. ウィジェットのプレビューを表示するとき、ホストは AppWidgetProviderInfo.generatedPreviewCategories、 カテゴリが使用可能である場合は、AppWidgetManager.getWidgetPreview を呼び出して このプロバイダ用に保存したプレビューを返します。

setWidgetPreview を呼び出すタイミング

プレビューを提供するためのコールバックがないため、アプリは プレビューを表示できます。プレビューを更新する頻度 ウィジェットのユースケースによって異なります。

次のリストは、プレビューのユースケースの 2 つの主なカテゴリを示しています。

  • ウィジェット プレビューに実際のデータを表示するプロバイダ 確認できます。これらのプロバイダは、ユーザーが アプリの初期設定を行ったユーザーは ログインできませんその後、 選択した頻度でプレビューを更新する定期的なタスクを設定できます。 このタイプのウィジェットには、写真、カレンダー、天気、ニュースなどがあります 追加します。
  • プレビュー ウィジェットやクイック操作ウィジェットに静的情報を表示するプロバイダ 表示されますこれらのプロバイダは、 おすすめします。このタイプのウィジェットの例としては、運転、 Chrome のショートカット ウィジェットを使用できます。

一部のプロバイダでは、ハブモード選択ツールに静的プレビューが表示される場合がありますが、 選択することもできます。これらのプロバイダは プレビューを設定できます

ピクチャー イン ピクチャー

Android 15 introduces changes in Picture-in-Picture (PiP) ensuring an even smoother transition when entering into PiP mode. This will be beneficial for apps having UI elements overlaid on top of their main UI, which goes into PiP.

Developers use the onPictureInPictureModeChanged callback to define logic that toggles the visibility of the overlaid UI elements. This callback is triggered when the PiP enter or exit animation is completed. Beginning in Android 15, the PictureInPictureUiState class includes another state.

With this UI state, apps targeting Android 15 (API level 35) will observe the Activity#onPictureInPictureUiStateChanged callback being invoked with isTransitioningToPip() as soon as the PiP animation starts. There are many UI elements that are not relevant for the app when it is in PiP mode, for example views or layout that include information such as suggestions, upcoming video, ratings, and titles. When the app goes to PiP mode, use the onPictureInPictureUiStateChanged callback to hide these UI elements. When the app goes to full screen mode from the PiP window, use onPictureInPictureModeChanged callback to unhide these elements, as shown in the following examples:

override fun onPictureInPictureUiStateChanged(pipState: PictureInPictureUiState) {
        if (pipState.isTransitioningToPip()) {
          // Hide UI elements
        }
    }
override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean) {
        if (isInPictureInPictureMode) {
          // Unhide UI elements
        }
    }

This quick visibility toggle of irrelevant UI elements (for a PiP window) helps ensure a smoother and flicker-free PiP enter animation.

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

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

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

通知チャンネルの VibrationEffect を設定する

Android 15 では、NotificationChannel.setVibrationEffect を使用してチャンネルごとに着信通知にリッチ バイブレーションを設定できるため、ユーザーはデバイスを見ることなく、さまざまな種類の通知を区別できます。

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

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

大画面でのマルチタスクの改善

Android 15 では、大画面デバイスでのマルチタスクがさらに簡単になります。たとえば、ユーザーはお気に入りの分割画面アプリの組み合わせを保存してすばやくアクセスしたり、タスクバーを画面に固定してアプリをすばやく切り替えたりできます。つまり、アプリを状況に適応させることがこれまで以上に重要になっています。

Google I/O では、アダプティブ Android アプリの構築マテリアル 3 適応ライブラリを使用した UI の作成に関するセッションを開催しています。また、大画面向けの設計に役立つドキュメントには、さらに多くの情報が記載されています。

カバー画面のサポート

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

接続

Android 15 ではプラットフォームが更新され、アプリは最新の通信技術とワイヤレス技術にアクセスできます。

衛星のサポート

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

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

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

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.

In addition, apps can register a filter on supported devices so they can be notified of polling loop activity, which allows for smooth operation with multiple NFC-aware applications.

ウォレットの役割

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

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

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

セキュリティ

Android 15 では、アプリのセキュリティの強化、アプリのデータの保護、ユーザーによるデータの透明性と管理が可能になります。ユーザーの安全保護対策を改善し、新たな脅威からアプリを保護するために Google が行っている取り組みについて詳しくは、Google I/O の Android でのユーザー セキュリティの保護に関する講演をご覧ください。

認証情報マネージャーを自動入力と統合する

Starting with Android 15, developers can link specific views like username or password fields with Credential Manager requests, making it easier to provide a tailored user experience during the sign-in process. When the user focuses on one of these views, a corresponding request is sent to Credential Manager. The resulting credentials are aggregated across providers and displayed in autofill fallback UIs, such as inline suggestions or drop-down suggestions. The Jetpack androidx.credentials library is the preferred endpoint for developers to use and will soon be available to further enhance this feature in Android 15 and higher.

生体認証プロンプトにシングルタップによる登録とログインを統合

Credential Manager integrates biometric prompts into the credential creation and sign-in processes, eliminating the need for providers to manage biometric prompts. As a result, credential providers only need to focus on the results of the create and get flows, augmented with the biometric flow result. This simplified process creates a more efficient and streamlined credential creation and retrieval process.

エンドツーエンドの暗号化のための鍵管理

Android 15 で導入された E2eeContactKeysManager は、暗号公開鍵の保存用に OS レベルの API を提供することで、Android アプリのエンドツーエンドの暗号化(E2EE)を容易にします。

E2eeContactKeysManager は、プラットフォームの連絡先アプリと統合するように設計されています。これにより、ユーザーは連絡先の公開鍵を一元的に管理および検証できます。

コンテンツ URI に対する権限チェック

Android 15 では、コンテンツ URI に対して権限チェックを行う新しい API セットが導入されています。

ユーザー補助

Android 15 では、ユーザーのユーザー補助機能を向上させる機能が追加されています。

点字の改善

Android 15 では、USB とセキュアな Bluetooth の両方で HID 標準を使用する点字ディスプレイを TalkBack でサポートできるようになりました。

マウスやキーボードで使用されている標準規格と同様に、Android は今後、より幅広い種類の点字ディスプレイをサポートするようになります。

多言語対応

Android 15 では、デバイスをさまざまな言語で使用する場合のユーザー エクスペリエンスに役立つ機能が追加されています。

CJK 可変フォント

Android 15 以降、中国語、日本語、韓国語(CJK)言語のフォント ファイル NotoSansCJK が可変フォントになりました。可変フォントを使用すると、CJK 言語でのクリエイティブ タイポグラフィの可能性が広がります。デザイナーは、より幅広いスタイルを検討し、以前は実現が困難または不可能だった、視覚に訴えるレイアウトを作成できます。

中国語、日本語、韓国語(CJK)言語の可変フォントが、さまざまなフォント幅で表示される場合。

文字間の両端揃え

Android 15 以降では、JUSTIFICATION_MODE_INTER_CHARACTER を使用して、文字間隔を利用してテキストの両端揃えを行うことができます。単語間の両端揃えは Android 8.0(API レベル 26)で初めて導入されました。文字間両端揃えは、中国語や日本語などのセグメンテーションに空白文字を使用する言語でも同様の機能を提供します。

JUSTIFICATION_MODE_NONE を使用した日本語テキストのレイアウト。
JUSTIFICATION_MODE_NONE を使用した英語テキストのレイアウト。


JUSTIFICATION_MODE_INTER_WORD を使用した日本語テキストのレイアウト。
JUSTIFICATION_MODE_INTER_WORD を使用した英語テキストのレイアウト。


新しい JUSTIFICATION_MODE_INTER_CHARACTER を使用した日本語テキストのレイアウト。
新しい JUSTIFICATION_MODE_INTER_CHARACTER を使用した英語テキストのレイアウト。

改行の自動設定

Android では、Android 13(API レベル 33)から日本語と韓国語のフレーズベースの改行がサポートされるようになりました。ただし、フレーズベースの改行は、短いテキストの読みやすさは向上しますが、長いテキスト行には適していません。Android 15 では、アプリで LINE_BREAK_WORD_STYLE_AUTO オプションを使用して、短いテキストのみにフレーズベースの改行を適用できるようになりました。これにより、テキストの最適な単語スタイル オプションが選択されます。

短いテキスト行の場合、フレーズベースの改行が使用されます。これは、次の図に示すように、LINE_BREAK_WORD_STYLE_PHRASE と同じように機能します。

テキストが短い場合、LINE_BREAK_WORD_STYLE_AUTO ではフレーズベースの改行が挿入され、テキストが読みやすくなります。 これは、LINE_BREAK_WORD_STYLE_PHRASE を適用する場合と同じです。

長い行のテキストの場合、LINE_BREAK_WORD_STYLE_AUTO は改行なしの単語スタイルを使用し、次の図に示すように LINE_BREAK_WORD_STYLE_NONE と同じように機能します。

長い行のテキストに対して、LINE_BREAK_WORD_STYLE_AUTO は改行なしの単語スタイルを適用して、テキストを読みやすくします。 これは、LINE_BREAK_WORD_STYLE_NONE を適用する場合と同じです。

新しい日本語の変体仮名フォント

Android 15 では、古い日本語のひらがな(変体仮名)の新しいフォント ファイルがデフォルトでバンドルされています。変体仮名のユニークな形は、アートワークやデザインに独特の魅力をプラスし、古代日本の文書を正確に伝え、理解するのにも役立ちます。

日本語の変体仮名フォントの文字とテキスト スタイル。

VideoLAN cone Copyright (c) 1996-2010 VideoLAN. このロゴまたは修正版は、VideoLAN プロジェクト、または VideoLAN チームが開発したプロダクトに言及するために、誰でも使用または変更することができますが、プロジェクトによる承認を示すものではありません。

Vulkan および Vulkan ロゴは、Khronos Group Inc.の登録商標です。

OpenGL は Hewlett Packard Enterprise の登録商標で、OpenGL ES ロゴは Khronos の許可を得て使用しています。