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 テストを実施したりできます。また、アプリがローカライズのためにサーバー側の push を使用する場合は、更新されたロケールのリストを提供できます。インプット メソッド エディタ(IME)によるアプリの言語の確認: IME は
getApplicationLocales()
メソッドを使用して現在のアプリの言語を確認し、IME 言語をその言語と一致させます。
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 とインテント(getTemperatureUnit
や getFirstDayOfWeek
など)により、アプリにそうしたユーザー設定への読み取りアクセス権を付与することで、アプリでの情報の表示方法を調整できます。また、ACTION_LOCALE_CHANGED
に BroadcastReceiver
を登録して、地域の設定が変更されたときに言語 / 地域の構成の変更を処理することも可能です。
これらの設定を確認するには、設定アプリを開いて [システム] > [言語と入力] > [地域の設定] に移動します。
ユーザー補助
非線形フォント スケーリングを 200% にする
Android 14 以降では、フォント スケーリングが 200% までサポートされます。これにより、ロービジョンのユーザーは、Web Content Accessibility Guidelines(WCAG)に準拠した追加のユーザー補助オプションを利用できます。
画面上の大きなテキスト要素が拡大しすぎないように、システムでは非線形のスケーリング曲線が適用されます。このスケーリング戦略では、大きいテキストが小さいテキストとは異なる率でスケーリングされます。非線形フォント スケーリングでは、異なるサイズの要素間の比例階層を維持したまま、線形テキスト スケーリングの高度な問題(テキストが途切れる、表示サイズが極端に大きいためにテキストが読みづらくなるなど)を軽減できます。
非線形フォント スケーリングでアプリをテストする
すでにスケーリング ピクセル(sp)単位を使用してテキストのサイズを定義している場合は、これらの追加オプションとスケーリングの改善がアプリのテキストに自動的に適用されます。ただし、アプリがフォントサイズを正しく適用し、ユーザビリティに影響を与えずにより大きなフォントサイズに対応できることを確認するには、最大フォントサイズ(200%)を有効にして UI テストを行う必要があります。
200% のフォントサイズを有効にする手順は次のとおりです。
- 設定アプリを開き、[ユーザー補助] > [表示サイズとテキスト] に移動します。
- [フォントサイズ] オプションでは、最大フォントサイズの設定が有効になるまで、プラス(+)アイコンをタップします(このセクションに表示される画像で確認できます)。
テキストサイズにはスケール非依存ピクセル(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 は、textSize
と lineHeight
の両方が sp 単位で定義されている場合にのみ、目的の比率が維持されるように lineHeight
を自動的に修正します。
カメラとメディア
画像のウルトラ HDR
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:
- Dynamic still capture processing latency estimation provides much more
accurate still capture latency estimates based on the current scene and
environment conditions. Call
CameraExtensionSession.getRealtimeStillCaptureLatency()
to get aStillCaptureLatency
object that has two latency estimation methods. ThegetCaptureLatency()
method returns the estimated latency betweenonCaptureStarted
andonCaptureProcessStarted()
, and thegetProcessingLatency()
method returns the estimated latency betweenonCaptureProcessStarted()
and the final processed frame being available. - Support for capture progress callbacks so that apps can display the current
progress of long-running, still-capture processing operations. You can check
if this feature is available with
CameraExtensionCharacteristics.isCaptureProcessProgressAvailable
, and if it is, you implement theonCaptureProcessProgressed()
callback, which has the progress (from 0 to 100) passed in as a parameter. Extension specific metadata, such as
CaptureRequest.EXTENSION_STRENGTH
for dialing in the amount of an extension effect, such as the amount of background blur withEXTENSION_BOKEH
.Postview Feature for Still Capture in camera extensions, which provides a less-processed image more quickly than the final image. If an extension has increased processing latency, a postview image could be provided as a placeholder to improve UX and switched out later for the final image. You can check if this feature is available with
CameraExtensionCharacteristics.isPostviewAvailable
. Then you can pass anOutputConfiguration
toExtensionSessionConfiguration.setPostviewOutputConfiguration
.Support for
SurfaceView
allowing for a more optimized and power-efficient preview render path.Support for tap to focus and zoom during extension usage.
センサー内ズーム
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 では、プラットフォーム API として認証情報マネージャーが追加されています。また、Google Play 開発者サービスを使用する Jetpack ライブラリを介して、Android 4.4(API レベル 19)デバイスに対するサポートが追加されています。認証情報マネージャーは、ユーザーが構成した認証情報プロバイダを使用して認証情報を取得、保存する API を使用して、ユーザーがログインしやすくすることを目的としています。認証情報マネージャーは、ユーザー名とパスワード、パスキー、フェデレーション ログイン ソリューション(Google でログインなど)など、複数のログイン方法を 1 つの API でサポートします。
パスキーには多くの利点があります。たとえば、パスキーは業界標準に基づいて構築されており、さまざまなオペレーティング システムやブラウザのエコシステムで機能し、ウェブサイトとアプリの両方で使用できます。
詳細については、認証情報マネージャーとパスキーのドキュメントと認証情報マネージャーとパスキーに関するブログ投稿をご覧ください。
ヘルスコネクト
ヘルスコネクトは、ユーザーの健康とフィットネスに関するデータのオンデバイス リポジトリです。これにより、ユーザーはお気に入りのアプリ間でデータを共有でき、それらのアプリと共有するデータを 1 か所で管理できます。
Android 14 より前の Android バージョンを搭載したデバイスでは、ヘルスコネクトを Google Play ストアでアプリとしてダウンロードできます。Android 14 以降では、ヘルスコネクトはプラットフォームの一部であり、別途ダウンロードすることなく、Google Play システム アップデートを介してアップデートを受信します。これにより、ヘルスコネクトを頻繁に更新でき、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 introduces several PackageInstaller
APIs that
allow app stores to improve their user experience.
Request install approval before downloading
Installing or updating an app might require user approval.
For example, when an installer making use of the
REQUEST_INSTALL_PACKAGES
permission attempts to install a
new app. In prior Android versions, app stores can only request user approval
after APKs are written to the install session and the
session is committed.
Starting with Android 14, the requestUserPreapproval()
method lets installers request user approval before committing the install
session. This improvement lets an app store defer downloading any APKs until
after the installation has been approved by the user. Furthermore, once a user
has approved installation, the app store can download and install the app in the
background without interrupting the user.
Claim responsibility for future updates
The setRequestUpdateOwnership()
method allows an installer
to indicate to the system that it intends to be responsible for future updates
to an app it is installing. This capability enables update ownership
enforcement, meaning that only the update owner is permitted
to install automatic updates to the app. Update ownership enforcement helps to
ensure that users receive updates only from the expected app store.
Any other installer, including those making use of the
INSTALL_PACKAGES
permission, must receive explicit user
approval in order to install an update. If a user decides to proceed with an
update from another source, update ownership is lost.
Update apps at less-disruptive times
App stores typically want to avoid updating an app that is actively in use because this leads to the app's running processes being killed, which potentially interrupts what the user was doing.
Starting with Android 14, the InstallConstraints
API
gives installers a way to ensure that their app updates happen at an opportune
moment. For example, an app store can call the
commitSessionAfterInstallConstraintsAreMet()
method to
make sure that an update is only committed when the user is no longer
interacting with the app in question.
Seamlessly install optional splits
With split APKs, features of an app can be delivered in separate APK files,
rather than as a monolithic APK. Split APKs allow app stores to optimize the
delivery of different app components. For example, app stores might optimize
based on the properties of the target device. The
PackageInstaller
API has supported splits since its
introduction in API level 22.
In Android 14, the setDontKillApp()
method allows an
installer to indicate that the app's running processes shouldn't be killed when
new splits are installed. App stores can use this feature to seamlessly install
new features of an app while the user is using the app.
アプリのメタデータ バンドル
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.
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.
予測型「戻る」の組み込みアニメーションとカスタム アニメーションのサポート
Android 13 では、開発者向けオプションの背後に予測型のホームに戻るアニメーションが導入されました。開発者向けオプションを有効にした対応アプリで、右にスワイプすると、「戻る」ジェスチャーによってアプリが終了してホーム画面に戻ることを示すアニメーションが表示されます。
Android 14 では、予測型「戻る」に関するさまざまな改善と新しいガイダンスが追加されています。
android:enableOnBackInvokedCallback=true
を設定すると、アプリ全体ではなく、アクティビティごとに予測型「戻る」システム アニメーションを有効にできます。- Android 13 から、ホームに戻るアニメーションに付随する新しいシステム アニメーションが追加されました。新しいシステム アニメーションは、アクティビティ間およびタスク間であり、予測型「戻る」に移行すると自動的に取得されます。
- ボトムシート、サイドシート、検索に、新しいマテリアル コンポーネント アニメーションを追加しました。
- カスタムのアプリ内アニメーションと遷移を作成するための設計ガイダンスを作成しました。
- カスタムのアプリ内遷移アニメーションをサポートする新しい API を追加しました。
handleOnBackStarted
、handleOnBackProgressed
、handleOnBackCancelled
in
OnBackPressedCallback
onBackStarted
、onBackProgressed
、onBackCancelled
in
OnBackAnimationCallback
- ユーザーが後方にスワイプしたときに応答する遷移には、
overridePendingTransition
ではなくoverrideActivityTransition
を使用します。
この 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 の候補領域に表示されます。
グラフィック
パスはクエリと補間が可能
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 用のハードウェア バッファ レンダラ
Android の Canvas
API を使用してハードウェア アクセラレーションを HardwareBuffer
に描画できるように、Android 14 では HardwareBufferRenderer
が導入されました。この API は、ユースケースに SurfaceControl
を介したシステム コンポジタとの通信が含まれる場合に、低レイテンシの描画に特に役立ちます。