本記事は、DroidKaigi 代表理事、技術書典 主宰者の @mhidaka さんに寄稿いただいたゲスト記事 (原文はこちら) です。 Android 14 デベロッパー プレビュー 1 リリースの発表を受けて、日本のデベロッパー向けに変更点と新機能をわかりやすくまとめていただきましたので、ぜひご参考にしてみてください。
2023 年 2 月 8 日 9:30 AM (現地時間) 、Google より Android 14 デベロッパー プレビュー 1 が発表されました。最新の Android 14 (Android U、コードネームは UpsideDownCake です。Android 14 DP1) のアップデートを速報でお伝えします。
Android 14 DP1 でのアップデートは Android 13 までの注力分野を維持しており、基本的な路線はここ数年で大きな変化はありません。パフォーマンス、プライバシー、セキュリティ、そしてユーザー体験、開発者の生産性向上です。
Android 14 DP1 はエミュレータのほか、Pixel 7 Pro、Pixel 7、Pixel 6a、Pixel 6 Pro、Pixel 6、Pixel 5a 5G、Pixel 5、Pixel 4a (5G) で今すぐ確認できます。開発環境は Android Studio Giraffe を推奨しています。 ※本記事執筆時点では OTA でのアップデートは未提供です。 ※以下、リンクすべて英語
Factory images for Google Pixel
Android Studio Preview (Giraffe | 2022.3.1 Canary 3)
最終版までのマイルストーンは次のとおりです。最終リリースまで概ね四半期ごとにステップを設けており、Quarterly Platform Release (QPR) と呼んで開発者からのフィードバックを集めています。
Android 14 では、デベロッパー プレビュー (意見収集フェーズ) と、ベータ版、そしてプラットフォームの安定版の 3 つのフェーズを経て最終リリースをします。2023 年 6 月までがベータ期間 (ベータ 3 まで) となり、2023 年 6 月以降は基本的に API の挙動変更はなくなり、動作確認や不具合修正が中心となります (ベータ 4, 5 が対象です) 。月単位や各フェーズの説明など詳細なマイルストーンはこちらをご確認ください。
次のリストは本記事の執筆にあたって参考にしたリファレンスです。
Android 14 の最初のデベロッパー プレビュー - Android Developers Japan Blog
Android 14 Developer Preview - 公式サイト (英語)
開発者プレビューでみつけた不具合、フィードバックの連絡先 (英語)
Android 14 の試し方、エミュレータ、フラッシュイメージのダウンロード方法 (英語)
Android 14 で変更・影響のある機能リストと注釈 (英語)
アプリ挙動の変更 (すべてのアプリ:Android 14プラットフォーム上で受ける影響の解説) (英語)
Android 14 をターゲットとするアプリ挙動の変更 (英語)
Android 14 の新機能 (APIの変更、追加等) (英語)
https://developer.android.com/reference/android/os/Build.VERSION_CODES.html#UPSIDE_DOWN_CAKE (英語)
Jetpack libraries アップデートリスト (2023Android 14年2月8日、DP1にあわせて数多くのライブラリが更新)
以下は Android 14 DP1 で導入された機能・制限・変更点の一覧表、注目ポイント等の解説です。続きからどうぞ!
大画面向けに最適化 (こちらは Android 13 までの変更です。Window size クラスの導入、Activity embedding など)
バックグラウンド処理の変更 (JobScheduler と Foreground Services を更新/追加)
Android 14 ではアプリは適切なフォアグラウンドサービスタイプを指定する (英語) 必要があります (少なくとも1つ、サービスにタイプを記載する)
データ転送用の新しい API を追加 (英語)しました
バッテリーの節約を目的にブロードキャストを最適化し、アプリが受け取るタイミングを変更 (システムはブロードキャストの受け取りをキューイングして待たせることがある (英語))
Android 13 以降をターゲットにしたアプリでは SCHEDULE_EXACT_ALARM (正確な時刻に起動するための権限) はデフォルトで拒否 (英語) されます
ユーザーはフォントを 200% に拡大できるように (Android 13 までの Pixel では 130% が上限)
アプリごとの言語設定を動的に変える API を追加 (英語)
文法上の性別がある言語へのサポートを強化し、パーソナライズを促進する Grammatical Inflection API (英語) を追加
OpenJDK 17 のサポートを追加
アプリ互換性検証機能 (英語) の提供 (開発者向けオプションと ADB コマンドから特定機能の ON/OFF を制御できます)
Android Work (エンタープライズ) 向けに連絡先等のクロスプロファイルアクセス (英語)
開発者オプションからアクセスできる「アプリの互換性検証機能」では、Android 14 がアプリにどのような影響を与えるか、個別にチェックできます。 画像にあるようなリストは、それぞれが Android システムのもつフィーチャーフラグで、どのような機能を制御できるかはこちらのページで解説 (英語) しています。
プライバシーやセキュリティ強化のため、アプリの挙動について、Android 14 DP1 では次の制約が追加されています。基本的には開発者が意図していない機能の公開や、意図しない動作を防ぐスタンスです。
動的にブロードキャストレシーバーを登録する際には Android 13 で追加された公開・非公開設定 (英語) を明示的に指定しなければなりません。
暗黙的 Intent の受け取り方を変更 (英語) し、パッケージを指定しないインテントをアプリ内部に送信することを制限します (明示的に公開する必要があります)
動的なコードローディング (DCL) でのセキュリティイシューを軽減するため、動的に読み込む場合、読み取り専用属性が必要 (英語) になります。
Android 14 以降では targetSdkVersion が 23 未満のアプリはインストール不可となります。
Credential Manager とパスキーのサポートを追加
非 SDK インターフェイスを制限 (英語) (これまでのリストを更新し、利用できないAPIのリストが変わりました)
ここまで機能変更等の一覧を紹介しましたが、Android 14 DP1 の新機能 (英語) について個別に解説します。アプリごとの言語設定は Android 13 のときに追加された機能ですが、Android 14 では動的更新等もサポートされるようになりました。IME とのインターフェイス (言語設定) を追加し、アプリの言語設定にあわせたキーボード等を表示することもできるようになります。
ユーザーに合わせたローカライズの一貫として、Grammatical Inflection API も面白い取り組みです。フランス語のような文法上の性別がある言語は、これまで扱いにくかったのですが (アプリからユーザーの性別や対象となる人物に基づいて翻訳文を指定できなかった) 、この API を使えばより自然な翻訳を提供可能としています。Android Studio でのサポートは未提供ですが、将来のデベロッパー プレビューリリースで対応予定とのことです。
アクセシビリティ機能では最大のフォントサイズが 130% から 200% に変更がありました。Android 14 上でアプリでのレイアウトが破綻しないか (この場合は「情報を必要な利用者へ、欠落せず適切に届けられるか」という意味です) 文字や文章が欠けたりしないか、開発者として検証してください。テキストサイズの指定方法や非線形のフォントスケーリングのテストはこちらのドキュメント (英語) をみてください。
Android 14 DP1 の API リファレンス (英語) で面白いと感じたポイントをまとめておきます。 ※以下、リンクすべて英語
android.adservices.topics 広告関連が追加されており、サードパーティ Cookie に変わる手法として Google が提唱している TOPICS ベース機能を OS 統合しようとしている。
android.credentials セキュリティ強化。CredentialManager 関連 (パスキー等) が OS 統合され始めており、より安全にユーザーデータやアクセスを管理できる仕組みが整備されつつある。
android.healthconnect ヘルスコネクト関連機能。Watch や Fit といった健康管理などプライバシーが必要なデバイス、センサーデータの管理機構が追加され始めている。
UPSIDE_DOWN_CAKE どんなケーキかな?とおもったらフライパンとかで焼くときに下側になる (切ったリンゴとか) が、食べるときにひっくり返して上側にくる逆さまケーキという意味らしい。
android.view Jetpack Compose 後、新機能が追加されないわけではなく、よりレンダリングを細かく制御できるような下位レイヤーの API が追加されていてパフォーマンス向上のための取り組みをしている。
BackEvent 画面両端でのスワイプ(予測型「戻る」ジェスチャー)をハンドリングするためのクラスが追加
Android 14 DP1 ではプラットフォームのコア機能アップデートや、セキュリティ・プライバシーにかかわる変更がメインです。デベロッパー プレビューの立ち位置からもわかるようにフレームワークの基礎的なアップデートが中心です。ワクワクするような機能は DP2 やベータ 1 以降 (Google I/O 2023 かもしれませんね) に期待することになります。
Android 12,13 を振り返ってみても、DP1 の変更は派手ではありません。しかし後戻りしにくい重要な変更を含んでいます (Android 14 DP1 ではフォアグラウンドサービスのタイプ指定やブロードキャストレシーバ、暗黙的インテント、動的コードローディング等の扱い変更が代表的でしょう) 、特に CredentialManager やパスキーのセキュリティ機能強化は利用者のプライバシーを守るためには必須の機能です。
DP1 では発表されなかった Jetpack Compose の新ライブラリやパフォーマンス改善、Android Studio Preview Giraffe など開発環境の新機能、生産性向上のための新機能アナウンス・ツール発表が楽しみですね。
この記事は エンジニアリング部門副社長、Dave Burke による Android Developers Blog の記事 " The first developer preview of Android 14 " を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
Android を数十億人に上る Android ユーザーの一人ひとりに適した動作にすることは、私たちと Android ハードウェア メーカー、そしてデベロッパー コミュニティの皆さんとの共同作業です。
Android は、年間を通して機能強化と新機能を提供し続けます。Android の継続的改善においては、Android 14 デベロッパー プレビューと Quarterly Platform Release (QPR) ベータ版プログラムのフィードバックが重要な役割を果たします。Android 14 デベロッパー サイト (英語) には、Pixel にダウンロードする方法やリリース スケジュールなど、プレビュー版に関する多くの情報が掲載されています。皆さんの感想を聞くのを楽しみにしています。そして、Android を誰もが使えるプラットフォームにするために、引き続き協力をお願いいたします。
Android 14 は、タブレットや折りたたみ式のフォーム ファクタに対応するために Android 12L と 13 で行った作業を土台として開発されています。さまざまな画面サイズに対応したアプリを開発できるように、ウィンドウ サイズクラス、SlidingPaneLayout、アクティビティの埋め込み、制約付きボックス (英語) などの機能を作成しました。これらの機能は、すべて Jetpack Compose でサポートされています。毎回のリリースの目的は、アプリをあらゆる Android に最適化する作業を簡単にすることです。
アプリを効率的に準備できるように、大画面向けのアプリ品質ガイドを更新し、大画面や折りたたみ式端末向けの開発についてさらに詳しく学習できるように準備しました。大画面ギャラリーでは、実績のあるデザイン パターンや、ソーシャル&コミュニケーション、メディア、仕事効率化、ショッピング、読書など、アプリがサポートするマーケットでのデザイン アイデアを紹介しています。
マルチデバイス エクスペリエンス (英語) は、Android の重要な機能です。クロスデバイス SDK (英語) のプレビュー版を使うと、さまざまな種類のデバイスやフォーム ファクタで直感的に利用できる高度な操作を今日からさっそく実現できます。今後もさらに多くの機能が利用できるようになる予定です。
Android 14 では、さまざまなアプリが同時に動作する方法を最適化し、システムの健全性やバッテリー駆動時間を向上させ、エンドユーザー エクスペリエンスを洗練する作業を続けています。
WiFi が利用できるときに大きなファイルをダウンロードする場合など、一部のバックグラウンド動作は必要以上に複雑になっています。アプリ開発をシンプルにし、ユーザー エクスペリエンスの向上につなげるため、この動作を標準パスで実現できるように作業しています。また、フォアグラウンド サービスの使用方法を厳格化するとともに、特に優先度が高いユーザー向けタスクのみに限定することで、Android のリソース消費とバッテリー駆動時間を改善します。
Android 14 では、既存の Android API (フォアグラウンド サービス (英語) と JobScheduler (英語))を変更し、ユーザーが開始するデータ転送 (英語) の新機能などを追加しています。また、フォアグラウンド サービスのタイプ (英語) の宣言要件を更新します。ユーザーが開始するデータ転送 (英語) ジョブを使うことで、ユーザーが開始するダウンロードやアップロードを簡単に管理できるようになります。Wi-Fi のみでダウンロードするといった制約が必要な場合は、特に便利です。フォアグラウンド サービスのタイプ (英語) の宣言要件により、アプリのバックグラウンド動作の意図をはっきりと定義でき、フォアグラウンド サービスに適したユースケースも明確になります。さらに、こういった API が適切に利用されるようにするため、Google Play にも新しいポリシーを導入する予定です。詳細は近日中にお伝えします。
内部ブロードキャスト システムにいくつかの最適化を適用し、バッテリー駆動時間と応答の速さを改善しています。ほとんどの最適化は Android の内部処理に関連することなので、アプリへの影響はありません。ただし、アプリがキャッシュに保存された状態で、コンテキスト登録されたブロードキャストを受け取る場合は調整しています。コンテキスト登録されたレシーバーへのブロードキャストは、キューに格納され、キャッシュに保存された状態から抜けたときにアプリに配信される場合があります。さらに、BATTERY_CHANGED (英語) のように、コンテキスト登録されたブロードキャストが繰り返される場合は、アプリがキャッシュに保存された状態から抜けたときに、最後の 1 つのブロードキャストに統合されてから配信されることがあります。
正確なアラームは、バッテリー駆動時間などのデバイスのリソースに重大な影響を与える可能性があります。そこで Android 14 では、Android 13 以降 (SDK 33 以降) をターゲットとした時計やカレンダー以外のアプリが新規インストールされた場合、ユーザーに SCHEDULE_EXACT_ALARM (英語) という特別な権限をリクエストしてからでないと、正確なアラーム設定 (英語) ができなくなります。インテントを使ってアプリから設定ページを開き、この権限を切り替えてもらうこともできますが、ユースケースを評価し、可能であれば柔軟にスケジュール設定できる別の方法 (英語) を使うことをおすすめします。
Android 13 以降 (SDK 33 以降) をターゲットとした時計やカレンダーのアプリが、中核となるワークフローで正確なアラームを使う場合は、標準の権限である USE_EXACT_ALARM (英語) を宣言できます (インストール時に付与されます)。マニフェストでこの権限が宣言されたバージョンのアプリは、ポリシーの文言に基づいて適格性が認められない限り、Google Play ストアに公開できません。
ユーザー補助の強化や国際化機能など、Android ユーザーが個々のニーズに合わせて動作をチューニングできるようにする作業を継続しています。
Android 14 より、フォントを 200% まで拡大できるようになります。これまで、Pixel デバイスの最大フォントサイズは 130% でした。
テキストが大きくなりすぎる問題を緩和するため、Android 14 以降では、ノンリニアなフォント拡大曲線が自動的に適用されます。これにより、すでに十分大きくなっているテキストは、小さなテキストと同じ比率で拡大されなくなります。
Android 14 では、[Accessibility] > [Display size and text] 設定にある [Font size] オプションで最大フォントサイズを設定してアプリの UI をテストしてください。調整した大きなテキストサイズの設定が UI に反映し、テキストが切れていないことを確認してください。その他のベスト プラクティスはドキュメント (英語) で説明しています。
LocaleManager.setOverrideLocaleConfig (英語) でアプリの localeConfig を動的に更新すると、Android の設定でアプリ別の言語リストに表示される言語セットをカスタマイズできます。これにより、地域別に言語リストをカスタマイズしたり、A/B テストを実施したり、サーバーサイドからローカライズされたプッシュ通知を送るために最新の言語 / 地域を提供したりできます。
IME は LocaleManager.getApplicationLocales (英語) を使って現在のアプリの UI 言語を確認できるので、キーボードの言語を更新できます。
Grammatical Infection API (英語) を使うと、文法的性のある言語の話者に対応しやすくなります。次に例を示します。
男性形 : “Vous êtes abonné à...”
女性形 : “Vous êtes abonnée à…”
中性形 : “Abonnement à…activé”
文法的性は言語に固有で、英語以外の一部の言語で簡単に言い換えられない場合があります。この新しい API を使うと、文字列単位で適用しなければならない ICU の SelectFormat よりも少ない作業量で利用者の性別 (話の対象ではなく、UI を見ている人) に対応できます。
対象言語で両方の文法的性で語形変化した翻訳を追加し、この API を組み込むだけで、パーソナライズした翻訳を表示できます。
Android 14 をターゲットとするアプリで動的に Context.registerReceiver() (英語) を使う場合、それを「exported」として扱うか「unexported」として扱うかを指定する必要があります。これは、以前のリリースから継続して行っているマニフェストレベルの作業の一環です。詳細についてはこちら (英語) を参照してください。
悪意のあるアプリによってインテントが盗聴されるのを防ぐため、Android 14 をターゲットとするアプリでは、パッケージを指定しないインテントを内部的に送信する操作が制限されます。詳細についてはこちら (英語) を参照してください。
動的コード読み込み (DCL) は、マルウェアやエクスプロイトの侵入経路になります。動的にダウンロードされた実行ファイルが意図せずに改ざんされ、コード インジェクションが発生する可能性があるからです。Android 14 をターゲットとするアプリで動的読み込みを行うには、ファイルを読み取り専用にする必要があります。詳細についてはこちら (英語) を参照してください。
多くのマルウェアは、新しいバージョンの Android に導入されたセキュリティやプライバシーの保護を回避しようとして、古い API レベルを狙います。これを防ぐため、Android 14 以降では targetSdkVersion が 23 未満のアプリをインストールできなくなります。このバージョンが選ばれた理由は、targetSdkVersion 22 を使って 2015 年に Android 6.0(API レベル 23)で導入されたランタイム権限モデルを回避するマルウェア アプリがあるからです。
targetSdkVersion が 23 未満のアプリがインストールされているデバイスを Android 14 にアップグレードした場合、アプリはインストールされたままになります。
古い API レベルをターゲットにしたアプリをテストする場合は、次の ADB コマンドを利用できます。
adb install --bypass-low-target-sdk-block FILENAME.apk
先日、新しい Jetpack API である Credential Manager (英語) のアルファ版リリースについてお知らせしました。これを使うと、ユーザーの認証操作をシンプルにしつつ、パスキーをサポートしてセキュリティを強化できます。パスキーはフィッシングによって侵害される可能性があるパスワードなどの認証要素に代わるもので、安全性を大幅に向上することができるうえ、ユーザーの利便性も向上します (生体認証とスワイプだけで、どのデバイスでも安全にログインできます)。詳細についてはこちら (英語) を参照してください。
毎回のプラットフォーム リリースでは、アプリの互換性を優先することで、高速でスムーズなアップデートを実現できるように努力しています。Android 14 では、アプリに関連する変更のほとんどをオプトインできるようにすることで、十分に時間を取ってアプリに必要な変更を追加できるようにしています。また、対応に必要な時間を減らすために、ツールやプロセスもアップデートしています。
OpenJDK 17 サポート - 今回のプレビューで、300 個の OpenJDK 17 クラスにアクセスできるようになります。今後のデベロッパー プレビューで Java 17 の言語機能をフル活用できるようにするため、懸命な作業を続けています。これには、レコードクラス、複数行文字列、instanceof のパターンマッチングなどが含まれます。Google Play システム アップデート (Project Mainline / 英語) のおかげで、6 億台以上のデバイスがこの変更を含む最新の Android ランタイム (ART) アップデートを受け取れるようになっています。これは、アプリの一貫性を向上させ、さまざまなデバイスの環境を安全にし、プラットフォーム リリースとは別に新機能を提供できるようにする作業の一環です。
変更点のテストやデバッグの簡易化 - アプリに影響を与える可能性がある変更点を簡単にオプトインしてテストできるように、今年も多くの変更点をトグルスイッチにより切り替え可能にしていきます。この切り替えを利用すると、それぞれの変更を開発者向けオプションや adb から強制的に有効化、無効化できます。詳細はこちら (英語) をご覧ください。
Platform Stability マイルストーン - アプリの互換性作業を計画する時間を長くとれるように、昨年と同様にかなり早いタイミングで Platform Stability マイルストーンをお知らせします。このマイルストーンでは、最終版の SDK や NDK API、内部 API やアプリに関連するシステム動作の最終版を配信します。2023 年 6 月に Platform Stability に到達することを想定しています。その後、数週間の最終テストの期間を経て、公式リリースを迎える予定です。詳しいリリース スケジュールはこちら (英語) をご覧ください。
Android 14 の利用を開始する
デベロッパー プレビューには、Android 14 の機能を試し、アプリをテストしてフィードバック (英語) を提供するために必要なすべてのものが含まれています。タブレットや折りたたみ式でアプリのテストを始める一番簡単な方法は、Android Studio SDK Manager (英語) の最新プレビュー版で、タブレットまたは折りたたみ式設定の Android Emulator を使うことです。スマートフォンの場合は、システム イメージ (英語) を Pixel 7 Pro、Pixel 7、Pixel 6a、Pixel 6 Pro、Pixel 6、Pixel 5a 5G、Pixel 5、Pixel 4a (5G) のいずれかのデバイスに書き込むと、すぐに始めることができます。Pixel デバイスをお持ちでない方は、Android Studio で 64 ビット システム イメージと Android Emulator を使うことができます。
Android 14 に向けてより良い開発体験をするには、Android Studio Giraffe (英語) (または Giraffe 以降の最新版) の最新プレビュー版を使うことをおすすめします。セットアップ (英語) の完了後にやるべきことは、以下のとおりです。
新機能や新 API を試す - 早い段階のデベロッパー プレビューでは、皆さんからのフィードバックが不可欠です。問題は、フィードバック ページ (英語) のトラッカーで報告してください。
現在のアプリの互換性をテストする - アプリが Android 14 のデフォルト動作の変更による影響を受けるかどうかを確認し、Android 14 を実行しているデバイスやエミュレータにアプリをインストールして幅広くテストします。
変更をオプトインしてアプリをテストする - Android 14 では、動作の変更点はターゲットに新しいプラットフォームを指定した場合にのみアプリに影響するようになっており、それをオプトインすることができます。変更点を早めに把握し、評価することが重要です。簡単にテストできるように、変更点のオン、オフを個々に切り替え (英語) られるようになっています。
プレビュー システム イメージと SDK は、Android 14 のリリース サイクル期間を通じて定期的にアップデートされる予定です。このプレビューの第 1 弾リリースは、デベロッパーのみを対象としています。日常的な使用やユーザーの使用を想定したものではありません。そのため、手動のダウンロードのみで入手できます。プレビュー ビルドを手動でインストールすると、今後のプレビューやベータ版の無線 (OTA) アップデートをすべて自動的に受け取ります。詳細についてはこちら (英語) を参照してください。
デバイスをワイプせずに Android 13 QPR ベータ版プログラムから Android 14 デベロッパー プレビュー プログラムに移行したい場合は、今のうちにデベロッパー プレビュー 1 に移行することをおすすめします。移行しない場合、Android 13 ベータ版のビルド日付が新しくなった場合に、データをワイプせずに Android 14 デベロッパー プレビューに直接移行できなくなる時間帯が発生する可能性があります。
ベータ版リリースに近づいたら、ユーザーも招待して Android 14 を試していただく予定です。その際には、Android ベータ版プログラムへの登録もオープンします。現在のところ、Android 14 のベータ版プログラムはまだ利用できない点に注意してください。
詳細な情報については、Android 14 デベロッパー サイト (英語) でご覧いただけます。
Java および OpenJDK は Oracle および /またはその関連会社の商標または登録商標です。