この記事は 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
この記事は Alex Musil による Android Developers Blog の記事 "The top Google Play updates from I/O ‘21" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
今年の Google I/O では、Google Play を最大限に活用するために役立つたくさんのすばらしい新機能やツール、アップデートについてお知らせしました。I/O セッションですべてのアップデートを確認できますが、この記事では、インストール数の増加からエンゲージメントや収益の拡大まで、ビジネスの推進に役立つ新機能の概要をご紹介します。
※日本語字幕に対応しています
この記事は Oscar Wahltinez による Android Developers Blog の記事 "What's new in foldables, tablets, and large screens" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
ユーザーは より大きな画面で、かつ、1 台のデバイスのみを活用し、より多くのことができることに価値を見出しています。大画面デバイスに対応したアプリは、その価値をさらに高めることができます。
折りたたみ式デバイスは、大きな画面を持つデバイスの使い勝手を向上させました。タブレットのような画面サイズのデバイスをポケットに入れて持ち運べる様になり、従来型のスマートフォンでは実現の難しかった使い方ができるようになります。アプリのエコシステムへの影響について考えると、とてもワクワクします。このハードウェアの大きな変化は、スマートフォンで新しくできるようになることがあるに違いない、という期待をもたらしているからです。私たちは、この大画面化の流れは、タブレットにも及ぶと考えています。同じようなアプリ エクスペリエンスでも、画面の大きいデバイスで操作した場合は、段違いに評判が良くなります。
このブログ記事では、大画面向けにアプリを準備するときに何をすべきか、アプリの開発を効率化する最近のアップデートについてご説明します。まずはじめに、大画面についての私たちの考えと、アプリを最適化するべき理由についてお話しします。
この 1 年で、各社が新しい折りたたみ式デバイスやタブレットを発表しています。また、ユーザーが自宅で新型デバイスを使ってより多くのことをしようとしているため、需要も増加しています。つまりデベロッパーの皆さんは現在、Android の大画面デバイス向けにアプリを開発すると、2 億 5,000 万台以上のアクティブな折りたたみ式デバイス、タブレット、Chromebook にリーチすることができます。タブレット の売上は 2020 年に16% 増加し、アナリストは 2023 年までに 4 億台以上の Android タブレットが登場すると予想しています。また、Android アプリは、現在 2 番目に人気のあるデスクトップ OS である ChromeOS でも動作します。
大画面化によって、ユーザーのデバイスとの付き合い方が変わりつつあります。このようなデバイスでは、メモを見ながらスライドデッキを編集したり、夜の外出に備えておすすめのレストランを調べたり、友達とチャットしながらビデオを見たりすることができます。ここでは、アプリを大画面に対応するためにサポートしなければならない機能である、基礎レベルのサポートについて説明します。大画面に対応するためには、主に 大きく分けて 3 つのカテゴリに注目します。
これらについて以下にまとめますが、詳しくは大画面アプリの品質ガイドラインを必ずご覧ください。
最初のステップは、アプリを確実に大画面向けに設計することです。これを簡単にするために、特定のウィンドウサイズのブレイクポイントとデバイスクラスを定義して、デベロッパーが最適化できるようにしました。最短のサイズが 600dp 以上のディスプレイにはタブレットレイアウトを追加し、アプリが端から端まで表示されるようにします。また、大画面は横向きで使用されることが多いため、デベロッパーはアプリが縦向きと横向きの両方で使用されるように考慮する必要があります。画面のスペースをより有効に活用できるように、マテリアル アダプティブ コンポーネントをご用意しました。詳しくは後ほどご説明します。
分割画面(またはマルチウィンドウモード)への移行や、ドラッグ&ドロップのようなジェスチャーによる操作は、ユーザーが大画面デバイスでシームレスに動作することを期待する、自然なインタラクションになりつつあります。
アプリのサイズを変更可能にすることで、アプリをシームレスにマルチタスク対応にできます。また、画面の折りたたみ/ 展開イベントを適切に処理し、アプリをマルチウィンドウモードに対応させることで、アプリがレターボックス表示になることを防げます。
多くの人は生産性を高めるためにより大きな画面を使います。そのため、タブレットは基本のキーボード、マウス、スタイラスの使用をサポートする必要があります。
Jetpack と Material Design ライブラリの UI コンポーネントをアップデートし、スマートフォンの UI を大画面に拡大しても柔軟なユーザー エクスペリエンスを開発できるようになりました。
アプリを大画面に最適化するときに最もよく使われるアダプティブ レイアウトの 1 つが、一覧・詳細UI です。例えば、メッセージングアプリでは、片側にメッセージを一覧表示し、もう片側にメッセージの詳細を表示します。
SlidingPaneLayout ライブラリのアップデート版を使うと、小さな画面では上下に重なってしまう UI も、簡単に横に並べることができます。2 ペインスタイルのレイアウトをサポートするためにアップデートされた SlidingPaneLayout は、2 ペインの幅を使って UI のレイアウトを決定します。これは、コンテンツの幅と利用可能なスペースに基づいて、横に並べることができるかどうかを自動的に判断して実行します。例えば、リストペインの 最小幅が 200dp、詳細ペインが 400dp 必要と測定された場合、SlidingPaneLayout は、少なくとも 600dp の幅が利用可能であれば、自動的に2つのペインを横に並べて表示します。
折り目やヒンジなどのディスプレイの特徴を認識する機能も追加しました。例えば、ヒンジ付きのデバイスで画面の一部が遮られている場合、自動的にコンテンツをどちらかの画面に配置します。
ロックモードも導入しました。ロックモードでは、ペインが重なったときのスワイプ動作をコントロールできます(プログラムによる切替もサポートされます)。例えば、ユーザーがスワイプで空のペインに移動するのを防ぐために、リストのアイテムをクリックしてそのペインの情報を読み込ませ、スワイプでリストに戻れるようにすることができます。2 つのビューを横並びで表示する大きさがある折りたたみ式デバイスやタブレットでは、ロックモードは無視されます。
垂直ナビゲーション レールは、機能的にはボトム ナビゲーションと同等で、より大きな画面のナビゲーションの使用感を改善し、UI のサイズを調整する時に、NavRail が指が届く範囲内に配置することをサポートします。スマートフォンは下向きに持つユーザーが多いですが、タブレットなどより大きいサイズのデバイスは横向きに持つことが多いからです。
例えば、縦スクロールが重要なアプリの場合に、NavRai lが役立ちます。このような場合、ナビゲーション バーが下部にあると表示できるコンテンツの量が減ってしまいます。特に、タブレット デバイスを横向きに使っている場合に、より顕著になります。
他にも、複数のコンポーネントをアップデートしました。アプリを大画面対応するときの最大の落とし穴の 1 つは、UI要素が画面全体に引き伸ばされることです。これを防ぐために、この問題が最も多く発生する要素、例えば下のような要素にデフォルトのmax-width を追加しました。
今後、他の要素にも同じ対応を行う予定です。これらの変更により、独特のデフォルトが提供され、アプリを大画面デバイス対応にし、アプリのレイアウトが崩れないようにサポートします。追加設定は必要ありません。コンポーネントのサイズ制限に関する詳細は、マテリアル デザイン ガイドラインをご覧ください。
UI のサイズ調整をサポートするコンポーネントのアップデートだけではなく、これらのデバイスでより良いエクスペリエンスを開発するための WindowManager Jetpack ライブラリを提供しています。このライブラリは、現在アルファ版が公開されており、折りたたみ式デバイスやタブレットをはじめとするさまざまなデバイスタイプに対応する一般的な API サーフェスを提供しています。
WindowManagerを使用すると、折り目やヒンジなどのディスプレイの特徴を検出することができます。また、そのディスプレイ機能がアプリにどのような影響を与えるかについての情報も提供されるので、最適なエクスペリエンスを生み出すことができます。例えば、ユーザーが動画を見ているときにデバイスがテーブルトップ モードに折り畳まれた場合、折りたたみ式デバイスの状態変化に反応します。
WindowManager では、API レベル 14 以降の下位互換性のある方法で、現在および最大の WindowMetrics 情報を取得する便利なメソッドもいくつか提供します。
アプリは、各デバイスに適切にコンテンツを表示するために、画面またはディスプレイのサイズを決定する必要があります。WindowMetrics API を導入したため、ディスプレイ サイズに関連する多くのメソッドが非推奨となりました。下位互換性のある代替手段として、Window Manager Jetpack ライブラリを使用する必要があります。
Android 10 では、「トップの再開アプリ」が 1 つになり、複数の再開アプリを同時に実行することが可能になりました。ほとんどのアプリケーションは、アップデートの必要なくこの変更の恩恵を受けます。ただし、マイクやカメラなどの排他的なリソースを使用しているアプリケーションは例外です。詳細については、以前のブログ記事(英語)をご覧ください。
アプリを大画面に最適化することで、ユーザー エクスペリエンスが改善され、ビジネスの成果につなげることができます。Google Play では、大画面での利用機会を活用するアプリが増えています。例えば、Google Duo は、タブレットと折りたたみ式デバイスのサポートを実装してユーザー エクスペリエンスを向上させ、アプリの評価とユーザー エンゲージメントの向上に繋がりました。
Google Duo の折りたたみ式デバイス対応最適化エクスペリエンス(Samsung Galaxy Z Fold2 など)
Google Duo のユーザー エクスペリエンスの向上に加えて、多くのアプリでアダプティブ レイアウトを採用し、大画面や折りたたみ式デバイスでの利用が可能になりました。
折りたたみ式デバイスおよび大画面デバイスの詳細については、以下の関連情報も併せてご覧ください。
この記事は Dave Burke による Android Developers Blog の記事 "What's new in Android 12 Beta" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
私たちが特に力を入れているのが、ユーザーの好みに適応し、よりパフォーマンスに優れ、セキュリティとプライバシーを重視した新しい UI です。デベロッパーの皆さんには、スマートフォン、ノートパソコン、タブレット、ウェアラブル デバイス、TV、車などを使用するユーザーに向けたすばらしいエクスペリエンスを提供するためのさまざまなツールも用意しています。
Beta 1 には注目すべき点がいくつもあります。まず、「Material You」というデザイン言語を採用し、Android 史上最大の変更が行われた UI です。さらに、おおよその位置情報を提供する設定など、ぜひ試していただきたい新しいプライバシー機能や、アプリとユーザーが高性能なデバイスを確認できる「パフォーマンス クラス」という新しい基準も導入しています。
Pixel デバイスに Android 12 Beta 1 をインストールする場合は、こちらの Web サイトをご覧ください。また、パートナーのデバイスメーカーが迅速なアップデートに取り組んでくださっているおかげで、ASUS、OnePlus、OPPO、Realme、シャープ、TCL、Transsion、Vivo、Xiaomi、ZTE などのデバイスでもBeta 1 をインストールできるようになりました。その他のデバイスも近々対応予定です。詳しくは android.com/beta をご覧ください。
この記事では、新機能のポイントについてさらに詳しく説明します。Android 12 全体の詳細情報や開発方法については Android 12 のデベロッパー向け Web サイトもご覧ください。
ユーザー向けのブログ記事で紹介したとおり、Android 史上最大のデザイン変更を行いました。Android 12 では、より表現力に富み、生き生きと動き、個人の好みに合うよう、色や形、光や動きに至るまですべてのエクスペリエンスを見直しました。私たちはソフトウェア チーム、ハードウェア チーム、マテリアル デザイン チーム間の密接な連携を通じてこの作業に取り組み、ソフトウェアとハードウェアのエコシステムを「Material You」という 1 つのデザイン言語の下で統合しようとしています。
この新しいデザイン言語はプラットフォーム全体にわたり、すべての UI 要素に採用されるので、アプリにはこれらのアップグレードが自動的に適用されます。
再設計されたウィジェット - Android 12 では、デザインとともに、アプリのウィジェットもより使いやすく、美しく、見つけやすく変更しました。
新しく追加されたチェックボックス、スイッチ、ラジオボタンなどのインタラクティブなコントロールによって、ウィジェットがよりカスタマイズしやすくなっています。Android 12 のウィジェットは角が丸くなり、ランチャーとホーム画面に合わせて自動的にパディングが調整されるようになったため、システム UI とテーマに美しく調和します。レスポンシブ レイアウトにより、スマーフォン、タブレット、折りたたみ式デバイスなどさまざまなスクリーンに合わせてウィジェットを変化させることができます。
また、動的なカラー API を使用することで、システムカラーを使用して、統一性を保ちながら独自のウィジェットの外観を作成できるようになりました。さらに、ウィジェットの選択機能が改善され、Assistant との連携性が高まり、ウィジェットがより見つけやすくなっています。サンプルコードをチェックし、新しくなったウィジェットをぜひお試しください。詳細はこちらをご覧ください。
ストレッチ オーバースクロール - システム全体に「ストレッチ」というオーバースクロール効果を追加しています。この効果を使うと、UI 内で利用可能なコンテンツの端までスクロールしたことがユーザーにわかりやすくなります。ストレッチ効果は縦方向と横方向のスクロールが止まることを自然な動作で知らせるものです。すべてのアプリに共通で使用され、プラットフォームと AndroidX のスクロール可能なすべてのコンテナでデフォルトで有効になっています。
このストレッチ オーバースクロールは、これまでのバージョンでサポートされていたグロー効果を用いたオーバースクロールに代わって使用されます。ご自身のアプリやコンテンツでこの新しいスクロール動作を必ずテストしてください。不要であれば無効にすることができます。詳しくはこちらをご覧ください。
よりスムーズな音声の遷移 - UI とは視覚的な要素だけではありません。音声フォーカスの処理も改善されています。
アプリが音声フォーカスを失うと、そのアプリの音量が自動的に小さくなります。音声を出すアプリからアプリへとスムーズに遷移し、アプリ同士で音声を妨げあうことがなくなります。特に、折りたたみ式デバイスやマルチスクリーンの Android 環境では重要な機能です。詳しくはこちらをご覧ください。
Android 12 では、システムとアプリを高速化する基本的なパフォーマンスの改善から、高性能なデバイスを特定し、デベロッパーによるデバイスのエクスペリエンス改善を支援する新しい基準の導入まで、大規模かつ詳細にわたるパフォーマンスの改良を行いました。
高速化と効率化を実現するシステム パフォーマンスの改善 - コアシステムのサービスを実行するのに必要な CPU 時間が 22% 削減されたため、デバイスがより高速に動作し、機敏に反応するようになります。またシステム サーバーによる大型(big)コアの使用が 15% 削減されたため電力効率がよくなり、デバイスの充電が長持ちするようになりました。
さらにロックの競合と遅延時間のばらつきを軽減して遷移とアプリの起動時間を改善し、アプリの読み込みが早くなるよう I/O を最適化しています。PackageManager では読み取り専用のスナップショットにより、ロックの競合が約 92% も減少しました。
Binder では、軽量なキャッシュによって、対象となる呼び出しの遅延時間が最大 47 倍も改善されています。I/O に関しては、dex、odex、vdex ファイルの高速化により、特にメモリ容量が少ないスマートフォンでのアプリの読み込み時間が改善されています。また通知トランポリンの制限により、通知からアプリを起動するときの遅延時間が短縮されました。たとえば、Google フォトアプリでは、通知トランポリンを行わなくなったことで、起動時間が 34% 短くなっています。
データベース クエリのパフォーマンスを改善するため、Binder のトランザクションに結果を埋め込むことで CursorWindow を最適化しました。小さなウィンドウの場合、CursorWindow は 36% 高速化しています。1000 行を超えるウィンドウでは改善率は 49 倍にも達します。
パフォーマンス クラス - Android エコシステムのパートナーと連携し、Android 12 から、高性能な Android デバイスを特定する共通の基準を導入することになりました。
「パフォーマンス クラス」と呼ばれるこの基準は、Android の基本的な要件からさらに進んだ高度な性能を定義します。パフォーマンス クラスの要件を満たすデバイスは、より厳しい条件のユースケースに対応し、より質の高いコンテンツを提供できます。デベロッパーは実行時にパフォーマンス クラスを確認することで、デバイスのパフォーマンスを最大限に活かした高度なエクスペリエンスを確実に提供できます。
当面は、メディアのユースケースに特化して、カメラの起動時の遅延時間、コーデックへの対応、エンコードの質、最小メモリ容量、画面解像度、読み取りと書き込みのパフォーマンスなどの要件を定義したパフォーマンスクラスを提供します。詳しくはこちらをご覧ください。
私たちは常にプライバシーを念頭に置いています。Android 12 でも引き続き、ユーザーのデバイスとデータのセキュリティを保護しながら、透明性と制御性を高めることに努めています。Beta 1 で追加されたプライバシー機能は以下のとおりです。
アプリの休止状態(ハイバネーション) - 昨年、Android に権限の自動リセット機能を追加しました。しばらく使用されず、ユーザーに存在を忘れられたアプリがユーザーのデータにアクセスできないようにするための機能ですが、ここ 2 週間で 850 万もの Android アプリが権限をリセットされています。Android 12 では、権限の自動リセットをさらに発展させ、長期間使用されなかったアプリを自動的に休止状態に切り替え、デバイスのストレージ容量、パフォーマンス、安全性をより改善する機能を導入します。
休止状態はユーザーが以前に許可した権限を取り消すだけでなく、アプリを強制停止してメモリやストレージ、その他の一時リソースを解放します。この状態になると、アプリがバックグラウンドでジョブを実行したりプッシュ通知を受け取ったりできなくなるため、ユーザーのデータが安全に保たれます。通常はユーザーに通知せずに休止状態を適用することをお勧めしますが、アプリで無効にする必要がある場合は、[Settings] からこの機能を無効にするようユーザーに通知してください。詳しくはこちらをご覧ください。
Android 12 では、位置情報の権限を得なくてもアプリで Bluetooth スキャンを実行して近くのデバイスを探せるようになりました。Android 12 をターゲットとするアプリでは、usesPermissionFlags=”neverForLocation” 属性を設定した BLUETOOTH_SCAN 権限を使用してスキャンを実行できます。デバイスとのペア設定が完了したら、BLUETOOTH_CONNECT 権限を使用して通信を開始できます。
usesPermissionFlags=”neverForLocation”
BLUETOOTH_SCAN
BLUETOOTH_CONNECT
これらの権限を使用することで、プライバシーに配慮した設計を採用しながら、アプリを利用する際のユーザーの抵抗感を減らすことができます。詳しくはこちらをご覧ください。
おおよその位置 - Android では最近、フォアグラウンドでのアクセスとバックグラウンドでのアクセスを別々に管理する設定や、「今回のみ」アクセスを許可するオプションなど、位置情報へのアクセスをきめ細かく管理する方法をいくつか導入しています。
Android 12 をターゲットとするアプリでは、「おおよその位置」を選択できるオプションが導入され、よりきめ細かい管理が可能になりました。アプリが正確な位置情報を要求した際に正確な位置情報とおおよその位置情報のどちらの取得を許可するかユーザーが選択できます。位置情報の正確さは [Settings] からいつでも変更できます。アプリで正確な位置情報(ACCESS_FINE_LOCATION)を要求する場合は、この変更点を考慮し、おおよその位置情報だけでもアプリが問題なく機能するようにしてください。
一般的な用途で位置情報を利用するのであれば、通常はおよその位置情報(ACCESS_COARSE_LOCATION)のみを要求することをお勧めします。詳しくはこちらをご覧ください。
Android 12 とアプリの互換性をまだテストしていない方は、ぜひ、早めに着手することをお勧めします。Android 12 Beta 1 は、Pixel デバイスやほかのデバイスで、先行登録したユーザーと、デベロッパーの皆さんが利用可能です。つまり、今後数週間にあなたのアプリを Android 12 上でより多くのユーザーが利用し、問題点を報告してくる可能性があるということです。
互換性をテストするには、Google Play やその他のソースから、Android 12 Beta 1 を実行するデバイスまたはエミュレータにインストールし、アプリのすべてのフローで動作を検証してください。動作の変更点を改めて確認することで、的を絞ったテストを実施できます。問題を解決したら、できるだけ早くアップデートを公開しましょう。
Beta 1 のリリースにより、私たちは 2021年 8 月に予定している Platform Stability の達成に一歩近付きました。プラットフォームの安定性が達成されると、アプリに関連するシステムの動作、SDK と NDK API、非 SDK のリストが最終的に決定されます。この時点で互換性の最終テストを完了し、完全な互換性が確認されたアプリ、SDK、ライブラリのバージョンをリリースできるようにしましょう。デベロッパー向けのスケジュールの詳細については、こちらをご覧ください。
リリースした Beta 1 には、Android 12 の機能を試し、アプリをテストし、フィードバックを送信するために必要なすべてのものが揃っています。ここからサポート対象の Pixel デバイスを登録して、OTA アップデートを受け取ってください。既にプレビュー ビルドをインストールしている場合は、Beta 1 のアップデートが自動で送信されます。開発を始めるには、SDK を設定してください。
Android 12 デベロッパー プレビューに参加している大手デバイスメーカー パートナーのデバイスにも、一部 Android 12 Beta 1 を使用できるものがあります。android.com/beta に、パートナーの一覧と、サポート対象のデバイスの詳細を説明したサイトへのリンクが記載されています。登録とサポートは各パートナーが管理しており、Beta 1 のアップデートもパートナーから直接提供されます。
サポートされている複数のデバイスを対象としたより広範囲なテストを行うには、Android GSI イメージで Android 12 Beta 1 を実行してください。デバイスをお持ちでない場合は、Android Emulator でテストを実行できます。Android Studio の SDK Manager から最新のエミュレータのシステム イメージをダウンロードしてください。
Beta 1 の入手方法の詳細については、Android 12 のデベロッパー向け Web サイトをご覧ください。
Reviewed by Yuichi Araki - Developer Relations Team and Hidenori Fujii - Google Play Developer Marketing APAC
この記事は Karen Ng、Jacob Lehrbaum による Android Developers Blog の記事 "What's new for Android developers at Google I/O" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
Android デベロッパーの皆さんは、世界中の人々を喜ばせるエクスペリエンスを作り出そうと日々努力を重ねています。人々がこれまでになくアプリを必要としている今、期待も大きくなり、デベロッパーとしての仕事の難易度も高まっています。私たちは Google I/O で、デベロッパーの皆さんをサポートするためにリリースした新機能をいくつか発表しました。過去最大級のデザイン変更を行った Android 12 や、高品質の優れたアプリ開発をサポートする Jetpack、Jetpack Compose、Android Studio、Kotlin などです。また、ウェアラブルデバイスや大画面対応が進むデバイスを通して、ユーザーによるアプリの使用シーンを広げるお手伝いをしています。こちらの Developer Keynote でもカバーしていますが、この記事でいくつかをハイライトしてご紹介します。
Android 12 は最初のベータ版のロールアウトがはじまったばかりですが、素晴らしい機能が満載です。ユーザーの安全のための機能である、Bluetooth や推定位置情報の利用許可、優先ジョブやスタートアップ アニメーションなどといったパフォーマンスの改善、よりインタラクティブなウィジェットやストレッチ オーバー スクロールなどの楽しいエクスペリエンスまで、このリリースで Android は過去最大級のデザイン アップデートをしています。
Android 12 Beta 1 の内容の詳細についてはこちらをご覧ください。内容をご確認いただき、年内公開のコンシューマ リリースに向けて、アプリの準備を始めてください。今すぐベータ版をダウンロードして、あなたのアプリでお試しください。
ここ数年間、私たちは Android 開発エクスペリエンスを進化することに取り組んできました。デベロッパーの皆さんのフィードバックに耳を傾け、フィードバックにオープンであり続けました。それが、Android の特徴だからです。しかしながら、自分たちが正しいと信じることに関しては、妥協しないよう心がけてきました。このことは、Android Studio(デベロッパーに合わせることができる高性能 IDE) 、Kotlin(より少ないコードでより多くのことを実現できるプログラミング言語)、Jetpack ライブラリ(後方互換性でモバイルに関連する最も難しい問題を解決するライブラリ)を通して、おわかりいただけるでしょう。
このオファリングの次のステップは Jetpack Compose、あらゆる Android デバイス向けの優れたアプリを簡単に構築できる最新 UI ツールキットです。私たちは、ここ Google I/O で 2 年前に Compose を発表し、それ以来新しいバージョンを公開しながら強化を重ね、フィードバックに耳を傾け、反映させてきました。今年はじめに公開した Compose Beta 版 では、世界中のデベロッパーの皆さんが、すばらしく革新的なエクスペリエンスを提供するアプリを通常の半分ほどの時間で作り出すことも実現されています(株式会社メルカリのケーススタディ)。また、Compose を使ったコンテストである #AndroidDevChallenge へのデベロッパーの皆さんからの熱い反響に、私たちはとても感動しました!
次回の Material You のアップデート(詳細はこちら)では、新しい マテリアル コンポーネントを追加し、大画面に対応する開発をさらにサポートする予定です。短期間で楽に素晴らしい UI を作成できるようになります。Compose のテストは最後の追い込み中です。1.0 Stable は 7 月にリリース予定です。ご準備ください。
公式の強力な Android IDE の最新リリース、Android Studio Arctic Fox (2020.3.1) Beta が、2021 年 5 月 19 日(現地時間 5 月 18 日)に公開されました。より楽に、より短期間で良質なアプリを開発できるようデベロッパーをサポートする IDE です。このツールスイートを提供しアップデートすることで、私たちは 3 つの主要テーマを強化してきました。そのテーマとは、UI 設計期間の短縮、新しいデバイスへのアプリ拡張、デベロッパーの生産性向上です。この最新リリースと Compose を合わせて使うことで、最新の UI を作成することができます。複数のデバイスでのテスト結果をご覧ください。そして App Inspector で、デバッグ データベースとバックグラウンド タスクを最適化してください。また、Accessibility Scanner (ユーザー補助検証ツール)を用いるとアプリがより使いやすく、Memory Profiler を用いるとアプリがより高性能になります。開発期間短縮のため、Android Gradle プラグイン 7.0、新しい DSL、さまざまな API を用意しました。Android Studio アップデートの詳細についてはこちらをご覧ください。
最近の調査によると、Kotlin はいまや、プロの Android デベロッパーに最も使われている第 1 言語です。実際、Google Play Store の 120 万以上のアプリで Kotlin が使用されています。これには、トップ 1000 アプリの 80% が含まれます。Google でも、Kotlin は愛されています。Drive、Home、Maps、Play など 70 以上の Google アプリで Kotlin が使用されています。そして Kotlin の注釈処理のために新しく作られた、まったく新しいネイティブソリューション、Kotlin Symbol Processing が本日リリースされました。Kotlin のコードを直接解析するための、強力だがシンプルな API です。Room のようなライブラリで最大 2 倍の速度を誇ります。
Android Jetpack で開発されたライブラリ スィートを利用すると、ボイラープレート コードが減り、本来のコードに集中することができます。現在、トップ 10,000 アプリの 84% 以上で Jetpack ライブラリが使用されています。そして 5 月 19 日(現地時間 5 月 18 日)、Jetpack 向けの新リリースがいくつか公開されました。アプリをリリースする前にアプリの起動に影響を与える大きなインタラクションやジャンクを把握するための Jetpack Macrobenchmark(Alpha)、Jetpack DataStore(Beta)を介してデータをより効率良く維持するための新しい Kotlin Coroutines API などです。Android Jetpack のアップデートの詳細についてはこちらをご覧ください。
最新の Android 開発環境を構築する上で、私たちが心掛けているもっとも大事なことは、これらのツールを提供することで 皆さんがより容易に Android の次の時代を切り開いていけるようにするということです。そしてそれは、電話と各種デバイス(テレビ、自動車、時計、タブレット)が接続し、連携することで生まれる新たな世界を実現することに他なりません。
今日 5 月 19 日(現地時間 5 月 18 日)から私たちは、ウェアラブルにむけて大きな一歩を踏み出します。まず、Samsung と合同で Wear と Tizen の長所を組み合わせた統合プラットフォームを構築すると発表しました。次に、刷新した Google アプリによる新しいコンシューマ エクスペリエンスをベストプラクティスとして共有しました。3 つめとして、Fitbit の世界クラスの健康フィットネス サービスをプラットフォームに取り入れることにしました。これは、Android デベロッパーにとっては、手が届く範囲が広がること、そしてモバイルアプリを素晴らしいものとする既存のスキル、ツール、API のすべてを使えることを意味します。結果として、世界中の人に使われる単一のウェアラブルプラットフォームが構築されるのです。
Wear 向けの新しい Jetpack API は、小型スクリーン用に調整し、バッテリーの寿命を伸ばすために設計しました。Jetpack Tiles API を使えば、Wear エコシステムの中のあらゆるデバイス向けカスタムタイルを作成できます。他にも Wear での開発を支援する新しい機能がたくさんあります。Samsung と共同してつくられた健康フィットネス向けの新しい API セットを使用すると、センサーやメトリクス計算のデータ コレクション(心拍数、カロリー、毎日の移動距離など)が、1 つの信頼できるデータソースから取得された、無駄のない、一貫性を持った、正確なデータになります。これらすべてが新しいツールにまとめられて、Android Studio Arctic Fox Beta でリリースされています。アプリをテストするための簡易なペアリングや、エミュレータでの仮想の心拍数センサーまで揃っています。アプリが配信されたら、ユーザーは、大きくアップデートされアプリの見つけやすさも向上した Google Play で、 より容易に Wear アプリの世界を楽しむことができます。Wear アップデートの詳細については、こちらをご覧ください。
タブレット、折りたたみ式デバイス、Chrome OS ノートパソコンなど、スマホのコンテンツをより大きな画面で体験するユーザーが増えています。人々は、家族や友人とのつながりを保ったり、学校に行ったり、リモートワークしたりする目的で、大型画面デバイスにますます依存するようになっています。実際に使用されている大型画面の Android デバイスは 2 億 5000 万台を超えています。Chrome OS は昨年、PC 市場の成長率の 5 倍、前年比で +92% 成長しました。その結果、Chrome OS は最速の成長を遂げて、2 番目に人気のデスクトップ OS になりました。この機会を掴むべく、大型画面でのエクスペリエンスをより簡単に最適化するための API と各種ツールを用意しました。たとえば、SlidingPaneLayout 1.2.0 と新しい垂直ナビゲーション レール コンポーネントを使うと大きくなった空間に合わせてコンテンツのサイズが自動調整されます。コンポーネントの幅を最大化することで UI が間延びしないようにします。また、プラットフォーム、Chrome OS、および Jetpack windowmanager がアップデートされたため、デフォルトでもアプリが問題なく動作します。詳細についてはこちらをご覧ください。
以上のことは、高品質の Android アプリを構築しやすくする、新しい方法のほんの一部です。5 月 19 日(現地時間 5 月 18 日)以降、私たちは Android と Google Play に関するテクニカル セッションを 20 以上公開し、バックグラウンド タスク、プライバシー、Android における機会学習、Android 12 に備えるトップ 12 のヒントなど、さまざまなトピックを扱います。自動車、テレビ、ウェアラブルの構築を担当する方のためのセッションもあります。こうしたセッションなどのすべての情報は、I/O の Web サイトにあります。今年の Google I/O では、セッションやニュースだけでなく、Google 関係者や他のデベロッパーとバーチャルにつながることができる楽しい仕掛けがたくさんあります。I/O Adventure の Android ドームをチェックしてください。新しいブログ投稿、ビデオ、コードラボなどをご覧いただけます。Jetpack Compose スキルを試したり、ドーム内部の自動車を巡るバーチャルツアーにもご参加ください!(注:会期外でアクセスできないプログラムがありますのでご了承ください)