機能と 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

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

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

To help you build a user-centric UI for gendered languages, Android 14 introduces the Grammatical Inflection API, which lets you add support for grammatical gender without refactoring your app.

地域の設定

Regional preferences enable users to personalize temperature units, the first day of the week, and numbering systems. A European living in the United States might prefer temperature units to be in Celsius rather than Fahrenheit and for apps to treat Monday as the beginning of the week instead of the US default of Sunday.

New Android Settings menus for these preferences provide users with a discoverable and centralized location to change app preferences. These preferences also persist through backup and restore. Several APIs and intents—such as getTemperatureUnit and getFirstDayOfWeek— grant your app read access to user preferences, so your app can adjust how it displays information. You can also register a BroadcastReceiver on ACTION_LOCALE_CHANGED to handle locale configuration changes when regional preferences change.

To find these settings, open the Settings app and navigate to System > Languages & input > Regional preferences.

Regional preferences screen in Android system settings.
Temperature options for regional preferences in Android system settings.

ユーザー補助

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

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

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

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

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

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

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

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

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

テキストサイズは必ず sp 単位で指定してください。日時 アプリが sp 単位を使用している場合、Android はユーザーが指定したテキストサイズと 適切にスケーリングする必要があります。

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

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

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

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

lineHeight には sp 単位を使用する

行の高さがテキストに合わせてスケーリングされるように、android:lineHeight は常に dp ではなく sp 単位で定義してください。テキスト メッセージに sp は 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 upgrades and improves camera extensions, allowing apps to handle longer processing times, which enables improved images using compute-intensive algorithms like low-light photography on supported devices. These features give users an even more robust experience when using camera extension capabilities. Examples of these improvements include:

センサー内ズーム

CameraCharacteristicsREQUEST_AVAILABLE_CAPABILITIES_STREAM_USE_CASESCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW が含まれている場合、アプリは高度なセンサー機能を使用して、ストリームのユースケースが CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW に設定されている RAW ターゲットで CaptureRequest を使用して、切り抜き RAW ストリームに全画角と同じピクセルを設定できます。リクエスト オーバーライド コントロールを実装することで、更新されたカメラでは、他のカメラ コントロールの準備が整う前にユーザーがズームを操作できるようになります。

ロスレス USB オーディオ

Android 14 gains support for lossless audio formats for audiophile-level experiences over USB wired headsets. You can query a USB device for its preferred mixer attributes, register a listener for changes in preferred mixer attributes, and configure mixer attributes using the AudioMixerAttributes class. This class represents the format, such as channel mask, sample rate, and behavior of the audio mixer. The class allows for audio to be sent directly, without mixing, volume adjustment, or processing effects.

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

認証情報マネージャー

Android 14 では、プラットフォーム API として 認証情報マネージャーが追加され、Google Play 開発者サービスを使用する Jetpack ライブラリを介して Android 4.4(API レベル 19)デバイスまでサポートが拡張されています。認証情報マネージャーは、ユーザーが構成した認証情報プロバイダを使用して認証情報を取得して保存する API を使用して、ユーザーのログインを容易にすることを目的としています。認証情報マネージャーは、ユーザー名とパスワード、パスキー、フェデレーション ログイン ソリューション(Google でログインなど)といった複数のログイン方法を単一の API でサポートしています。

パスキーには多くのメリットがあります。たとえば、パスキーは業界標準に基づいて構築されており、さまざまなオペレーティング システムやブラウザのエコシステムで動作し、ウェブサイトとアプリの両方で使用できます。

詳細については、認証情報マネージャーとパスキーのドキュメントと、認証情報マネージャーとパスキーに関するブログ投稿をご覧ください。

ヘルスコネクト

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

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

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

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

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

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() メソッドを使用して、新しい分割がインストールされたときに、アプリの実行中のプロセスを強制終了すべきでないことを示せます。アプリストアでは、この機能を使用して、ユーザーがアプリを使用しているときに、アプリの新しい機能をシームレスにインストールできます。

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

Starting in Android 14, the Android package installer lets you specify app metadata, such as data safety practices, to include on app store pages such as Google Play.

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

Android 14 では、スクリーンショットの検出の標準化されたエクスペリエンスを実現するため、プライバシーを保護するスクリーンショット検出 API が導入されました。この API を使用すると、アプリはアクティビティごとにコールバックを登録できます。アクティビティが表示されている間にユーザーがスクリーンショットを撮ると、これらのコールバックが呼び出され、ユーザーに通知されます。

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

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

Android 14 では、システム共有シートが更新され、カスタムのアプリ アクションと有益なプレビュー結果をユーザーに提供できるようになりました。

カスタム アクションを追加する

Android 14 では、アプリで呼び出すシステム共有シートにカスタム アクションを追加できます。

共有シートのカスタム アクションのスクリーンショット。

直接共有ターゲットのランキングを改善する

Android 14 では、アプリからの多数のシグナルを使用して、直接共有ターゲットのランキングを決定し、より有用な結果をユーザーに提供しています。ランキングに最も有用なシグナルを提供するには、直接共有ターゲットのランキングを改善するためのガイダンスに沿って対応してください。通信アプリは、送受信メッセージのショートカットの使用状況を報告することもできます。

共有シートの [直接共有] 行(1 を参照)

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

Video: Predictive back animations

Android 13 introduced the predictive back-to-home animation behind a developer option. When used in a supported app with the developer option enabled, swiping back shows an animation indicating that the back gesture exits the app back to the home screen.

Android 14 includes multiple improvements and new guidance for Predictive Back:

With this Android 14 preview release, all features of Predictive Back remain behind a developer option. See the developer guide to migrate your app to predictive back, as well as the developer guide to creating custom in-app transitions.

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

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 を活用したスマート リプライ

On Pixel 8 Pro devices with the December Feature Drop, developers can try out higher-quality smart replies in Gboard powered by on-device Large Language Models (LLMs) running on Google Tensor.

This feature is available as a limited preview for US English in WhatsApp, Line, and KakaoTalk. It requires using a Pixel 8 Pro device with Gboard as your keyboard.

To try it out, first enable the feature in Settings > Developer Options > AiCore Settings > Enable Aicore Persistent.

Next, open a conversation in a supported app to see LLM-powered Smart Reply in Gboard's suggestion strip in response to incoming messages.

Gboard utilizes on-device LLMs to provide higher-quality smart replies.

グラフィック

パスのクエリと補間に対応

Android's Path API is a powerful and flexible mechanism for creating and rendering vector graphics, with the ability to stroke or fill a path, construct a path from line segments or quadratic or cubic curves, perform boolean operations to get even more complex shapes, or all of these simultaneously. One limitation is the ability to find out what is actually in a Path object; the internals of the object are opaque to callers after creation.

To create a Path, you call methods such as moveTo(), lineTo(), and cubicTo() to add path segments. But there has been no way to ask that path what the segments are, so you must retain that information at creation time.

Starting in Android 14, you can query paths to find out what's inside of them. First, you need to get a PathIterator object using the Path.getPathIterator API:

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();

Next, you can call PathIterator to iterate through the segments one by one, retrieving all of the necessary data for each segment. This example uses PathIterator.Segment objects, which packages up the data for you:

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 also has a non-allocating version of next() where you can pass in a buffer to hold the point data.

One of the important use cases of querying Path data is interpolation. For example, you might want to animate (or morph) between two different paths. To further simplify that use case, Android 14 also includes the interpolate() method on Path. Assuming the two paths have the same internal structure, the interpolate() method creates a new Path with that interpolated result. This example returns a path whose shape is halfway (a linear interpolation of .5) between path and otherPath:

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);
}

The Jetpack graphics-path library enables similar APIs for earlier versions of Android as well.

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

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 のハードウェア バッファ レンダラ

To assist in using Android's Canvas API to draw with hardware acceleration into a HardwareBuffer, Android 14 introduces HardwareBufferRenderer. This API is particularly useful when your use case involves communication with the system compositor through SurfaceControl for low-latency drawing.