機能と API の概要

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

追加、変更、削除された API の一覧については、API 差分レポートをご覧ください。追加された API について詳しくは、Android API リファレンスをご覧ください。Android 15 の場合は、API レベル 35 で追加された API をご確認ください。プラットフォームの変更がアプリに影響する領域については、Android 15 の動作変更(Android 15 をターゲットとするアプリの場合とすべてのアプリの場合)をご確認ください。

カメラとメディア

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

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

Low Light Boost

Android 15 引入了低光增强,这是一种新的自动曝光模式,可供 Camera 2夜间模式相机扩展使用。“低光增强”功能可调整预览视频流在弱光条件下的曝光量。这与夜间模式相机扩展程序创建静态图片的方式不同,因为夜间模式会组合多张照片来制作单张增强图片。虽然夜间模式非常适合创建静态图片,但无法创建连续的帧流,但“低光增强”可以。因此,“低光增强”可以实现新的相机功能,例如:

  • 提供增强的图片预览,以便用户更好地为弱光环境取景
  • 在光线昏暗的环境下扫描二维码

如果您启用“弱光增强”,它会在光线较暗时自动开启,在光线较暗时关闭。

应用可以在光线昏暗的环境下录制预览流,以保存明亮的视频。

有关详情,请参阅弱光增强

アプリ内カメラの操作

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

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

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

Android 15 会选择适合底层设备功能和面板的位深的 HDR 余量。对于包含大量 SDR 内容的页面(例如显示单个 HDR 缩略图的即时通讯应用),此行为最终可能会对 SDR 内容的感知亮度产生不利影响。Android 15 允许您使用 setDesiredHdrHeadroom 控制 HDR 余量,以在 SDR 和 HDR 内容之间取得平衡。

左侧屏幕上 SDR 界面元素的亮度似乎比右侧屏幕的亮度更均匀,这模拟了混合 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,可实现无缝应用集成。

仮想 MIDI 2.0 デバイス

Android 13 では、 USB を使用する MIDI 2.0 デバイス: Universal MIDI Packets(UMP)。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 ライブラリなどのツールに重点を置いていますが、Google は常に、デベロッパーがビジョンをより簡単に実現できるようにプラットフォーム内で方法を模索しています。

OpenJDK 17 の更新

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

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

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

PDF の改善

Android 15 では、PdfRenderer が大幅に改善されています。 APIアプリには、パスワードで保護されたファイルのレンダリング、アノテーション、フォームの編集検索、コピー付きの選択などの高度な機能を組み込むことができます。リニア化された PDF の最適化がサポートされているため、ローカル PDF の表示が高速化され、リソースの使用量が削減されます。Jetpack PDF ライブラリでは、これらの API を使用して PDF を簡単に追加できます。 表示機能を追加できます。

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

PdfRenderer は、プラットフォームのリリースに依存せずに Google Play システム アップデートを使用して更新できるモジュールに移動されました。また、Android 15 より前のバージョンの API サーフェス(PdfRendererPreV)を作成することで、Android 11(API レベル 30)へのこれらの変更をサポートしています。

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

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

OpenType 可変フォント 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 も選択できます

きめ細かい改行の制御

从 Android 15 开始,TextView 和底层行断开符可以将给定部分文本保留在同一行中,以提高可读性。您可以通过在字符串资源或 createNoBreakSpan 中使用 <nobreak> 标记来充分利用此换行符自定义功能。同样,您可以使用 <nohyphen> 标记或 createNoHyphenationSpan 来防止对字词进行分词。

例如,以下字符串资源不包含换行符,在呈现时,文本“Pixel 8 Pro”会在不合适的位置换行:

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

相比之下,此字符串资源包含 <nobreak> 标记,该标记会将字词“Pixel 8 Pro”换行,并防止换行:

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

以下图片展示了这些字符串呈现方式的差异:

一行文本的布局,其中显示短语“Pixel 8 Pro.”未使用 <nobreak> 标记换行。
使用 <nobreak> 标记封装“Pixel 8 Pro.”短语的同一行文本的布局。

アプリのアーカイブ

Android と Google Play は最後に、アプリのアーカイブのサポートを発表しました。 年間で、ユーザーは部分的削除によって空き容量を増やすことができます。 Android アプリを使用して公開された、デバイスの使用頻度の低いアプリ Google Play でセット購入。Android 15 はアプリのアーカイブを OS レベルでサポート アーカイブ解除が可能になり、すべてのアプリストアで容易に実装できるようになります。

REQUEST_DELETE_PACKAGES 権限を持つアプリは、 PackageInstaller requestArchive メソッドを使用して、メッセージの インストール済みのアプリ パッケージ。APK とキャッシュされたファイルは削除されるが、 保護します。アーカイブされたアプリは、 LauncherApps APIそうしたケースがあることを強調する UI が アプリがアーカイブされます。ユーザーがアーカイブされたアプリをタップすると、担当インストーラにアーカイブを解除するようリクエストが送信されます。復元プロセスは ACTION_PACKAGE_ADDED ブロードキャストによってモニタリングできます。

グラフィック

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

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

Vulkan のロゴ

Android ハードウェアは、コア OS が単一の CPU で実行され、GPU が固定関数パイプラインに基づく API を使用してアクセスされる初期の時代から大きく進化しました。Vulkan® グラフィック API は、Android 7.0(API レベル 24)以降、下位レベルの抽象化により NDK で利用できます。これにより、最新の GPU ハードウェアを反映し、複数の CPU コアをサポートするように拡張性が向上し、CPU ドライバのオーバーヘッドが削減されるため、アプリのパフォーマンスを改善できます。Vulkan は、最新のすべてのゲームエンジンでサポートされています。

Vulkan は Android で推奨される GPU のインターフェースです。そのため、Android 15 では、Vulkan 上で OpenGL® ES を実行するためのオプション レイヤとして ANGLE が含まれています。ANGLE に移行すると、Android OpenGL 実装が標準化され、互換性が向上し、場合によってはパフォーマンスも向上します。ANGLE を使用した OpenGL ES アプリの安定性とパフォーマンスをテストするには、Android 15 で [設定] -> [システム] -> [開発者向けオプション] -> [試験運用版: ANGLE を有効にする] で開発者向けオプションを有効にします。

Vulkan の Android ANGLE ロードマップ

Android GPU API の今後の変更のロードマップ。

GPU スタックの効率化の一環として、今後さらに多くの新しいデバイスで ANGLE を GL システム ドライバとしてリリースする予定です。将来的には、OpenGL/ES は ANGLE を通じてのみ利用できるようになることが予想されます。ただし、すべてのデバイスで OpenGL ES のサポートを継続する予定です。

推奨される次のステップ

開発者向けオプションを使用して、OpenGL ES 用の ANGLE ドライバを選択し、アプリをテストします。新しいプロジェクトでは、C/C++ 用の Vulkan を使用することを強くおすすめします。

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)起,Android 就一直包含 StorageStats.getAppBytes API,该 API 将应用的安装大小汇总为一个字节,这些字节是 APK 大小、从 APK 中提取的文件的大小以及设备上生成的文件(例如预先 (AOT) 编译代码)的总和。就应用的存储空间使用情况而言,此数字并不富有见解。

Android 15 增加了 StorageStats.getAppBytesByDataType([type]) API,可让您深入了解应用如何使用所有空间,包括 APK 文件拆分、AOT 和加速相关代码、dex 元数据、库和引导式配置文件。

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

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

アプリでのプロファイリング リクエストの作成を簡素化するには、Core 1.15.0-rc01 以降で利用可能な、対応する Profiling AndroidX API を使用することをおすすめします。

SQLite データベースの改善

Android 15 では、Android の高度な機能を公開する SQLite API が導入されています。 基本的な SQLite エンジンを使用して、特定のパフォーマンスの問題をターゲットにできます。 使用しないでください。これらの API は、バージョンへの SQLite のアップデートに含まれています。 3.44.3

特に大規模なデータベースを操作する場合や、レイテンシに敏感なクエリを実行する場合は、SQLite データベースを最大限に活用するために、SQLite パフォーマンスのベスト プラクティスを参照してください。

  • 読み取り専用の遅延トランザクション: 読み取り専用(write ステートメントは含みません)、 beginTransactionReadOnly()beginTransactionWithListenerReadOnly(SQLiteTransactionListener) 読み取り専用の DEFERRED トランザクションを発行します。このようなトランザクションは相互に同時に実行できます。データベースが WAL モードの場合、IMMEDIATE トランザクションまたは EXCLUSIVE トランザクションと同時に実行できます。
  • 行数と ID: 変更された行数を取得するための API が追加されました。 行または最後に挿入された行 ID のみを取得できます。 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 解析,UriRelativeFilterGroup 包含一组 UriRelativeFilter 对象,这些对象构成一组必须满足的 Intent 匹配规则,包括网址查询参数、网址片段以及屏蔽或排除规则。

您可以在 AndroidManifest XML 文件中使用 <uri-relative-filter-group> 标记来定义这些规则,该标记可以包含 android:allow 标记。这些代码可以包含使用现有数据代码属性以及 android:queryandroid:fragment 属性的 <data> 代码。

下面是一个 AndroidManifest 语法示例:

<intent-filter>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.BROWSABLE" />
  <category android:name="android.intent.category.DEFAULT" />
  <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>

プライベート スペース

<ph type="x-smartling-placeholder">
您可以通过解锁和锁定私密空间来显示或隐藏私密空间 敏感应用。

私密空间可让用户在设备上创建单独的空间 保护敏感应用免遭窥探, 身份验证。私密空间使用单独的用户个人资料。用户可以 选择为私密空间使用设备锁定或单独的锁定因素。

私密空间中的应用显示在启动器中的单独容器中,并且 不会显示在“最近用过”视图、通知、设置和其他应用中 在私密空间处于锁定状态时显示通知用户生成的内容(例如 媒体或文件),而账号会在私密空间和 主空间系统 Sharesheet照片选择器:用于授权应用访问内容

用户无法将现有应用及其数据移至私密空间。相反, 用户在私密空间中选择安装选项,以便使用 无论他们喜欢哪家应用商店私密空间中的应用会以下列身份安装: 来自主空间中任何应用的单独副本(同一应用的新副本)。

当用户锁定私密空间后,系统会停用相应个人资料。而配置文件 已停止,私密空间中的应用不再有效,无法执行 前台或后台 activity,包括显示通知。

我们建议您使用私密空间测试您的应用,以确保您的应用 按预期运行,尤其是当应用属于以下某种情况时 类别:

選択した写真へのアクセスに関するユーザーの最新の選択をクエリする

现在,如果应用获得了部分访问权限,则只能突出显示最近选择的照片和视频。此功能可以改善频繁请求访问照片和视频的应用的用户体验。如需在应用中使用此功能,请在通过 ContentResolver 查询 MediaStore 时启用 QUERY_ARG_LATEST_SELECTION_ONLY 参数。

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 集成了与 Health Connect by Android 相关的最新扩展程序。Health Connect by Android 是一个安全的集中式平台,可用于管理和共享应用收集的健康与健身数据。此次更新 增加了对健身营养、体表温度、训练计划等。

体表温度追踪功能让用户可以更精确地存储和分享体表温度 来自穿戴式设备或其他跟踪设备的体温数据。

训练计划是一种结构化的锻炼计划,可帮助用户实现健身目标。训练计划支持各种完成和表现目标:

如需详细了解 Android 中 Health Connect 的最新更新,请参阅 利用 Android 打造自适应体验 健康演讲。

アプリの画面共有

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 之前,提供微件选择器预览的唯一方法是指定静态图片或布局资源。这些预览通常与放置在主屏幕上的实际 widget 的外观大不相同。此外,由于无法使用 Jetpack Glance 创建静态资源,因此“资讯一览” 开发者必须为其微件截屏或创建 XML 布局, 微件预览。

Android 15 添加了对生成的预览的支持。这意味着,应用微件提供程序可以生成 RemoteViews 以用作选择器预览,而不是静态资源。

应用可以向微件选择器提供远程视图, 更新选择器中的内容,使其更能代表用户的内容 看到的内容。

推送 API

应用可以通过推送 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. 任何时候,widget 提供程序都会调用 setWidgetPreview。提供的预览会与其他提供方信息一起保留在 AppWidgetService 中。
  2. setWidgetPreview 会通过 AppWidgetHost.onProvidersChanged 回调。作为回应,微件宿主会重新加载其所有提供方信息。
  3. 显示微件预览时,主机会检查 AppWidgetProviderInfo.generatedPreviewCategories,如果所选类别可用,则调用 AppWidgetManager.getWidgetPreview 以返回此提供程序的已保存预览。

何时调用 setWidgetPreview

由于没有用于提供预览的回调,因此应用可以选择在运行期间的任何时间发送预览。预览的更新频率取决于微件的用例。

以下列表介绍了两大类预览用例:

  • 在 widget 预览中显示真实数据(例如个性化数据)的提供程序 或最新信息。这些提供商可以设置预览 已登录 Google 账号或已在其应用中完成初始配置。之后 可以设置一项定期任务,按照所选的节奏更新预览。 此类 widget 的示例包括照片、日历、天气或新闻 widget。
  • 在预览中显示静态信息或不显示任何数据的快捷操作 widget 的提供程序。这些提供程序可以在应用首次启动时设置预览一次。例如,快速开车便是此类微件的示例 操作 widget 或 Chrome 快捷方式 widget。

某些提供商可能会在基座接入模式选择器上显示静态预览,但真实的 信息。这些提供商应遵循指南 设置预览

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

Android 15 对画中画 (PiP) 模式进行了更改,确保在进入画中画模式时实现更流畅的转换。对于在主界面上叠加界面元素的应用,这将非常有用,因为这些元素会进入 PiP。

开发者使用 onPictureInPictureModeChanged 回调来定义用于切换叠加界面元素可见性的逻辑。当 PiP 进入或退出动画完成时,系统会触发此回调。从 Android 15 开始,PictureInPictureUiState 类包含另一种状态。

在这种界面状态下,以 Android 15(API 级别 35)为目标平台的应用会在画中画动画开始后立即观察到使用 isTransitioningToPip() 调用的 Activity#onPictureInPictureUiStateChanged 回调。在 PiP 模式下,许多界面元素与应用无关,例如包含建议、即将播放的视频、评分和标题等信息的视图或布局。当应用进入画中画模式时,请使用 onPictureInPictureUiStateChanged 回调隐藏这些界面元素。当应用从画中画窗口进入全屏模式时,请使用 onPictureInPictureModeChanged 回调取消隐藏这些元素,如以下示例所示:

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

不相关界面元素(适用于画中画窗口)的这种快速可见性切换有助于确保画中画进入动画更流畅、不闪烁。

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

AutomaticZenRule 允许应用自定义注意力机制 管理(勿扰)规则,并确定何时启用或停用 。Android 15 极大地增强了这些规则,旨在提高 用户体验。其中包含以下增强功能:

  • AutomaticZenRule 添加类型,让系统能够应用特殊类型 对某些规则的处理
  • AutomaticZenRule 添加图标,使模式更加丰富 易于识别。
  • triggerDescription 字符串添加到 AutomaticZenRule,用于描述 规则应当对用户生效的条件。
  • 已添加 ZenDeviceEffects 更改为AutomaticZenRule,从而允许规则触发灰度等操作 显示、夜间模式或调暗壁纸。

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

Android 15 では、着信通知に対するリッチ バイブレーションの設定がサポートされています。 NotificationChannel.setVibrationEffect を使用してチャンネルを作成するので、 ユーザーは通知の種類を 区別できるように ユーザーがデバイスを見る必要はありません

メディア プロジェクションのステータスバー チップと自動停止

Media projection can expose private user information. A new, prominent status bar chip makes users aware of any ongoing screen projection. Users can tap the chip to stop screen casting, sharing, or recording. Also, for a more intuitive user experience, any in‑progress screen projection now automatically stops when the device screen is locked.

Status bar chip for screen sharing, casting, and recording.

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

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

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

Android 15 では、大画面デバイスでのマルチタスク機能が改善されています。対象 たとえば、ユーザーはお気に入りの分割画面のアプリの組み合わせを保存して、 画面上のタスクバーにアクセスしたり、固定したりすることで、アプリをすばやく切り替えられます。つまり アプリをアダプティブにすることの重要性が これまで以上に高まっています

Google I/O では、アダプティブな Android の構築に関するセッションを開催しています。 およびマテリアル 3 を使用した UI の作成 アダプティブ ライブラリ また、Google のドキュメントでは大規模な できます。

カバー画面のサポート

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

接続

Android 15 では、通信技術とワイヤレス技術の最新の進歩をアプリが利用できるようにプラットフォームが更新されています。

衛星サポート

Android 15 では、衛星通信のプラットフォーム サポートをさらに拡張し、衛星通信の全域で一貫したユーザー エクスペリエンスを実現するための UI 要素を追加しています。

アプリは ServiceState.isUsingNonTerrestrialNetwork() を使用して次のことを行えます。 デバイスが衛星に接続されていることを検出し、 フル ネットワーク サービスが利用できない理由。さらに Android 15 では SMS および MMS アプリや、プリロードされた RCS アプリに対応しています。 衛星回線で送受信されています

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

NFC の操作がスムーズに

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

さらに、アプリはサポート対象のデバイスでフィルタを登録し、ポーリング ループ アクティビティについて通知できるようになりました。これにより、複数の NFC 対応アプリをスムーズに操作できます。

ウォレットのロール

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.

ワンタップ登録とログインを生体認証プロンプトと統合する

認証情報マネージャー: 生体認証プロンプトを認証情報作成に統合 ログイン プロセスがシンプルになり、プロバイダがログイン プロセスを管理する必要がなくなります。 プロンプトが表示されます。そのため、認証情報プロバイダは create フローと get フローの結果。生体認証フローの結果で拡張されます。 この簡素化されたプロセスにより、認証情報の作成と取得プロセスがより効率的で合理化されます。

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

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 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 の許可を得て使用しています。