機能と API の概要

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

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

多言語対応

アプリ別の言語設定

Android 14 expands on the per-app language features that were introduced in Android 13 (API level 33) with these additional capabilities:

  • Automatically generate an app's localeConfig: Starting with Android Studio Giraffe Canary 7 and AGP 8.1.0-alpha07, you can configure your app to support per-app language preferences automatically. Based on your project resources, the Android Gradle plugin generates the LocaleConfig file and adds a reference to it in the final manifest file, so you no longer have to create or update the file manually. AGP uses the resources in the res folders of your app modules and any library module dependencies to determine the locales to include in the LocaleConfig file.

  • Dynamic updates for an app's localeConfig: Use the setOverrideLocaleConfig() and getOverrideLocaleConfig() methods in LocaleManager to dynamically update your app's list of supported languages in the device's system settings. Use this flexibility to customize the list of supported languages per region, run A/B experiments, or provide an updated list of locales if your app utilizes server-side pushes for localization.

  • App language visibility for input method editors (IMEs): IMEs can utilize the getApplicationLocales() method to check the language of the current app and match the IME language to that language.

Grammatical Inflection API

3 billion people speak gendered languages: languages where grammatical categories—such as nouns, verbs, adjectives, and prepositions—inflect according to the gender of people and objects you talk to or about. Traditionally, many gendered languages use masculine grammatical gender as the default or generic gender.

Addressing users in the wrong grammatical gender, such as addressing women in masculine grammatical gender, can negatively impact their performance and attitude. In contrast, a UI with language that correctly reflects the user's grammatical gender can improve user engagement and provide a more personalized and natural-sounding user experience.

Android 14 では、性別で文法が変わる言語に合わせてユーザー中心の UI を構築するため、アプリをリファクタリングせずに文法上の性別への対応を追加できる 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

An illustration of Standard Dynamic Range (SDR) versus High Dynamic Range (HDR) image quality.

Android 14 adds support for High Dynamic Range (HDR) images that retain more of the information from the sensor when taking a photo, which enables vibrant colors and greater contrast. Android uses the Ultra HDR format, which is fully backward compatible with JPEG images, allowing apps to seamlessly interoperate with HDR images, displaying them in Standard Dynamic Range (SDR) as needed.

Rendering these images in the UI in HDR is done automatically by the framework when your app opts in to using HDR UI for its Activity Window, either through a manifest entry or at runtime by calling Window.setColorMode(). You can also capture compressed Ultra HDR still images on supported devices. With more colors recovered from the sensor, editing in post can be more flexible. The Gainmap associated with Ultra HDR images can be used to render them using OpenGL or 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 のサポート。プレビューのレンダリング パスがより最適化され、電力効率に優れています。

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

センサー内ズーム

When REQUEST_AVAILABLE_CAPABILITIES_STREAM_USE_CASE in CameraCharacteristics contains SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW, your app can use advanced sensor capabilities to give a cropped RAW stream the same pixels as the full field of view by using a CaptureRequest with a RAW target that has stream use case set to CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW. By implementing the request override controls, the updated camera gives users zoom control even before other camera controls are ready.

ロスレス USB オーディオ

Android 14 では、USB 有線ヘッドセットでオーディオ マニアレベルの体験ができるロスレス オーディオ形式のサポートが追加されました。USB デバイスで優先されるミキサー属性のクエリ、優先されるミキサー属性の変更に対するリスナーの登録、AudioMixerAttributes クラスを使用したミキサー属性の設定を行うことができます。このクラスは、チャンネル マスク、サンプルレート、オーディオ ミキサーの動作などの形式を表します。このクラスを使用すると、ミキシング、音量調整、処理エフェクトなしに、音声を直接送信できます。

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

認証情報マネージャー

Android 14 adds Credential Manager as a platform API, with additional support back to Android 4.4 (API level 19) devices through a Jetpack Library using Google Play services. Credential Manager aims to make sign-in easier for users with APIs that retrieve and store credentials with user-configured credential providers. Credential Manager supports multiple sign-in methods, including username and password, passkeys, and federated sign-in solutions (such as Sign-in with Google) in a single API.

Passkeys provide many advantages. For example, passkeys are built on industry standards, can work across different operating systems and browser ecosystems, and can be used with both websites and apps.

For more information, see the Credential Manager and passkeys documentation and the blogpost about Credential Manager and passkeys.

ヘルスコネクト

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

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

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

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

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

OpenJDK 17 の更新

Android 14 continues the work of refreshing Android's core libraries to align with the features in the latest OpenJDK LTS releases, including both library updates and Java 17 language support for app and platform developers.

The following features and improvements are included:

  • Updated approximately 300 java.base classes to Java 17 support.
  • Text Blocks, which introduce multi-line string literals to the Java programming language.
  • Pattern Matching for instanceof, which allows an object to be treated as having a specific type in an instanceof without any additional variables.
  • Sealed classes, which allow you restrict which classes and interfaces can extend or implement them.

Thanks to Google Play system updates (Project Mainline), over 600 million devices are enabled to receive the latest Android Runtime (ART) updates that include these changes. This is part of our commitment to give apps a more consistent, secure environment across devices, and to deliver new features and capabilities to users independent of platform releases.

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

アプリストアの改善

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 などのアプリストア ページに追加できます。

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

To create a more standardized experience for detecting screenshots, Android 14 introduces a privacy-preserving screenshot detection API. This API lets apps register callbacks on a per-activity basis. These callbacks are invoked, and the user is notified, when the user takes a screenshot while that activity is visible.

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

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

Android 14 updates the system sharesheet to support custom app actions and more informative preview results for users.

Add custom actions

With Android 14, your app can add custom actions to the system sharesheet it invokes.

Screenshot of custom actions on the sharesheet.

Improve ranking of Direct Share targets

Android 14 uses more signals from apps to determine the ranking of the direct share targets to provide more helpful results for the user. To provide the most useful signal for ranking, follow the guidance for improving rankings of your Direct Share targets. Communication apps can also report shortcut usage for outgoing and incoming messages.

Direct Share row in the sharesheet, as shown by 1

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

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

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

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

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

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

Per-app overrides enable device manufacturers to change the behavior of apps on large screen devices. For example, the FORCE_RESIZE_APP override instructs the system to resize the app to fit display dimensions (avoiding size compatibility mode) even if resizeableActivity="false" is set in the app manifest.

Overrides are intended to improve the user experience on large screens.

New manifest properties enable you to disable some device manufacturer overrides for your app.

大画面のユーザーのアプリごとのオーバーライド

アプリごとのオーバーライドは、大画面デバイスでのアプリの動作を変更します。たとえば、デバイス メーカーの OVERRIDE_MIN_ASPECT_RATIO_LARGE オーバーライドにより、アプリの構成に関係なく、アプリのアスペクト比が 16:9 に設定されます。

Android 14 QPR1 では、大画面デバイスで新しい設定メニューを使用して、アプリごとのオーバーライドを適用できます。

アプリの画面共有

アプリの画面共有を使用すると、ユーザーは画面コンテンツの録画中にデバイス画面全体ではなくアプリのウィンドウを共有できます。

アプリの画面共有では、ステータスバー、ナビゲーション バー、通知、その他のシステム UI 要素が共有ディスプレイから除外されます。選択したアプリのコンテンツのみが共有されます。

アプリの画面共有により、ユーザーは複数のアプリを実行できるが、コンテンツの共有は 1 つのアプリに限定されるため、生産性とプライバシーが向上します。

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 は、ベクター グラフィックの作成とレンダリングを行うための強力かつ柔軟なメカニズムです。パスのストロークや塗りつぶし、線分、2 次曲線、3 次曲線からのパスの作成、ブール演算による複雑なシェイプの取得、またはこれらすべてを同時に行うことが可能です。制限の一つは、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 を呼び出してセグメントを 1 つずつ反復し、各セグメントに必要なすべてのデータを取得できます。この例では、データをパッケージ化する 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 データのクエリを行う重要なユースケースの一つに、補間があります。たとえば、2 つの異なるパス間でアニメーション化(モーフィング)できます。このユースケースをさらに簡素化するために、Android 14 では Pathinterpolate() メソッドも追加されています。2 つのパスの内部構造が同じ場合、interpolate() メソッドはその補間された結果を使用して新しい Path を作成します。この例では、形状が pathotherPath の中間(.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 has long supported drawing triangle meshes with custom shading, but the input mesh format has been limited to a few predefined attribute combinations. Android 14 adds support for custom meshes, which can be defined as triangles or triangle strips, and can, optionally, be indexed. These meshes are specified with custom attributes, vertex strides, varying, and vertex and fragment shaders written in AGSL.

The vertex shader defines the varyings, such as position and color, while the fragment shader can optionally define the color for the pixel, typically by using the varyings created by the vertex shader. If color is provided by the fragment shader, it is then blended with the current Paint color using the blend mode selected when drawing the mesh. Uniforms can be passed into the fragment and vertex shaders for additional flexibility.

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

Android の Canvas API を使用してハードウェア アクセラレーションを HardwareBuffer に描画できるように、Android 14 では HardwareBufferRenderer が導入されました。この API は、ユースケースに SurfaceControl を介したシステム コンポジタとの通信が含まれる場合に、低レイテンシの描画に特に役立ちます。