この記事は Andrew Flynn & Jon Boekenoogen による Android Developers Blog の記事 " Play Time with Jetpack Compose " を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
2020 年、Google Play ストアのエンジニアリング チームのリーダー陣は、ストアのショーウィンドウにあたる部分全体の技術スタックを再構築するという大きな決断を下しました。既存のコードは 10 年以上前のもので、無数の Android プラットフォーム リリースや機能アップデートを経て、大きな技術的負債を抱えていました。デベロッパーの生産性やストア自体のユーザー エクスペリエンスとパフォーマンスに悪影響を与えることなく、数百名のエンジニアが開発できるようにスケールアップできる新しいフレームワークが必要でした。
ネットワーク レイヤからピクセルのレンダリングに至るまで、ストアのあらゆるものを更新するため、複数年にわたるロードマップを作成しました。その一環として、インタラクティブ性とユーザーの快適さを目標とした最新の宣言型 UI フレームワークも採用したいと考えました。さまざまな選択肢を分析した結果、まだアルファ版にもなっていなかった Jetpack Compose を使うという、(当時としては)大胆な決断をすることになりました。
それ以来、Google の Google Play ストアチームと Jetpack Compose チームは、ストアの具体的なニーズを満たせるバージョンの Jetpack Compose を実現するため、非常に密接な連携のもと、リリースや改善を重ねてきました。この記事では、移行のアプローチやその過程で明らかになった課題や利点について説明し、多くのエンジニアが関わるアプリで Compose を採用するとはどういうことかについて共有したいと思います。
新しい UI レンダリング レイヤとして Jetpack Compose を検討するときの最優先事項は次の 2 つでした。
Google Play ストアはすでに 1 年以上 Jetpack Compose で UI のコードを記述しており、Jetpack Compose によって UI 開発がこれまで以上にシンプルになっていることを実感しています。
特にうれしいのは、UI の記述に必要なコードがかなり減ったことで、場合によってはコードが最大 50% 少なくなったことです。これが実現できたのは、Compose が宣言型 UI フレームワークであることに加え、簡潔な Kotlin を活用できるからです。カスタムの描画やレイアウトを作成する際も、ビューをサブクラス化してたくさんのメソッドをオーバーライドする必要はなく、シンプルな関数呼び出しで実現できます。
評価テーブルを例に説明しましょう。
ビューを使う場合、このテーブルは以下の要素で構成されます。
Compose を使う場合、このテーブルは以下の要素で構成されます。
@Composable
「そうは言っても、ライブラリの依存関係でビューが提供される場合どうすればいいのか」と疑問に思う方もいらっしゃるかもしれません。たしかに、すべてのライブラリ所有者が Compose ベースの API を実装しているとは限りません。私たちが最初に移行をしたときは特にそうでした。しかし、Compose では ComposeView と AndroidView API によって、ビューを簡単に利用できる相互運用性が実現されています。ExoPlayer (英語) や YouTube の Player などの人気ライブラリは、この方法によって問題なく統合できました。
Google Play ストアチームと Jetpack Compose チームは、Compose がビュー フレームワークと同じくらい速くジャンクなしで動作できるようにするため、密接に連携しました。Compose は Android フレームワークの一部というよりはアプリにバンドルされるものなので、これは難しい要件でした。画面上の個々の UI コンポーネントのレンダリングは高速でしたが、アプリが Compose フレームワーク全体をメモリに読み込むために必要な時間をすべて合わせれば、かなりの時間になりました。
Google Play ストアで Compose を採用するうえで、特に大きなパフォーマンス改善に貢献したのはベースライン プロファイルの開発でした。以前から利用できたクラウド プロファイルもアプリの起動時間の短縮に役立ちますが、これが利用できるのは API 28 以降に限られ、頻繁な周期で(毎週)リリースされるアプリにとっては効果的ではありません。この問題に対応するため、Google Play ストアチームと Android チームが連携して、ベースライン プロファイルの開発にあたりました。ベースライン プロファイルは、デベロッパーが定義し、アプリの所有者が指定してバンドルできるプロファイルです。アプリに同梱され、クラウド プロファイルとは完全な互換性があり、アプリレベルに限定して定義することも、ライブラリレベルで定義することもできます(Compose を採用すると、このプロファイルもついてきます!)。ベースライン プロファイルをロールアウトすることで、Google Play ストアの検索結果ページの最初のレンダリング時間は 40% 短縮されました。これは大きな成果です。
Compose は、特にスクロールの際に効率的なレンダリングをします。その中核をなす仕組みとなっているのが、UI コンポーネントの再利用です。Compose は、スキップできることがわかっている Composable の再コンポーズをできる限りスキップしようとします(不変である場合など)。しかし、すべてのパラメータが @Stable (英語) アノテーション要件を満たしている場合は、デベロッパーが強制的に Composable をスキップ可能にすることもできます。Compose のコンパイラでも、特定の関数をスキップできない理由を説明した便利なガイドが提供されています。Google Play ストアでは、スクロールが発生する状況で頻繁に再利用される UI コンポーネントを作りましたが、不要な再コンポーズが積み重なってフレーム時間が足りなくなり、ジャンクにつながるという状況が発生しました。そこで、デバッグ設定でもそのような再コンポーズを簡単に見つけることができるように、Modifier を作成しました。この手法を UI コンポーネントに適用することで、ジャンクを 10-15% 減らすことができました。
@Stable
Modifier
Modifier による再コンポーズの視覚化の例。青(再コンポーズなし)、緑(1 回の再コンポーズ)
Google Play ストア アプリの Compose を最適化するうえで、もう 1 つの重要な要素となったのが、アプリ全体の一連の移行戦略を詳細に作成したことです。最初に組み込みの実験をしたとき、「二重スタック問題」に直面しました。これは、1 つのユーザー セッション内で Compose とビューの両方のレンダリングを実行すると、特にローエンドのデバイスにおいて、メモリに大きな負荷がかかるという問題です。これはコードを同じページに展開した場合だけでなく、異なるスタックのそれぞれに 2 つのページ(Google Play ストアのホームページと検索結果ページなど)が存在する場合にも発生しました。これに起因する起動の遅さを解消するには、ページを Compose に移行する順番やスケジュールについて、具体的な計画を立てることが重要でした。さらに、アプリが完全に移行されるまでの穴埋めとして、よく使うクラスの短期的なプリウォーミングを追加することも有用であることがわかりました。
Compose は Android フレームワークにバンドルされていないので、Google Play ストアチームが Jetpack Compose に直接的に関与する手間も少なくすみました。その結果、短い時間でデベロッパーに役立つ改善をすることができました。Jetpack Compose チームとの共同作業で、LazyList のアイテムタイプのキャッシュのような機能追加をしたり、無駄なオブジェクトの割り当てなどに関する簡単な修正をすばやくしたりすることもできました。
Google Play ストアで Compose を採用したことで、チームのデベロッパー満足度は大幅に上昇し、コードの品質と健全性も大きく向上しました。Google Play ストアの新機能は、すべてこのフレームワーク上に構築されています。Compose はアプリの速度向上や利便性に貢献しています。Compose への移行戦略の性質上、APK サイズの変化やビルド速度は細かく測定できませんでしたが、可視化できたものについてはすべて順調に進んでいます。
Compose は Android UI 開発の未来です。Google Play ストアの事例から言うと、これ以上すばらしいものはありません!
この記事は Florina Muntenescu による Android Developers Blog の記事 " Jetpack Compose 1.1 is now stable! " を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
私たちは、Android の最新ネイティブ UI ツールキット、Jetpack Compose のロードマップを実現する作業を続けており、2022 年 2 月 9 日にバージョン 1.1 をリリースしました。今回のリリースには、フォーカス処理の向上、タッチ ターゲットのサイズ調整、ImageVector のキャッシュ、Android 12 のストレッチ オーバースクロールのサポートなどの新機能が含まれています。さらに、Compose 1.1 では、これまで試験運用版だったたくさんの API が安定版になっているほか、より新しいバージョンの Kotlin もサポートされています。すでにサンプル、Codelab、Accompanist ライブラリもアップデートしており、Compose 1.1 と合わせて利用できるようになっています。
Compose 1.1 に ImageVector のキャッシュ機能を導入し、パフォーマンスを大幅に向上させています。painterResource API にキャッシュ機構を追加しており、解析した ImageVector のすべてのインスタンスを、与えられたリソース ID やテーマと合わせてキャッシュできるようになっています。このキャッシュは、構成が変わると無効になります。
Compose 1.0 と比較した場合、マテリアル コンポーネントのレイアウトでは、マテリアルのアクセシビリティ ガイドライン(英語)に記載されているタッチ ターゲット サイズ(英語)を満たすようにレイアウト領域が拡大されます。たとえば、RadioButton のタッチ ターゲットは、最小サイズの 48x48 dp に拡大されます。RadioButton のサイズをそれ以下に設定した場合も同様です。これにより、Compose のマテリアルとマテリアル デザイン コンポーネントの動作が一致し、ビューと Compose が共存しても、動作の一貫性が保たれます。また、この変更により、Compose のマテリアル コンポーネントを使って UI を作成すれば、タッチ ターゲットのアクセシビリティ最低要件が確実に満たされるようになります。
この変更によって既存のレイアウト ロジックが壊れる場合は、LocalMinimumTouchTargetEnforcement (英語) を false に設定することで、この動作を無効化できます。ただし、アプリのユーザビリティが低下する可能性があることを認識したうえで、慎重に利用するようにしてください。
RadioButton のタッチ ターゲットの更新
左 : Compose 1.0、右 : Compose 1.1
いくつかの API が試験運用版から安定版になっています。主なものを紹介します。 (以下、リンク先はすべて英語)
Compose に新機能を導入する作業も続いています。いくつかの主な機能を紹介します。
@OptIn (英語) を使うと、新しい API を試すことができます。ぜひフィードバックをお願いします!
注 : Compose 1.1 を使うには、Kotlin 1.6.10 が必要です。詳しくは、Compose と Kotlin の互換性マップをご覧ください。
次に登場するのは何でしょうか。現在検討中または作業中の機能は、更新版のロードマップで確認できます。たとえば、遅延項目アニメーション、ダウンロード可能フォント、移動可能コンテンツなどです。
Jetpack Compose は安定版で、本番環境で利用できます。また、要望が寄せられた機能を追加する作業も続いています。すでに多くのアプリで Jetpack Compose が本番環境として使われ始めているのを見て、とてもうれしく思っています。皆さんが開発したアプリを見るのが、待ち遠しくてたまりません。
アルファ版やベータ版を通して Issue Tracker (英語) にバグレポートや機能リクエストをお送りいただき、大変感謝しています。Compose の改善や、皆さんに必要な API を作るうえで役立っています。Compose をよりよいものにするために、今後もフィードバックをお願いします!
Compose をお楽しみください!
この記事は Maru Ahues Bouza による Android Developers Blog の記事 " Beta 1 Update for 12L feature drop! " を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
昨年 10 月の Android Dev Summit では、タブレット、折りたたみ式、Chromebook などの大画面デバイスが成長を続けていることをお知らせしました。こういったデバイスで、新しい Jetpack API やツール、ガイドを通して優れたアプリ エクスペリエンスを構築しやすくする取り組みについてもお話ししました。さらに、大画面向けに構築された Android 12 のフィーチャー ドロップである 12L のデベロッパー プレビューについても紹介しました。
12L では、大画面向けのシステム UI を最適化して磨きをかけ、マルチタスクをさらに強力で直感的なものにし、何もしなくても見栄えのよいアプリになるように互換性サポートを改善しています。12L には、いくつかのデベロッパー向け新 API が含まれています。たとえば、空間オーディオやドラッグ&ドロップ関連のユーザー補助の改善などです。
12L の最初のベータ版は昨年 12 月にリリースしました。このフィーチャー ドロップは、今年初めに公開する予定です。皆さんのアプリを対応させるうえで、テストやフィードバックにご利用ください。Android Studio で Android エミュレータを設定すると、新しい大画面機能を試すことができます。12L はスマートフォンにも対応しています。こちらから登録すると、サポート対象の Pixel デバイスに 12L のベータ版 1 をインストールできます。Android 12 ベータ プログラムに引き続き登録している方は、自動的に 12L のアップデートを取得します。Lenovo との連携により、12L は Lenovo Tab P12 Pro タブレットでも試すことができます。利用可能なビルドやサポートに関する詳細は、Lenovo のサイト(英語) をご覧ください。
ベータ版 1 ビルドには、機能やユーザー エクスペリエンスの改善に加え、最新のバグの修正、最適化、2021 年 12 月のセキュリティ パッチが含まれています。デベロッパー向けの機能としては、すでに API は確定しているので、ベータ版 1 には正式版の 12L API(API レベル 32)、アップデートされたビルドツール、テスト用のシステム イメージが含まれています。つまり、アプリで 12L の機能をテストするために必要なものがすべてそろいます。
12L では、通知、クイック設定、ロック画面、概要、ホーム画面など、大画面デバイスの UI を洗練させることに集中的に取り組んでいます。たとえば、600dp 以上の画面では、スペースを有効活用するため、通知シェードやロック画面などのシステム領域で新しい 2 列レイアウトを利用します。
2 列レイアウトでは表示内容が多くなり使いやすさが向上
マルチタスクもさらに強力で直感的なものに進化しています。12L には、大画面用の新しいタスクバーが含まれており、ユーザーは即座にお気に入りのアプリに切り替えたり、ドラッグ&ドロップして分割画面モードに切り替えたりすることができます。なお、Android 12 以降では、アプリがサイズ変更可能かどうかに関係なく、どんなアプリでも分割画面モードで起動できます。分割画面モードでアプリをテストすることを忘れないようにしましょう。
アプリをドラッグ&ドロップして分割画面モードに
さらに、互換性モードの外観と安定性を改善し、レターボックス表示の際のユーザー エクスペリエンスを向上させるとともに、デフォルトでアプリの見栄えがよくなるようにしています。アプリで大画面向けの最適化が済んでいない場合でも、新しいレターボックス表示のテストは行うようにしてください。
大画面向けにアプリを最適化する際に、優れたユーザー エクスペリエンスを簡単に実現できる最新の API やツールをいくつか用意します。
以上の機能の詳しい内容や、その他の API やツールについては、大画面デベロッパー リソースをご覧ください。
12L フィーチャー ドロップは今年始めにデバイスに配信される予定なので、今がアプリを大画面向けに最適化する絶好の機会です。デベロッパーの皆さんには、さまざまなサイズのウィンドウの分割画面モードで、アプリの動作を確認しておくことを強くおすすめします。まだアプリを最適化していない方は、さまざまな画面の向きでどのように表示されるかを確認し、必要に応じて新しい互換性モード関連の変更点を試してみてください。
大画面機能を試してみる一番簡単な方法は、折りたたみ式またはタブレットの設定で Android Emulator を使うことです。こちらにすべての設定手順が記載されているので、ご覧ください。
大画面デバイスに 12L を書き込むこともできるようになっています。Lenovo との連携により、Lenovo Tab P12 Pro でも 12L のプレビュー ビルドを試すことができます。現時点で、Lenovo はデベロッパー プレビュー 1 ビルドを提供しています。今後数週間のうちにアップデートが公開される予定です。利用可能なビルドやサポートなど、完全な情報は Lenovo の 12L プレビュー サイト (英語) をご覧ください。
12L はスマートフォンにも適用されます。小さな画面では大画面機能を確認できませんが、ぜひこのフィーチャー ドロップによる最新の改善点をお試しいただければと思います。サポート対象の Pixel デバイスをこちらから登録すると、最新の 12L ベータ版アップデートを OTA (無線)で受け取ることができます。Android 12 ベータ プログラムに引き続き登録している方は、自動的に 12L アップデートを受け取ります。
12L の詳細やリリース スケジュールは、12L デベロッパー サイトをご覧ください。問題点やリクエストはこちらから報告できます。いつものように、皆さんのフィードバックをお待ちしています!
Reviewed by Tamao Imura - Developer Marketing Manager, Google Play
この記事は Marcel Pintó Biescas による Android Developers Blog の記事 " Announcing Jetpack Glance Alpha for app widgets " を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
Android 12 では、多くの Android ユーザーにとって重要な機能であるアプリ ウィジェットを刷新し、より便利で美しく、そして見つけやすくしています(84% のユーザーが少なくとも 1 つのウィジェットを使っています)。先日、アプリ ウィジェットの構築をさらに容易にするために、Jetpack Glance の最初のアルファ版をリリースしました。Jetpack Glance は、Jetpack Compose のランタイムをベースに作られた新たなフレームワークで、ホーム画面などで利用できるアプリ ウィジェットをすばやく簡単に構築できるように設計されています。
ぜひ試してみて、フィードバックをお寄せください。
Glance は、Jetpack Compose と同じように最新の宣言型 Kotlin API を提供し、美しくレスポンシブなアプリ ウィジェットを少ないコードで実現します。
Glance の “Hello World” ウィジェット サンプル
class GreetingsWidget(private val name: String): GlanceAppWidget() { @Composable override fun Content() { Text(text = "Hello $name") }} class GreetingsWidgetReceiver : GlanceAppWidgetReceiver() { override val glanceAppWidget = GreetingsWidget("Glance")}
class GreetingsWidget(private val name: String): GlanceAppWidget() {
override fun Content() {
Text(text = "Hello $name")
}
class GreetingsWidgetReceiver : GlanceAppWidgetReceiver() {
override val glanceAppWidget = GreetingsWidget("Glance")
Glance は、“Glanceables” (一目で把握できる)な操作を作成する Composable の基本セットを提供します。今回はまず、アプリ ウィジェットのコンポーネントを提供しますが、今後さらに追加する予定です。Glance は、Jetpack Compose ランタイムを使って Composable (英語) を実際の RemoteView (英語) に変換し、それをアプリ ウィジェットに表示します。
図: Glance の構造
つまり、Glance を使うには Compose を有効にする必要があります。ランタイム、グラフィック、ユニット UI の各 Compose レイヤーを使用しますが、Jetpack Compose の他の既存の UI 要素を直接使うことはできません。ただし、アプリの状態などのロジックは、Glanceables UI を作成する際に共有できます。
今回の初回リリースでは、アプリ ウィジェットを構築するためのメイン API を導入します。また、既存の RemoteView との相互運用性が提供されます。
以下に、このライブラリが提供する内容の概要をまとめます。
GlanceAppWidget
GlanceAppWidgetReceiver
Box
Row
Column
Text
Button
LazyColumn
Image
Spacer
GlanceModifier
Action
actionStartActivity
actionRunCallback
actionStartService
actionStartBroadcastReceiver
ActionParameters
SizeMode.Single
SizeMode.Exact
SizeMode.Responsive
GlanceStateDefinition
GlanceAppWidget state
LocalContext
LocalState
LocalGlanceId
LocalSize
RemoteViews
AndroidRemoteViews
現在は、デフォルト テーマや Android Studio サポートの強化など、さらなる機能の追加作業を進めています。今後の新規リリースにご期待ください。
注: minSDK は 21 ですが、現在は SDK v23 までの互換性しかサポートしていません。
クイックスタートとして、GitHub のサンプルをご覧ください。Glance は最新の安定版 Android Studio (英語) で動作しますが、Compose のランタイムを使っているので、まず Jetpack Compose ドキュメントの手順に従ってセットアップを行ってください。
また、さらに詳しい説明を見たい方は、AndroidX リポジトリのデモをご覧ください。
ResponsiveAppWidget.kt デモ
アルファ版は API に皆さんの要望を反映させるチャンスなので、フィードバックを通して感想をお寄せください。
ぜひ Glance と Compose を使ってみてください!
この記事は Dave Burke による Android Developers Blog の記事 " 12L and new Android APIs and tools for large screens " を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
タブレット、折りたたみ式デバイス、ChromeOS デバイスを合わせると、2 億 5000 万台を超える大画面デバイスが Android を実行しています。ここ 12 か月だけでも、1 億台近くの新しい Android タブレットがアクティベートされました。これは前年比 20% の増加です。現在最も成長が著しいデスクトップ プラットフォームである ChromeOS は、92% の増加率となっていますが、さらに、折りたたみ式デバイスも急増中で、前年比 265% 以上の成長を遂げています。すべて合わせれば、Android が動作しているアクティブな大画面デバイスは 2 億 5000 万台を超えます。その勢いを受けて、このようなデバイスで動作している Android を、ユーザーにとってもデベロッパーにとってもよりよい OS にするために、私たちは努力を続けています。
そこで 2021 年 10 月 27 日 (日本時間:10 月 28 日) の Android Dev Summit (英語、動画は日本語字幕あり) では、大画面に特化した Android 12 のフィーチャー ドロップについてお知らせしました。私たちはこれを 12L と呼んでいます。併せて、大画面向けの開発を容易にするための新 API や新ツール、ガイダンスも準備しています。さらに、Google Play で行っている変更についてもお話ししました。これにより、ユーザーは大画面に最適化されたアプリをこれまで以上に簡単に見つけられるようになります。ここでは、Android の大画面向け新機能について紹介しますので、ぜひお読みください。
先月、12L のデベロッパー プレビュー を提供しました。これは今後公開する予定のフィーチャー ドロップで、Android 12 を大画面でさらに快適に使えるようにするものです。このプレビューを使って、大画面関連の新機能を試したり、自分のアプリを最適化したり、フィードバックの送信が可能です。
12L では、通知、クイック設定、ロック画面、概要、ホーム画面など、大画面向けの UI 全般を改善しました。たとえば、画面領域を有効活用するため、600dp を超える画面では、通知シェードやロック画面、その他のシステム表示を新しい 2 列レイアウトで表示します。システムアプリも最適化されます。
2 列レイアウトによって表示できる内容が増加し、さらに使いやすいものに
また、マルチタスクをこれまで以上に強力で直感的なものにしました。12L では大画面で新しいタスクバーが搭載されるので、ユーザーはすぐにお気に入りのアプリに切り替えることができます。このタスクバーのおかげで、分割画面モードもこれまで以上にわかりやすくなり、タスクバーからドラッグ&ドロップするだけで、アプリを分割画面モードで実行できるようになります。また、Android 12 以降で分割画面モードの操作性を向上させるため、アプリがサイズ変更可能かどうかにかかわらず、すべてのアプリを自動的に分割画面モードに対応させます。
アプリをドラッグ&ドロップして分割画面モードで実行
さらに、互換性モードを改善して見た目と安定性を向上させ、レターボックス表示の快適さを向上させたほか、アプリのデフォルトでの外観も改善しました。レターボックス表示は、デバイス メーカーが簡単にカスタマイズできるようになっているので、カスタムの色や処理を設定したり、はめ込むウィンドウの位置を調整したり、カスタムの角丸を適用したりできるようになっています。
Android 12 のタブレットや折りたたみ式デバイスが次にまとまって登場するタイミングに間に合うように、12L のフィーチャー ドロップは来年の早い時期にリリースする計画です。以上のような機能を大画面デバイスに導入するため、私たちは既に OEM パートナーと協力して作業を進めています。近日中に 12L のデベロッパー プレビューが Lenovo P12 Pro (日本未発表) に搭載される予定なので、ご期待ください。数か月後には、この機能がデバイスに配信されます。今から大画面向けに最適化したアプリの準備を入念にしておきましょう。
デベロッパーの皆さんには、さまざまなサイズのウィンドウの分割画面モードでアプリがどのように動作するかを確かめておくことを強くお勧めします。まだアプリを最適化していない方は、画面の向きを変えたときにどう見えるかを確認し、新しい互換性モードの変更が適用される場合はそれを試してみましょう。12L には、大画面向け機能のほかにも、いくつかのデベロッパー向けの新 API や、新しい API レベルが含まれています。アプリに互換性を破る変更が起こらないように注意しているので、アプリのターゲットを 12L にしなくても Google Play 要件を満たすことができます。
12L を使ってみたい方は、Android Studio の最新プレビュー リリースから、12L Android Emulator のシステム イメージやツールをダウンロードしてください。機能と変更点を確認してアプリをテストする領域を判断し、プレビューの概要でスケジュールやリリースの詳細をご確認ください。問題やリクエストはこちらから報告できます。そしていつものように、フィードバックは大歓迎です。
12L はスマートフォンでも利用できますが、ほとんどの新機能は小さな画面では確認できません。現在、私たちはタブレット、折りたたみ式デバイス、ChromeOS デバイスに重点的に対応しています。今後のプレビューでは、Pixel デバイス向けに Android ベータ版への登録をオープンする予定です。詳しくは、developer.android.com/12L をご覧ください。
どんな画面にも適応する完全にアダプティブなアプリを作り始める時です。そして、それを今まで以上に簡単に実現できるようにしています。OS や Play でアプリの変更に対応できるように、デベロッパー プレビューと併せて API やツール、ガイダンスのアップデートを公開します。
アダプティブ UI をサポートするための第一歩は、小さな画面と大きな画面の両方でうまく動作するアプリを設計することです。私たちは、アプリの UI をあらゆる画面サイズに対応させる際に役立ててもらうため、新しいマテリアル デザインのガイダンス (英語) の作成を進めてきました。このガイダンスは、エコシステムでよく使われている一般的なレイアウト パターンをカバーしているので、さまざまなアイデアが得られるだけでなく、作業を加速することにもつながるはずです。
マテリアル デザインのガイドライン、アダプティブ UI パターン
最高のナビゲーション エクスペリエンスをユーザーに提供するには、ユーザーが使うデバイスのウィンドウ サイズ クラスに合わせたナビゲーション UI を提供する必要があります。私たちが推奨するナビゲーション パターンには、コンパクトな画面(compact)ではナビゲーション バー (英語) を使う、中程度(medium)以上の画面幅(600dp 以上)のデバイスクラスではナビゲーション レール (英語) を使う、などがあります。新たに公開したマテリアル デザインのガイダンス (英語) には、広い画面幅(expanded)のデバイス向けに、いくつかの大画面レイアウトのアイデアが掲載されています。たとえば、SlidingPaneLayout を使って実装できるリスト / 詳細構造などです。ガイダンスを参照して、ビューと Compose でアダプティブ UI 向けのナビゲーションを実装する方法をご確認ください。
フラグメントを使っている既存アプリに大画面に最適なレイアウトを適用する場合、ナビゲーション パターンを更新して SlidingPaneLayout を使うのはすばらしい方法です。しかし、多くの皆さんが複数のアクティビティに基づいたアプリを作っていることは承知しています。そういったアプリでは、Jetpack WindowManager 1.0 ベータ版 03 で新しくリリースしたアクティビティ埋め込み API を使うと、TwoPane ビューなどの新しい UI パラダイムに簡単に対応できます。現在、SlidingPaneLayout をアップデートしてこの API をサポートする作業を進めています。今後数か月間のアップデートに注目してください。
Jetpack Compose を使うと、大画面や多様なレイアウトを対象にした開発が楽になります。Compose の採用を始めているなら、大画面向けの最適化を行う絶好のチャンスです。
Compose は宣言型 UI ツールキットです。すべての UI をコードで記述するので、UI が利用できるサイズにどう適応すべきかを実行時に判断するのは簡単です。Compose がアダプティブ UI の開発に特に向いているのはそのためで、画面サイズやコンポーネントの違いによる UI の変更にとても簡単に対処できます。Compose でアダプティブ レイアウトを構築するためのガイドでは、知っておくべき基本的な事項について説明しています。
Jetpack WindowManager ライブラリを使うと、下位互換性のある形でアプリのウィンドウを操作し、すべてのデバイスを対象としたレスポンシブな UI を開発できます。新機能は以下のとおりです。
アクティビティを埋め込むと、たとえばリスト / 詳細パターンなど、複数のアクティビティを一度に表示することで、大画面で利用できるようになる広い表示領域を有効活用できます。その際、アプリのリファクタリングはほとんど、あるいはまったく必要ありません。並べるか重ねるかなど、アプリにどのようにアクティビティを表示するかは、皆さんが決定します。具体的には、XML 構成ファイルを作成するか、Jetpack WindowManager API を呼び出します。あとはシステムが対応して、作成した構成に基づいて表示方法を決めてくれます。
アクティビティの埋め込みは、折りたたみ式デバイスでもシームレスに動作します。デバイスを折りたたんだり広げたりすると、それに応じてアクティビティが重なったり並んだりします。アプリで複数のアクティビティを使っている方は、アクティビティの埋め込みを使って大画面デバイスでのユーザー エクスペリエンスを向上させることができます。アクティビティ埋め込み API は、Jetpack WindowManager 1.0 ベータ版 03 以降のリリースで試すことができます。詳しくはこちらをご覧ください。
Jetpack WindowManager でアクティビティを埋め込む
ウィンドウ サイズ クラスは、綿密に検討されたビューポートの一連のブレークポイントで、サイズ変更可能なアプリでのレイアウトの設計、開発、テストに利用できます。ウィンドウ サイズ クラスのブレークポイントは、compact(コンパクト)、medium(中程度)、expanded(広い)の 3 つのカテゴリに分かれています。これらは、エコシステムのデバイスの大部分を表しつつ、レイアウトのシンプルさと特異なユースケースにアプリを最適化できる柔軟性との間でバランスをとるように設計されています。WindowSizeClass API は、近日中に Jetpack WindowManager 1.1 で公開される予定です。これにより、レスポンシブ UI の構築がさらに簡単になります。詳しくはこちらをご覧ください。
Jetpack WindowManager のウィンドウ サイズ クラス
WindowManager では、折り目やヒンジなど、さまざまなウィンドウ形状に対応した一般的な API サーフェスも提供されます。折りたたみ対応のアプリでは、折り目やヒンジの部分を避けてウィンドウのコンテンツを表示したり、折り目やヒンジの部分を自然なセパレータとしてうまく活用したりできます。アプリを折りたたみ対応にする方法は、こちらのガイドをご覧ください。
Android アプリは、あらゆるデバイス、そしてあらゆるカテゴリに適応できるように構築すべきです。そこで、Android Studio 全体を対象として、UI やレイアウトの設計、開発、テストを行うたくさんのツールに、リファレンス デバイスを導入します。リファレンス デバイスは 4 つあり、それぞれスマートフォン、大型折りたたみ式デバイスの内側ディスプレイ、タブレット、デスクトップを表します。マーケットのデータを分析して設計したもので、人気のデバイスや急成長中のセグメントを表しています。また、リファレンス デバイスを規定したことで、新しい WindowSizeClass のブレークポイントを使ってアプリがさまざまなよくあるブレークポイントの組み合わせに対応して動作することを確認できるようになります。そのため、アプリができる限り多くのユースケースをカバーすることを保証できます。
リファレンス デバイスの定義
大画面向け UI の対応を始める際に、どこから手を付けてよいかわからない方もいらっしゃるかもしれません。その場合は、まず新しいツールを使って、大画面デバイスで起こりうる問題を確認しましょう。Android Studio Chipmunk では、レイアウト検証によって先回りで UI について警告や提案を行ってくれる新しいビジュアル lint チェックツールを開発しています。どのリファレンス デバイスが影響を受けるかもわかるようになっています。
リファレンス デバイスの各クラスが表示されたレイアウト検証ツール
ランタイムでアプリをテストする場合、Android Studio Chipmunk (英語) に搭載されているサイズ変更可能な新しいエミュレータ構成を使うことができます。サイズ変更可能なエミュレータを使うと、4 つのリファレンス デバイス(スマートフォン、折りたたみ式、タブレット、デスクトップ)をすばやく切り替えることができます。これにより、設計時にレイアウトを検証したり、ランタイムで動作をテストしたりする操作が簡単になります。どちらの作業にも、同じリファレンス デバイスを使うことができます。サイズ変更可能なエミュレータを新規作成するには、Android Studio の Device Manager を使って新しい仮想デバイスを作成し、Resizable デバイス定義と Android 12L(Sv2)システム イメージを選択します。
サイズ変更可能な Android Emulator
タブレット、折りたたみ式、ChromeOS の各デバイスに最適なアプリを簡単に探せるようにするため、ユーザーのデバイスに最も適したアプリを目立たせるように Play を変更します。
現在、それぞれのアプリの品質を大画面アプリ品質ガイドライン (英語) に照らして評価する新たなチェックを追加する作業を行っています。これにより、デバイスに最適なアプリが目立つようになります。Play ストアで大画面のユーザーが大画面に最適化されていないアプリを表示した場合、そのアプリのストア掲載情報ページに通知を表示する予定です。
加えて、既にお知らせしたように、アプリの評価にも大画面専用の評価を導入し、大画面デバイスでアプリがどう動作するかをユーザーが評価できるようにします。以上の変更は来年に実施する予定です。皆さんがアプリの準備を始められるように、あらかじめお知らせいたしました。
また、Google Play で Google のビジネスモデルを進化させてデベロッパーのニーズに応えるための取り組みを紹介した記事も忘れずに確認しておきましょう。
大画面や折りたたみ式デバイス向けの開発を始めるうえで役立てていただけるように、私たちはビューにも Compose にも対応します。新規アプリや既存アプリで異なる画面サイズをサポートする方法、ビューと Compose の両方でナビゲーションを実装する方法、折りたたみ式デバイスのメリットを活用する方法などを紹介したガイダンスの追加や改訂も行っています。ビューのサポートの大画面ガイドのセクション、または Compose ガイドのセクションをご覧ください。
コードほど雄弁なものはありません。以下のサンプルは、レスポンシブ UI に対応するように更新しています。
実践的な演習を行いたい方は、Codelab で、アップデートされた Jetpack WindowManager による折りたたみ式デバイスとデュアル スクリーン デバイスのサポートをご覧ください。
2021 年 10 月 18 日に開催された、『DroidKaigi 前夜祭』に Google 関係者がパネリストとして登壇しました。
このイベントでは、2021 年に発表した Android/Google Play 関連の製品のお話や、I/O 以降に発表された製品・技術関連の最新情報についての内容を中心に Google 関係者が解説をしました。
この記事では、イベント内で解説した内容をまとめます。
Jetpack Compose は、ネイティブ UI をビルドするための Android の最新ツールキットで、Kotlin API を使用して、少ないコードで Android の UI 開発を簡素化し、加速することができます。Google I/O では、株式会社メルカリ様のケーススタディもリリースされ、UI 開発の生産性が 56 % 向上したという実例もございます。今回のイベントでは、その Jetpack Compose の最新アップデートである、1.1.0 についてお話をさせていただきました。
このセッションでは、Android IDE Android Studio (英語) の Android Gradle Plugin API (AGP) (英語) や Test framework についてについてお話をさせていただきました。公式の強力な Android IDE Android Studio Arctic Fox (2020.3.1) ベータ版 を I/O で発表したあと、7 月に安定版をリリースしました。UI 設計期間の短縮、新しいデバイスへのアプリ拡張、デベロッパーの生産性向上を目的としており、Compose と合わせて使うことで、最新の UI をすばやくデザインすることができます。
このセッションでは、Google Play と Multi Form Factor についてお話をさせていただきました。
Wear OS や大画面対応から、セキュリティ ツールなどのトピックまで幅広くカバーしました。
ご参加いただきました皆さん、ありがとうございました!Android Developer Summit の動画も、ぜひご視聴ください。
この記事は Anna-Chiara Bellini, Nick Butcher による Android Developers Blog の記事 " Jetpack Compose is now 1.0: announcing Android’s modern toolkit for building native UI " を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
2021 年 7 月 28 日(日本時間 7 月 29 日) Jetpack Compose のバージョン 1.0 をリリースしました。Android の最新ネイティブ UI ツールキットである Jetpack Compose を使うと、優れたアプリを短時間で構築できます。このリリースは安定版で、本番環境で利用できます。Compose は、この 2 年間、Android コミュニティのフィードバックや貢献を受けつつ、オープンに開発が行われてきました。1.0 に到達した現時点で、既に Google Play ストアの 2000 以上のアプリで Compose が使われています。実は、Play ストアアプリ自体にも Compose が使われています。それだけではありません。たくさんのトップ アプリ デベロッパーと協力し、フィードバックやサポートを受けることで、1.0 リリースはさらに強固なものになっています。たとえば、Square は Compose を使うことで「宣言型 UI フレームワークの構築に関するさまざまな問題を解決することではなく、Square 独自の部分や UI インフラストラクチャに集中できる」と教えてくれました。Monzo は、Compose を使うと「質の高い画面を短時間で構築できる」と述べています。また、Twitter は「とても気に入っています!❤️」と見事に一言で言い表しています。
Compose は、ネイティブ Android アプリを短時間で簡単に作成できるように設計されています。完全に宣言的なアプローチが採用されているので、UI を記述しさえすれば、あとは Compose が対応してくれます。アプリの状態が変わると、UI が自動的に更新されるので、UI の構築がはるかにシンプルかつ高速になります。直感的な Kotlin API を使うと、美しいアプリを はるかに 少ないコードで実現できます。また、すべての既存の Android コードにネイティブでアクセスできるので、自分のペースで導入することもできます。強力なレイアウト API とコード駆動型 UI により、タブレットや折りたたみ式デバイスなど、異なるフォーム ファクタのサポートも簡単です。Compose のサポートは、Wear OS や ホーム画面 ウィジェットなども追加される予定です。
今回の 1.0 リリースは本番環境で利用でき、以下の主要機能が提供されています。
完全な宣言型アプローチを採用している Jetpack Compose によって、UI の開発方法は大きく変わります。新しいワークフローと異なる考え方をサポートするため、Compose 向けに設計された新しいツールを提供します。また、いくつかの既存のツールに Compose のサポートを追加しています。
Android Studio Arctic Fox で利用できる新しい Compose プレビューでは、異なる状態、ライトテーマやダークテーマ、異なるフォント スケーリングのコンポーザブルをすべて同時に確認できます。アプリ全体をデバイスにデプロイする必要はないので、コンポーネントの開発が簡単になります。リテラルのライブ編集機能によって機能強化されているため、プロジェクトを再コンパイルせずにアップデートを確認できます。
作業中の画面まで移動せずにデバイスで UI のパーツをテストしたいと思っていた方なら、新しいデプロイ プレビューを気に入ってくれるはずです。Composable のプレビューを作成するだけで、デバイスにデプロイしてすばやく反復できます。
Layout Inspector に Composable サポートが追加されるため、Compose と既存のビューを確実に混在させることができます。
Android Studio Arctic Fox での Compose サポートの詳細については、こちらをご覧ください。
新しいフレームワークを採用するには、評価が必要です。新しい UI ツールキットのように広範囲にわたるものでは、特にそれが重要になります。皆さんにとって今が適切なタイミングかどうかを情報に基づいて判断できるように、パブリック ロードマップ (英語) を公開して今後の Jetpack Compose の開発計画をお知らせします。
Compose を活用していただくために、皆さんや皆さんのチームが利用できる幅広いリソースを準備しました。
学ぶべきことはたくさんあります。Jetpack Compose Pathway (英語) では、主要な コードラボ、動画、ドキュメントを順番に体験できます。
Jetpack Compose は大きな飛躍であり、すばらしい UI を短時間で簡単に作れるものだと確信しています。これを使って皆さんが作るものを見ることが楽しみでなりません。Compose が 1.0 の安定版になった今こそ、実際に使うべきときです。直接コードを触るのが最善の方法です。ぜひ Compose を使ってみてください!
この記事は Florina Muntenescu による Android Developers Blog の記事 "What's new in Jetpack" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
Android Jetpack は、デベロッパーがベストプラクティスに従って、ボイラープレート コードを削減し、Androidのバージョンやデバイス間で一貫して動作するコードを書くためのライブラリ、ツール、ガイダンスを統合したものです。現在、Google Play の トップ 1000 アプリのうち 84 % がJetpack を利用しています。この記事では、Jetpack の最新のアップデートをまとめてご紹介します。
CameraX ライブラリは、デバイス固有の互換性の修正や回避策を含む、OS のバージョンを超えてカメラ機能にアクセスするための統一された API サーフェスを提供します。最新の改良点は、露出補正のサポートや、カメラの状態や機能に関するより詳細な情報へのアクセスなど、多数寄せられた機能要望にお応えした内容となっています。さらに、FPS レンジなどのカメラ設定を、カメラを動作中に Camera2Interop 経由で変更できるようになりました。また、ハイダイナミックレンジのプレビュー、ズーム比の調整、Android の Do Not Disturb モードへの対応など、最新のデバイスや OS の機能にも対応しています。特に重要なのは、パフォーマンスへの取り組みで、特に古いデバイスにおいて、画像の取り込みや初期化が高速化されています。
Hilt は、Dagger 上に構築されている、Jetpack 推奨の依存関係注入ソリューションです。安定版への移行の一環として、Hilt の ViewModel サポートはコア Hilt Android API に移され、SavedStateHandle が ViewModelComponent で利用可能なデフォルトの依存関係として追加されています。また、Hilt は Navigation および Compose と統合されています。適用範囲を宛先またはナビゲーション グラフ自体とした注釈付き Hilt ViewModel を取得できます。複数のデベロッパーの皆さんが、すでにアプリで Hilt を使い始めています。そのケーススタディは、こちらのブログ記事 (英語) をご覧ください。
ViewModel
SavedStateHandle
ViewModelComponent
Paging ライブラリを使用すると、データの小さなチャンクをロードおよび表示してネットワークとシステムのリソース消費を改善できます。このリリースでは、全体を Kotlin で書き直すことによって コルーチンおよび Flow を完全にサポートし、RxJava および Guava プリミティブを使用した非同期ロード、リポジトリおよびプレゼンテーション層の全体的な改善を提供します。
3.0 リリースでは Paging 2 と比べて使い勝手が大幅に改善され、書き直しは部分的および段階的移行を念頭に計画されたため、デベロッパーの皆さんはご自身のスケジュールに合わせて移行できます。詳細および実践については、Paging 3.0 のドキュメントおよび Paging 3.0 のCodelab をご覧ください。
Jetpack のレイアウト設計を柔軟に行うためのシステム ConstraintLayout、モーションおよびウィジェット アニメーションの管理を目的とした MotionLayout は現在安定版です。MotionLayout では、折りたたみデバイス、イメージ フィルタ、モーション エフェクトがサポートされています。デザインツールの新機能について詳細は、こちらの Google I/O セッションをご覧ください。
ConstraintLayout
MotionLayout
Security Crypto ライブラリを使うと、ファイルや SharedPreferences を安全かつ簡単に暗号化できます。SharedPreferences を暗号化するには、EncryptedSharedPreferences オブジェクトを適切なキーとスキームで作成し、このオブジェクトを標準の SharedPreferences オブジェクトのように使用します。
SharedPreferences
EncryptedSharedPreferences
val prefs: SharedPreferences = EncryptedSharedPreferences.create( context, "prefs_file_name", mainKey, prefKeyEncryptionScheme = AES256_SIV, prefValueEncryptionScheme = AES256_GCM,)// Use the resulting SharedPreferences object as usual.prefs.edit() .putBoolean("show_completed", true) .apply()
context,
"prefs_file_name",
mainKey,
prefKeyEncryptionScheme = AES256_SIV,
prefValueEncryptionScheme = AES256_GCM,
)
// Use the resulting SharedPreferences object as usual.
prefs.edit()
.putBoolean("show_completed", true)
.apply()
この1年間、Fragment ライブラリは内部の実装を整理して明文化されていない動作を削減するための大規模な変更を行いました。これにより、デベロッパーの皆さんは、アプリやゲームのベスト プラクティスに倣って信頼できるテストを記述しやすくなりました。これは、Navigation で複数のバックスタックをサポートするなど、将来的なライブラリの改善のための基礎となるもので、厳密化された API に対応するためには、いくつかの作業が必要になるかもしれません。実際に、ライブラリを更新した後のテストには細心の注意を払う必要があります。特に注意が必要なケースについては、Fragmentのリリースノートをご確認ください。
最新リリースでは、ActivityResult の統合も行われ、フラグメントから Activity の結果を登録することが可能になりました。 Fragment には、柔軟性があまり高くない onAttachFragment メソッドの代わりに、新しい FragmentOnAttachListener インターフェースも追加されています。Fragment または FragmentActivity でこのメソッドを上書きする既存のコードは引き続き機能しますが、新しいコードが柔軟性の高くない手法を誤って採用するのを防ぐため、onAttachFragment を非推奨にしました。
onAttachFragment
FragmentOnAttachListener
Fragment
FragmentActivity
// Obtain the fragment manager.May be a childFragmentManager,// if in a fragment, to observe child attachment.val fm = supportFragmentManagerval listener = FragmentOnAttachListener { fragmentManager, fragment -> // Respond to the fragment being attached.}fm.addFragmentOnAttachListener(listener)
// if in a fragment, to observe child attachment.
val fm = supportFragmentManager
val listener = FragmentOnAttachListener {
fragmentManager, fragment ->
// Respond to the fragment being attached.
fm.addFragmentOnAttachListener(listener)
ライブラリの機能が完成すると、安定化のためにベータ版に移行します。現時点では、重要な問題やコミュニティからのフィードバックに対してのみ、API を変更しています。
DataStore は、シンプルで非常に有用な API サーフェスを維持しながら、SharedPreferences の欠点を解決する堅牢なデータ ストレージ ソリューションを提供します。DataStore は、Flow と RxJava による Kotlin のコルーチンのようなベストプラクティスをサポートします。DataStore では、Preference DataStore 経由でキーと値のペアを格納したり、Proto DataStore 経由でプロトコル バッファがバックアップする型付きオブジェクトを格納できます。さらに、Kotlin Serialization のような独自のシリアル化ソリューションをプラグインすることもできます。
アルファ版ライブラリは、現在開発中のライブラリです。API の追加、変更、削除が行われる可能性がありますが、ライブラリのコンテンツはテストされていますので、高い機能性を備えています。
AppSearch は高性能で機能豊富なフルテキスト検索機能を提供する新しいデバイス内検索ライブラリです。SQLite と比較すると、AppSearch は複数の言語をサポートし、クエリ結果のランク付けがシンプルで、大きなデータセットのインデックス作成や検索の遅延がより少なくなります。
AppSearch 1.0.0-alpha01 は LocalStorage をサポートしています。これによって、アプリケーションは「ドキュメント」と呼ばれる構造化されたデータを管理し、それに対してクエリを実行することができます。アプリケーションは、「スキーマタイプ」を使って、構造がどのようなものかを定義します。例えば、メッセージは、件名、本文、送信者などのデータを持つスキーマタイプとしてモデル化することができます。
ビルダーを使用してスキーマ タイプのドキュメントを作成し、ストレージに追加します。"body:fruit" とクエリを実行すると、メッセージの本文に用語「fruit」があるすべてのドキュメント検索できます。
Android S では、AppSearch はアプリケーションのデータを他のアプリケーションと安全に共有し、追加のネイティブ ライブラリへのリンクを不要にすることで、アプリケーションのバイナリサイズを削減できる PlatformStorage も提供します。ライブラリがまだ Android S SDK を対象としていないため、現時点では Jetpack で PlatformStorage は使用できません。
デバイス全体の検索に統合するための Android S の中央ストレージ
Room は推奨されているデータ永続化レイヤであり、プラットフォーム上での使い勝手と安全性が向上します。
Room 2.4.0-alpha は自動移行をサポートしています。データベース スキーマが変更された時に、@AutoMigration を宣言して、どのバージョンからどのバージョンに移行したいかを示すと、Room が移行を生成してくれるようになりました。より複雑な移行を行う場合は、引き続き Migration クラスを使用できます。
@AutoMigration
Migration
@Database(- version = 1,+ version = 2, entities = { Doggos.class },+ autoMigrations = {+ @AutoMigration (from = 1, to = 2)+ } )public abstract class DoggosDatabase extends RoomDatabase { }
- version = 1,
+ version = 2,
entities = { Doggos.class },
+ autoMigrations = {
+ @AutoMigration (from = 1, to = 2)
+ }
public abstract class DoggosDatabase extends RoomDatabase { }
Room 2.3.0 安定版では、 Kotlin Symbol Processing が試験的にサポートされ、Kotlinコードのベンチマークでは、KAPTに比べて2倍の速度向上が見られました。また、enumとRxJava3のサポートも組み込まれています。
またRoom は、の実行時にコールバックを提供する QueryCallback クラスが導入され、ロギングなどのタスクがシンプルになりました。また、新しい@ProvidedTypeConverter アノテーションが導入され、型コンバータの作成がより柔軟になりました。
QueryCallback
@ProvidedTypeConverter
WorkManager ライブラリは、アプリが終了またはデバイスが再起動しても実行される延期可能な非同期タスクをスケジュールする方法として Android で推奨されています。すべてのタスクが確実に実行されるようにタスク照合の信頼性が向上し、さらに特定の Android OS バージョン向けのさまざまな回避策も提供されています。
WorkManager の機能の最新バージョンでは、マルチプロセス アプリのサポートが強化されています。作業リクエストのスケジュールを 1 つのプロセスに統合することで、多数のリクエストをスケジュールする際のデータベースの増大を抑制してパフォーマンスを向上するメリットがあります。
Android S SDKを対象としたバージョン 2.7(現在アルファ版)では、Android OS の新しいフォアグラウンド制限への追加サポートに対応しています。詳しくは、Effective Background Tasks on Android セッションをご覧ください。
Android Studio Arctic Fox で利用可能な Background Tasks Inspector は、最新のライブラリを使うと WorkManager のジョブを簡単に表示してデバッグできます。
Background Tasks Inspector
アプリ内の目的地間を移動するための Jetpack のフレームワークである Navigation ライブラリは、複数のバックスタックをサポートし、ボトムナビゲーションバーのように目的地が同じ深さにある場合にも簡単に対応できるようになりました。
Macrobenchmark ライブラリは、アプリの起動やスクロール パフォーマンスなどの統合された動作まで、Jetpack のベンチマーク範囲を拡張します。このライブラリは、継続的な統合テストでメトリクスを追跡するためにリモートで使用することも、プロファイリングの結果をAndroid Studioから表示するためにローカルで使用することもできます。詳細については、Google I/O のセッションをご覧ください。
Google アシスタントともっと密接した統合を希望しているデベロッパーのために、Google Shortcuts ライブラリは、既存の ShortcutInfo クラスを通じて、Google アシスタントやその他の Google サービスにアクションを公開する方法を提供します。
ShortcutInfo
ShortcutManager を介して一度に最大 15 個のショートカットを送信し、他のサービスの中から Google アシスタントに表示させ、音声やその他のインタラクションで利用できるようにします。
ShortcutManager
これを実装するには、ショートカットに Intentと機能バインディングを定義します。このバインディングは、Google サービスがユーザーに提供する最善の方法を見出すのに役立つ重要な情報を提供します。
// expose a "Cappuccino" action to Google Assistant and other servicesShortcutInfoCompat siCompat = ShortcutInfoCompat.Builder(ctx, "id_cappuccino") .setShortLabel("Cappuccino") .setIntent(Intent(ctx, OrderCappuccino::class.java)) .addCapabilityBinding( "actions.intent.ORDER_MENU_ITEM", "menuItem.name", asList("cappuccino") ) .build()ShortcutManagerCompat.pushDynamicShortcut(ctx, siCompat)
ShortcutInfoCompat siCompat =
ShortcutInfoCompat.Builder(ctx, "id_cappuccino")
.setShortLabel("Cappuccino")
.setIntent(Intent(ctx, OrderCappuccino::class.java))
.addCapabilityBinding(
"actions.intent.ORDER_MENU_ITEM",
"menuItem.name",
asList("cappuccino")
.build()
ShortcutManagerCompat.pushDynamicShortcut(ctx, siCompat)
アプリ内でユーザーが作成したすべてのコンテンツには 🎉 が含まれ、最新の絵文字をサポートすることは、あなたのアプリまたはゲームを ✨ にするために重要な要素です。API 19以降で最新の絵文字をサポートする EmojiCompat ライブラリは、従来の :emoji:emoji アーティファクトに代わる新しいアーティファクト emoji2:emoji2 に移行しました。新しい emoji2 ライブラリでは AppStartup ライブラリを使用た 🪄 自動設定が追加されています( 🐻❄️を表示するためのコード 👩🏿💻 は必要ありません)。
emoji2:emoji2
emoji2
AppCompat では、AppCompat 1.4 以降から emoji2 が追加されています。あなたのアプリまたはゲームがAppCompat を使用している場合、ユーザーは追加設定なしで最新の絵文字 ⭐ を見ることができます。AppCompat を使用していないアプリまたはゲームは emoji2:emoji2-views を追加できます。カスタム TextViews の場合は、emoji2:emoji2-views-helpers のヘルパーを使用するか、AppCompat のビューをサブクラス化することで、最新の絵文字をサポートすることができます。
emoji2:emoji2-views
TextViews
emoji2:emoji2-views-helpers
Jetpack Compose は、Android のネイティブ UI 開発用の最新ツールキットです。Android での UI 開発をシンプルにし、高速化します。Jetpack Compose は現在ベータ版で、7 月に安定版に移行する予定です。ここに掲載されているライブラリや皆さんがすでに使用している可能性のあるライブラリの多くは、Jetpack Compose との統合を目的とした機能を導入しています。Activity から ViewModel、Navigation、Hilt まで、これらすべてのライブラリを使うと、アプリに Compose をスムーズに導入できます。これらの使い方に関する詳細については、この Google I/O セッションをご覧ください。
Jetpack は、折りたたみ式デバイス、大画面デバイス、Wear デバイスなど、さまざまな形状での作業をしやすくします。大画面デバイスに対応するアプリ開発のための新しいガイドラインを導入し、、WindowManager や、SlidingPaneLayout などの Jetpack ライブラリを改善しています。詳しくは、こちらのブログ記事をご覧ください。
WindowManager
SlidingPaneLayout
以上、Jetpack の新機能を(比較的)簡単にご紹介しました。各ライブラリのアップデートの詳細については AndroidX リリースノートをご覧ください。また、Google I/O セッションでは、一部のライブラリについての詳細についてご説明しています。
Reviewed by Yuichi Araki - Developer Relations Team and Tamao Imura - Developer Marketing Manager, Google Play
この記事は Modern Android Development チーム による Android Developers Blog の記事 "Android @ Google I/O: 3 things to know in Modern Android Development" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
※日本語字幕に対応しています。ぜひ切り替えてご覧ください。
ここ数か月間で、いくつかの Jetpack ライブラリが安定版やベータ版に到達したり、アルファ版でリリースされています。主なものをご紹介します。
新機能についての詳細は、I/Oの他のセッション What's new in Jetpack、Using Jetpack libraries in Compose をご覧ください。また、Macrobenchmark の詳細については、 Measuring Jank and Startup with Macrobenchmark をご覧ください。すべての動画が日本語字幕に対応しています。
※日本語字幕に対応しています。
Android Studio Arctic Fox が提供するさまざまなインスペクターを使うと、アプリのデバッグが簡単になります。バックグラウンド作業では、Background Task Inspector を使うと WorkManager のワーカーの状態を把握できます。UI 用の Layout Inspector は、Android ビューと Compose の両方に対応しています。データベースのデバッグには、Database Inspector を利用できます。
実際のインスペクターを見てみたい方は、 What’s new in Android development tools セッションをご覧ください。
私たちは、ツールから API まで、Android における Kotlin をあらゆるレベルで改善し続け、さまざまな学習方法を提供しています。現在アルファ版の Kotlin Symbol Processing(KSP)は、KAPT より最大 2 倍高速に実行できる簡潔なコンパイラ プラグイン API です。私たちは、JetBrains と連携して IDE のパフォーマンスの問題に対処しています。その結果、自動インポート候補の表示が最大 20 倍高速になりました。また、DataBinding に StateFlow のサポートを追加し、UI で DataBinding を使わずに Flow を監視する新しい API を追加しました。すべての Kotlin の改善点は、 State of Kotlin on Android セッションでご紹介しています。
Modern Android Development(最先端の Android 開発)に関連する、今年のすべての Google I/O セッションは、こちらのプレイリストからご覧ください。
Reviewed by Hidenori Fujii - Google Play Developer Marketing APAC
この記事は Anna-Chiara Bellini、Nick Butcher による Android Developers Blog の記事 "Announcing Jetpack Compose Beta!" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
2021 年 2 月 24 日(日本時間 2 月 25 日)、Jetpack Compose のベータ版をリリースしました。新しい UI ツールキットである Jetpack Compose は、すべての Android プラットフォームでネイティブ アプリを高速かつ簡単に開発できるようにすることを目指して設計されています。Compose が提供するのは、最先端の宣言型 Kotlin API です。これにより、少ないコードで美しくレスポンシブなアプリを作ることができます。Compose は既存の Android アプリや Jetpack ライブラリに組み込めるので、Android のビューと Compose を組み合わせながら、自分のペースで採用できます。
今回のベータ版リリースで Compose の API は確定版になりました。これで本番向けのアプリを構築する際に必要な機能がすべてそろったことになります。ベータ版には、API が安定したという意味合いもあります。つまり、API が変更されたり、削除されたりすることはありません。Compose を学び始め、今後のプロジェクトや機能にどう活用するかについて計画を立てるには、今が絶好の機会です。Compose は今年中に 1.0 に到達する予定です。
Compose チームは、コミュニティの皆さんからのフィードバックも取り入れて、オープンに開発を進めています。2019 年に開発をオープンソース化して以来、30 回のパブリック リリースを行い、外部から寄せられた 700 個以上のバグに対応し、200 件以上の外部からのコントリビューションを受け入れました。皆さんに Compose を使ってアプリを開発していただくことはとても嬉しいことで、いただいたフィードバックや機能リクエストは API の微調整や作業の優先順位を付けることに役立っています。アルファ版リリース以降も、たくさんの機能を追加または改善しています。
ベータ版リリースでは、API の完全性を確保することに重点を置いています。つまり、1.0 やその先に向けて、土台となる API を提供することです。今後は、1.0 リリースに向けてこれらの API の機能を安定させる作業を進める予定です。アプリのパフォーマンスとユーザー補助機能には、特に重点を置いています。
最新の Android Studio Arctic Fox Canary 版は Compose ベータ版をサポートしており、たくさんの新しいツールも搭載しています。
🆕 ライブ リテラル: デバイスやエミュレータで、プレビューのリテラルをリアルタイムにアップデート🆕 アニメーション プレビュー: アニメーションの調査と再生🆕 Layout Inspector の Compose サポート🆕 インタラクティブ プレビュー: Composable を切り離して調査や操作が可能🆕 デプロイ プレビュー: アプリ全体をデプロイすることなく、デバイスに Composable をデプロイ
🆕 ライブ リテラル: デバイスやエミュレータで、プレビューのリテラルをリアルタイムにアップデート
🆕 アニメーション プレビュー: アニメーションの調査と再生
🆕 Layout Inspector の Compose サポート
🆕 インタラクティブ プレビュー: Composable を切り離して調査や操作が可能
🆕 デプロイ プレビュー: アプリ全体をデプロイすることなく、デバイスに Composable をデプロイ
Jetpack Compose は、Android ビューと共存してシームレスに動作するように設計されているので、自分のペースで採用できます。具体的には、Android ビューに Compose UI を埋め込んだり、Compose の中でビューを使ったりすることもできます。相互運用性に関するドキュメントに、たくさんの採用戦略をまとめました。
既存アプリに Compose を追加する際に役立つように、ビューとの相互運用性に加えて、よく使われるライブラリとの統合も行っています。そのため、アプリを書き直したり、アーキテクチャを変更したりする必要はありません。以下の統合が利用可能です。
MDC-Android Compose Theme Adapter ライブラリや Accompanist ライブラリを使えば Material および AppCompat のXML テーマとの統合機能を利用できるので、テーマを重複して定義する必要はありません。Accompanist は、よく使われるイメージ読み込みライブラリのラッパーも提供します。
Jetpack Compose は、 宣言型 UI ツールキットであり、現在のビューシステムからのパラダイム シフトです。つまり、記述するのは、アプリが特定の状態のときに UI がどのように見えるべきか であって、 どのように UI を生成するかではありません。アプリの状態が変わったときは、Compose によって UI がアップデートされるため、UI を操作して目的の状態に変更するという面倒でエラーが起こりやすい作業は必要なくなります。
また、Compose はすべて Kotlin で書かれているので、優れた言語機能を活用して、簡潔で強力かつ直感的な API を提供できます。たとえば、コルーチンを使うと、ジェスチャー、アニメーション、スクロールなど、はるかにシンプルな非同期 API を書くことができます。そのため、ジェスチャーに続いてアニメーションするなど、非同期イベントを組み合わせたコードを簡単に書けるようになります。キャンセルやクリーンアップはすべて構造化され、並列に行われます。
皆さんや皆さんのチームが Jetpack Compose に関するあらゆることを学習できるように、Jetpack Compose Pathway をアップデートしました。これは、動画やハンズオン Codelabs、重要なドキュメントを厳選した一覧であり、Compose を始める際に役立ちます。本日は、新しく作成またはアップデートしたガイド ドキュメントも公開します。たくさんのスクリーンキャストや新しい Animation Codelab を通じて、Compose で開発を始める方法を詳しく学ぶことができます。アーキテクチャ、ユーザー補助機能、テストに関するガイドから、アニメーション、リスト、Compose の思想に関する詳しい説明まで、作業をより早くするために役立つガイドも準備しました。
さらに、実際に動作する Compose をすぐに見てみたい方のために、8 つの公式サンプルアプリも提供しています。シンプルなものから複雑なものまで、すべて異なる API やユースケースを扱っています。詳しくは README をご覧ください。
Compose を始める準備ができ、賞品も獲得したい方は、#AndroidDevChallenge に挑戦してください。Jetpack Compose で優れたアプリをすばやく作成する技術を身につけられるよう、4 週間にわたって日本時間の木曜日朝、週単位のチャレンジを出題します。各チャレンジでは、「インサイトを開放する」をテーマに、アニメーションやマテリアル テーマ、Composable やリストなど、毎回 Compose の新しい領域を扱います。毎回のチャレンジの勝者に新しい賞品があり、Pixel 5 を含む 1000 個以上の賞品を準備しています*。2 月 25 日から始まっている第 1 週のチャレンジの詳細は、こちらをご覧ください。
Jetpack Compose はベータ版に到達し、1.0 に向けた確定版の API や機能が完成しています。アプリで Compose を採用した方は、ぜひフィードバックをお寄せください。Kotlin Slack の #compose チャンネルで行われているディスカッションへの参加もお待ちしています。
*毎週のチャレンジに新しい賞品が設定されています。Google Pixel 5 が賞品になる週で、Google Pixel 5 が利用できない国にお住まいの方には、同程度の価値がある電子ギフトカードをお送りします。詳しくは公式ルールをご覧ください。
Reviewed by Yuichi Araki - Developer Relations Team and Hidenori Fujii - Google Play Developer Marketing APAC