機能と API の概要

Android 14 では、デベロッパー向けの優れた機能と API が導入されています。ここでは、アプリの機能について確認し、関連する API を使ってみることができます。

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

多言語対応

アプリ別の言語設定

Android 14 扩展了 Android 13(API 级别 33)中引入的按应用设定语言功能,并包含以下额外功能:

  • 自动生成应用的 localeConfig:从 Android Studio Giraffe Canary 7 和 AGP 8.1.0-alpha07 开始,您可以将应用配置为自动支持各应用语言偏好设定。Android Gradle 插件会根据您的项目资源生成 LocaleConfig 文件,并在最终清单文件中添加对该文件的引用,这样您就不再需要手动创建或更新该文件。AGP 使用应用模块的 res 文件夹中的资源以及任何库模块依赖项来确定要在 LocaleConfig 文件中添加的语言区域。

  • 动态更新应用的 localeConfig:使用 LocaleManager 方法中的 setOverrideLocaleConfig()getOverrideLocaleConfig() 可以在设备的系统设置中动态更新应用的受支持语言列表。有了这种灵活性,您可以按区域自定义支持的语言列表、运行 A/B 实验,或者如果您的应用通过服务器端推送进行本地化,则可以提供更新后的语言区域列表。

  • 输入法 (IME) 的应用语言可见性:IME 可以利用 getApplicationLocales() 方法查看当前应用的语言,并将 IME 语言与该语言进行匹配。

Grammatical Inflection API

30 億人もの人々が、性別で文法が変わる言語を話します。こうした言語では、話す相手、または言及する人や物の性別に応じて、各文法範疇(名詞、動詞、形容詞、前置詞など)の語形が変化します。伝統的に、性別で文法が変わる多くの言語では、男性形をデフォルトまたは汎用の性別として使用しています。

女性を男性形で呼ぶなど、ユーザーに対して不適切な文法性別を表記すると、ユーザーのパフォーマンスや態度に悪影響を及ぼす可能性があります。一方、ユーザーの文法的性を適切に反映した言語を使用して UI を作成すると、ユーザー エンゲージメントが向上し、より自然でパーソナライズされたユーザー エクスペリエンスを提供できます。

为帮助您针对区分性别的语言构建以用户为中心的界面,Android 14 引入了 Grammatical Inflection API,让您无需重构应用便能添加对语法性别的支持。

地域の設定

地域の設定を使用すると、ユーザーは温度単位、週の最初の曜日、番号体系をカスタマイズできます。米国に住んでいる欧州のユーザーの場合、温度の単位は華氏ではなく摂氏で表示し、アプリで週の始まりを米国のデフォルトの日曜日ではなく月曜日に指定することを好む可能性があります。

Android の新しい設定メニューは見つけやすく、ユーザーはここでアプリのそうした設定を一元的に変更できます。これらの設定は、バックアップや復元を行った場合も保持されます。複数の API とインテント(getTemperatureUnitgetFirstDayOfWeek など)により、アプリにそうしたユーザー設定への読み取りアクセス権を付与することで、アプリでの情報の表示方法を調整できます。また、ACTION_LOCALE_CHANGEDBroadcastReceiver を登録して、地域の設定が変更されたときに言語 / 地域の構成の変更を処理することも可能です。

これらの設定を確認するには、設定アプリを開いて [システム] > [言語と入力] > [地域の設定] に移動します。

Android システム設定の地域の設定画面
Android システム設定の地域の設定に関する温度オプション。

ユーザー補助

非線形フォント スケーリングを 200% にする

Android 14 以降では、フォント スケーリングが 200% までサポートされます。これにより、ロービジョンのユーザーは、Web Content Accessibility Guidelines(WCAG)に準拠した追加のユーザー補助オプションを利用できます。

画面上の大きなテキスト要素が拡大しすぎないように、システムでは非線形のスケーリング曲線が適用されます。このスケーリング戦略では、大きいテキストが小さいテキストとは異なる率でスケーリングされます。非線形フォント スケーリングでは、異なるサイズの要素間の比例階層を維持したまま、線形テキスト スケーリングの高度な問題(テキストが途切れる、表示サイズが極端に大きいためにテキストが読みづらくなるなど)を軽減できます。

非線形フォント スケーリングでアプリをテストする

デバイスのユーザー補助設定で最大フォントサイズを有効にして、アプリをテストします。

すでにスケーリング ピクセル(sp)単位を使用してテキストのサイズを定義している場合は、これらの追加オプションとスケーリングの改善がアプリのテキストに自動的に適用されます。ただし、アプリがフォントサイズを正しく適用し、ユーザビリティに影響を与えずにより大きなフォントサイズに対応できることを確認するには、最大フォントサイズ(200%)を有効にして UI テストを行う必要があります。

200% のフォントサイズを有効にする手順は次のとおりです。

  1. 設定アプリを開き、[ユーザー補助] > [表示サイズとテキスト] に移動します。
  2. [フォントサイズ] オプションでは、最大フォントサイズの設定が有効になるまで、プラス(+)アイコンをタップします(このセクションに表示される画像で確認できます)。

テキストサイズにはスケール非依存ピクセル(sp)単位を使用する

テキストサイズは常に sp 単位で指定してください。アプリで sp 単位を使用している場合、Android はユーザーが希望するテキストサイズを適用して適切にスケーリングできます。

パディングに sp 単位を使用したり、暗黙的なパディングを前提としてビューの高さを定義したりしないでください。非線形フォント スケーリングでは sp 寸法が比例しない可能性があるため、4 sp + 20 sp が 24 sp と等しくない場合があります。

スケール非依存ピクセル(sp)単位を変換する

sp 単位からピクセルに変換するには TypedValue.applyDimension() を使用し、ピクセルを sp に変換するには TypedValue.deriveDimension() を使用します。これらのメソッドでは、適切な非線形スケーリング曲線が自動的に適用されます。

Configuration.fontScale または DisplayMetrics.scaledDensity を使用して方程式をハードコードしないでください。フォント スケーリングは非線形であるため、scaledDensity フィールドは正確でなくなります。fontScale フィールドは、フォントが単一のスカラー値でスケーリングされなくなったため、情報提供のみを目的として使用する必要があります。

lineHeight に sp 単位を使用する

必ず dp ではなく sp 単位を使用して android:lineHeight を定義すると、行の高さがテキストに合わせてスケーリングされます。そうしないと、テキストが sp であるのに lineHeight が dp または px の場合、拡大縮小が行われず、画面が窮屈に見えます。TextView は、textSizelineHeight の両方が sp 単位で定義されている場合にのみ、目的の比率が維持されるように lineHeight を自動的に修正します。

カメラとメディア

画像のウルトラ HDR

标准动态范围 (SDR) 与高动态范围 (HDR) 图片质量的示意图。

Android 14 增加了对高动态范围 (HDR) 图片的支持,此类图片可在拍照时保留来自传感器的更多信息,从而实现鲜艳的色彩和更高的对比度。Android 采用 Ultra HDR 格式,这种格式可完全向后兼容 JPEG 图片,允许应用与 HDR 图片无缝互操作,从而根据需要以标准动态范围 (SDR) 显示图片。

当您的应用为其 Activity 窗口选择使用 HDR 界面(通过清单条目或在运行时通过调用 Window.setColorMode())时,框架会自动在 HDR 界面中呈现这些图片。您还可以在支持的设备上拍摄压缩的 Ultra HDR 静态图片。从传感器中恢复的颜色越多,博文中的编辑效果就越灵活。与 Ultra HDR 图片关联的 Gainmap 可用于使用 OpenGL 或 Vulkan 渲染这些图片。

カメラ拡張機能でズーム、フォーカス、ポストビューなどの機能を追加

Android 14 では、カメラ拡張機能がアップグレードおよび改善され、アプリがより長い処理時間を処理できるようになりました。これにより、サポートされているデバイスでの暗い写真撮影などのコンピューティング負荷の高いアルゴリズムを使用して、画像を改善できます。これらの機能により、カメラ拡張機能を使用する際のユーザー エクスペリエンスがさらに向上します。たとえば、次のような改善です。

  • 動的な静止画撮影処理のレイテンシ推定では、現在のシーンと環境の状態に基づいて、静止画撮影のレイテンシをより正確に推定します。CameraExtensionSession.getRealtimeStillCaptureLatency() を呼び出して、2 つのレイテンシ推定メソッドを持つ StillCaptureLatency オブジェクトを取得します。getCaptureLatency() メソッドは、onCaptureStartedonCaptureProcessStarted() の間の推定レイテンシを返し、getProcessingLatency() メソッドは、onCaptureProcessStarted() と使用可能な最終的な処理済みフレームとの間の推定レイテンシを返します。
  • キャプチャ進行状況コールバックをサポートして、長時間実行の静止画処理オペレーションの現在の進行状況をアプリで表示できるようにします。この機能が利用できるかどうかは CameraExtensionCharacteristics.isCaptureProcessProgressAvailable で確認できます。利用できる場合は、進捗状況(0 ~ 100)をパラメータとして渡す onCaptureProcessProgressed() コールバックを実装します。
  • 拡張機能固有のメタデータ(拡張機能の効果の量を調整する CaptureRequest.EXTENSION_STRENGTHEXTENSION_BOKEH での背景のぼかし量など))。

  • カメラ拡張機能の静止画撮影用のポストビュー機能。最終画像よりも処理の少ない画像をすばやく表示できます。拡張機能の処理レイテンシが増加した場合は、UX を改善するためのプレースホルダとしてポストビュー画像を指定し、後で最終的な画像に切り替えることもできます。この機能が利用できるかどうかは、CameraExtensionCharacteristics.isPostviewAvailable で確認できます。その後、OutputConfigurationExtensionSessionConfiguration.setPostviewOutputConfiguration に渡すことができます。

  • SurfaceView のサポート。プレビューのレンダリング パスがより最適化され、電力効率に優れています。

  • 拡張機能の使用中、タップしてフォーカスとズームをサポートします。

センサー内ズーム

CameraCharacteristics 中的 REQUEST_AVAILABLE_CAPABILITIES_STREAM_USE_CASE 包含 SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW 时,您的应用可以使用高级传感器功能,通过使用 CaptureRequest 以及数据流用例设置为 CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW 的 RAW 目标,为剪裁后的 RAW 数据流提供与完整视野相同的像素。通过实现请求替换控件,更新后的摄像头让用户可在其他摄像头控件准备就绪之前实现缩放控制。

ロスレス USB オーディオ

Android 14 开始支持无损音频格式,通过 USB 有线耳机提供发烧级体验。您可以查询 USB 设备的首选混音器属性,注册监听器以监听首选混音器属性的变化,并使用 AudioMixerAttributes 类配置混音器属性。此类表示格式,例如声道掩码、采样率和混音器行为。该类允许直接发送音频,而不进行混音、音量调整或处理效果。

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

認証情報マネージャー

Android 14 添加了 Credential Manager 作为平台 API,并通过使用 Google Play 服务的 Jetpack 库为 Android 4.4(API 级别 19)设备提供了额外的支持。凭据管理器旨在使用 API 通过用户配置的凭据提供程序检索和存储凭据,让用户更轻松地登录。凭据管理器在一个 API 中支持多种登录方法,包括用户名和密码、通行密钥和联合登录解决方案(如“使用 Google 账号登录”)。

通行密钥具有许多优势。例如,通行密钥基于业界标准构建,可在不同的操作系统和浏览器生态系统中使用,还可用于网站和应用。

如需了解详情,请参阅凭据管理器和通行密钥文档以及关于 Credential Manager 和通行密钥的博文

ヘルスコネクト

ヘルスコネクトは、ユーザーの健康とフィットネスに関するデータのオンデバイス リポジトリです。これにより、ユーザーはお気に入りのアプリ間でデータを共有でき、それらのアプリと共有するデータを 1 か所で管理できます。

Android 14 より前の Android バージョンを搭載したデバイスでは、ヘルスコネクトを Google Play ストアでアプリとしてダウンロードできます。Android 14 以降では、ヘルスコネクトはプラットフォームの一部であり、別途ダウンロードすることなく、Google Play システム アップデートを介してアップデートを受信します。これにより、ヘルスコネクトを頻繁に更新でき、Android 14 以降を搭載したデバイスでヘルスコネクトを利用できることを頼りにできます。ユーザーはデバイスの設定からヘルスコネクトにアクセスし、システム設定にプライバシー管理を統合できます。

Android 14 以降を搭載したデバイスでは、アプリを別途ダウンロードしなくてもヘルスコネクトの使用を開始できます。
ユーザーは、健康とフィットネスに関するデータにアクセスできるアプリをシステム設定で管理できます。

ヘルスコネクトには、エクササイズのルートなど、Android 14 の新機能がいくつか含まれています。ユーザーはワークアウトのルートを共有して、地図上に可視化できます。ルートは、一定の時間枠内に保存された場所のリストとして定義されます。アプリは、ルートをエクササイズ セッションに挿入して関連付けることができます。ユーザーがこの機密データを完全に制御できるようにするには、ユーザーが個々のルートを他のアプリと共有できるようにする必要があります。

詳細については、ヘルスコネクトのドキュメントAndroid Health の新機能に関するブログ投稿をご覧ください。

OpenJDK 17 の更新

Android 14 では、最新の OpenJDK LTS リリースの機能に合わせて Android のコアライブラリを更新する取り組みが引き続き行われています。これには、アプリ デベロッパーとプラットフォーム デベロッパー向けのライブラリの更新と Java 17 言語のサポートが含まれます。

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

  • 約 300 の java.base クラスを、Java 17 をサポートするように更新しました。
  • テキスト ブロック: Java プログラミング言語で複数行の文字列リテラルを記述できます。
  • instanceof: パターン マッチング: 追加の変数なしで、オブジェクトを instanceof 内で特定の型を持つものとして扱うことができます。
  • シールクラス: 拡張または実装できるクラスとインターフェースを制限できます。

Google Play システム アップデート(プロジェクト Mainline)により、6 億台を超えるデバイスが、こうした変更を含む最新の Android ランタイム(ART)アップデートを受け取ることができます。これは、さまざまなデバイスでアプリにとって一貫した安全性の高い環境を実現し、プラットフォーム リリースに依存することなく新機能をユーザーに提供するための Google の取り組みの一環です。

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

アプリストアの改善

Android 14 では、アプリストアでのユーザー エクスペリエンスを改善するための PackageInstaller API がいくつか導入されています。

ダウンロードする前にインストールの承認をリクエストする

アプリをインストールまたは更新する際に、ユーザーの承認が必要になる場合があります。たとえば、REQUEST_INSTALL_PACKAGES 権限を使用するインストーラが新しいアプリをインストールしようとした場合などです。それより前のバージョンの Android では、APK がインストール セッションに書き込まれてセッションがcommit された後にのみ、アプリストアでユーザーの承認をリクエストできます。

Android 14 以降では、requestUserPreapproval() メソッドを使用して、インストール セッションを commit する前にユーザーの承認をリクエストできます。この改善により、ユーザーがインストールを承認するまで、アプリストアで APK のダウンロードが延期されます。さらに、ユーザーがインストールを承認すると、アプリストアはユーザーの作業を妨げることなく、バックグラウンドでアプリをダウンロードしてインストールできます。

今後の更新に責任を持つことを示す

setRequestUpdateOwnership() メソッドを使用すると、インストーラは、インストール中のアプリの今後のアップデートに責任を持つことをシステムに示すことができます。この機能により、更新の所有権の適用が可能になります。つまり、更新の所有者のみがアプリに自動更新をインストールできます。更新の所有権の適用により、ユーザーは想定されるアプリストアからのみ更新を受け取るようになります。

その他のインストーラ(INSTALL_PACKAGES 権限を利用するものを含む)がアップデートをインストールするには、ユーザーの明示的な承認を得る必要があります。ユーザーが別のソースから更新を進めることにした場合、更新の所有権は失われます。

影響が少ないタイミングでアプリを更新する

アプリストアは通常、アクティブに使用されているアプリを更新することはありません。これは、アプリの実行中のプロセスが強制終了され、ユーザーの操作が中断される可能性があるためです。

Android 14 以降では、InstallConstraints API を使用することで、インストーラはアプリのアップデートを適切なタイミングで実施できます。たとえば、アプリストアで commitSessionAfterInstallConstraintsAreMet() メソッドを呼び出して、ユーザーが対象のアプリを操作しなくなった場合にのみ更新が commit されるようにできます。

オプションの分割をシームレスにインストールする

分割 APK を使用すると、アプリの機能をモノリシック APK としてではなく、別々の APK ファイルで配信できます。これにより、アプリストアでさまざまなアプリ コンポーネントの配信を最適化できます。たとえば、アプリストアは、ターゲット デバイスのプロパティに基づいて最適化できます。PackageInstaller API は、API レベル 22 で導入されて以来、分割をサポートしています。

Android 14 では、setDontKillApp() メソッドにより、新しい分割がインストールされたときに、アプリの実行中のプロセスを強制終了すべきでないことを示すことができます。アプリストアでは、この機能を使用して、ユーザーがアプリを使用している間、アプリの新しい機能をシームレスにインストールできます。

アプリのメタデータ バンドル

Android 14 以降では、Android パッケージ インストーラを使用して、データ セーフティ方針などのアプリのメタデータを指定して、Google Play などのアプリストア ページに追加できます。

ユーザーがデバイスのスクリーンショットを撮影したときに検出する

为了打造更加标准化的屏幕截图检测体验,Android 14 引入了可保护隐私的屏幕截图检测 API。借助此 API,应用可以按 activity 注册回调。如果用户在该 activity 可见时截取屏幕截图,系统会调用这些回调并通知用户。

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

共有シートのカスタム アクションとランキングの改善

Android 14 更新了系统 Sharesheet,以便为用户提供自定义应用操作和信息更丰富的预览结果。

添加自定义操作

对于 Android 14,您的应用可以向其调用的系统 Sharesheet 添加自定义操作

Sharesheet 上自定义操作的屏幕截图。

提高直接共享目标的排名

Android 14 根据来自应用的更多信号来确定直接共享目标的排名,以便为用户提供更实用的结果。如需提供最有用的排名信号,请遵循提升直接共享目标的排名指南。通信应用还可以报告外发和传入消息的快捷方式使用情况

共享表单中的“直接共享”行,如 1

予測型「戻る」の組み込みアニメーションとカスタム アニメーションのサポート

動画: 予測型「戻る」アニメーション

Android 13 では、開発者向けオプションの背後に予測型のホームに戻るアニメーションが導入されました。開発者向けオプションを有効にした対応アプリで、右にスワイプすると、「戻る」ジェスチャーによってアプリが終了してホーム画面に戻ることを示すアニメーションが表示されます。

Android 14 では、予測型「戻る」に関するさまざまな改善と新しいガイダンスが追加されています。

この Android 14 プレビュー リリースでは、予測型「戻る」のすべての機能が開発者向けオプションで提供されます。アプリを予測型「戻る」に移行するためのデベロッパー ガイドと、カスタムのアプリ内遷移を作成するためのデベロッパー ガイドをご覧ください。

大画面のデバイス メーカーのアプリごとのオーバーライド

借助按应用替换项,设备制造商可以在大屏设备上更改应用的行为。例如,FORCE_RESIZE_APP 替换项指示系统调整应用大小以适应显示屏尺寸(避免尺寸兼容模式),即使在应用清单中设置了 resizeableActivity="false" 也是如此。

替换项旨在改善大屏设备上的用户体验。

借助新的清单属性,您可以为应用停用某些设备制造商替换项。

大画面を使用するアプリのアプリごとのオーバーライド

按应用替换会更改大屏设备上应用的行为。例如,无论应用的配置如何,OVERRIDE_MIN_ASPECT_RATIO_LARGE 设备制造商替换项都会将应用宽高比设置为 16:9。

Android 14 QPR1 允许用户在大屏设备上通过新的设置菜单应用按应用替换项。

アプリの画面共有

应用屏幕共享功能让用户能够在录制屏幕内容期间共享应用窗口,而非整个设备屏幕。

使用应用屏幕共享时,状态栏、导航栏、通知和其他系统界面元素会从共享显示屏中排除。系统只会分享所选应用的内容。

应用屏幕共享可让用户运行多个应用,但仅限单个应用共享内容,从而提高效率和隐私性。

Google Pixel 8 Pro の Gboard の LLM を活用したスマート リプライ

12 月の Feature Drop が適用された Google Pixel 8 Pro デバイスでは、デベロッパーは、Google Tensor で動作するデバイス上の大規模言語モデル(LLM)を利用した Gboard のより高品質なスマート リプライを試すことができます。

この機能は、WhatsApp、Line、KakaoTalk の限定プレビューとして、英語(米国)で利用できます。Google Pixel 8 Pro デバイスと Gboard をキーボードとして使用する必要があります。

試してみるには、まず [設定] > [開発者向けオプション] > [AiCore 設定] > [Aicore 永続性を有効にする] でこの機能を有効にします。

次に、サポートされているアプリで会話を開くと、着信メッセージに応じて LLM を活用したスマート リプライが Gboard の候補領域に表示されます。

Gboard はオンデバイス LLM を利用して、より高品質なスマート リプライを提供します。

グラフィック

パスのクエリと補間が可能

Android 的 Path API 是一种强大且灵活的机制,可用于创建和渲染矢量图形,能够描边或填充路径,根据线段、二次曲线或立方曲线构建路径,执行布尔运算以获取更复杂的形状,或同时执行所有这些操作。不过,您无法找出 Path 对象中实际包含的内容;该对象的内部信息在创建后对于调用方是不透明的。

如需创建 Path,您可以调用 moveTo()lineTo()cubicTo() 等方法来添加路径片段。但是,无法询问该路径有哪些段,因此您必须在创建时保留该信息。

从 Android 14 开始,您可以查询路径以了解其内部内容。首先,您需要使用 Path.getPathIterator API 获取 PathIterator 对象:

Kotlin

val path = Path().apply {
    moveTo(1.0f, 1.0f)
    lineTo(2.0f, 2.0f)
    close()
}
val pathIterator = path.pathIterator

Java

Path path = new Path();
path.moveTo(1.0F, 1.0F);
path.lineTo(2.0F, 2.0F);
path.close();
PathIterator pathIterator = path.getPathIterator();

接下来,您可以调用 PathIterator 逐个遍历片段,并检索每个片段的所有必要数据。以下示例使用了 PathIterator.Segment 对象,它会为您打包数据:

Kotlin

for (segment in pathIterator) {
    println("segment: ${segment.verb}, ${segment.points}")
}

Java

while (pathIterator.hasNext()) {
    PathIterator.Segment segment = pathIterator.next();
    Log.i(LOG_TAG, "segment: " + segment.getVerb() + ", " + segment.getPoints());
}

PathIterator 还有一个非分配版 next(),您可以在其中传入缓冲区来保存点数据。

查询 Path 数据的一个重要用例是插值。例如,您可能想在两个不同的路径之间添加动画(或变形)。为了进一步简化该用例,Android 14 还在 Path 中添加了 interpolate() 方法。假设两个路径具有相同的内部结构,interpolate() 方法会使用该插值结果创建一个新的 Path。以下示例返回了形状介于 pathotherPath 之间的一半(线性插值为 0 .5)的路径:

Kotlin

val interpolatedResult = Path()
if (path.isInterpolatable(otherPath)) {
    path.interpolate(otherPath, .5f, interpolatedResult)
}

Java

Path interpolatedResult = new Path();
if (path.isInterpolatable(otherPath)) {
    path.interpolate(otherPath, 0.5F, interpolatedResult);
}

Jetpack graphics-path 库也为早期版本的 Android 启用了类似的 API。

頂点シェーダーとフラグメント シェーダーを使用したカスタム メッシュ

Android 长期支持绘制具有自定义着色的三角形网格,但输入网格格式被限制为几种预定义的属性组合。Android 14 增加了对自定义网格的支持,自定义网格可定义为三角形三角形带,并且可以视需要编入索引。这些网格通过自定义属性、顶点步长、转换以及用 AGSL 编写的顶点和片段着色器指定

顶点着色器定义变化,例如位置和颜色,而 fragment 着色器可以选择定义像素的颜色,通常通过使用顶点着色器创建的变化。如果 fragment 着色器提供了颜色,则它会使用绘制网格时选择的混合模式与当前的 Paint 颜色混合。您可以将 uniform 传递到 fragment 和顶点着色器中,以提高灵活性。

Canvas のハードウェア バッファ レンダラ

为协助使用 Android 的 Canvas API 通过硬件加速在 HardwareBuffer 中进行绘制,Android 14 引入了 HardwareBufferRenderer。当您的用例涉及通过 SurfaceControl 与系统合成器进行通信以实现低延迟绘制时,此 API 特别有用。