この記事は Sara Hamilton による Android Developers Blog の記事 " Leading Health and Fitness Apps Roll Out Health Connect Integrations " を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
アプリ デベロッパーの皆さんは、昨年導入されたヘルスコネクト (英語) を使って、健康とフィットネスのデータを共有するプラットフォームに早期アクセスできます。このプラットフォームは、ユーザーの同意のもと、Android デバイスをまたいでデータを安全に共有するもので、Samsung と連携して開発しています。この仕組みにより、アプリ間の接続がシンプルになり、ユーザーは一元的にプライバシーを管理できるようになります。今回、プライバシー設定を集中的に管理する場所として、ヘルスコネクト(ベータ版)アプリを Google Play でダウンロードできるようにしています。細かい制御によってどのアプリがどの時点でデータにアクセスするかを確認できます。
2022 年 11 月 14 日以降、10 以上の健康、フィットネス、ウェルネス関係のアプリで、このプラットフォームとの連携機能が公開されています。これらのアプリには、ヘルスコネクトの先行ユーザーである MyFitnessPal、Oura、Peloton も含まれています。
この連携機能の第 1 弾を通して、ヘルスコネクトがデベロッパーに多くの重要なメリットをもたらしていることがわかっています。
健康とフィットネスのアプリ同士が相互に連携できるようになることで、それぞれのアプリが質の良い総合的な健康情報をユーザーに提供できるようになります。
これまでは、複数の API 接続を駆使しなければ別のアプリとデータを共有できなかったため、連携機能の開発やメンテナンスには費用がかかっていました。それがデベロッパーのデータ共有能力の足かせになっていたため、ユーザーが別のアプリでデータを活用するのは困難でした。
ヘルスコネクトを使うと、新しいアプリとの連携機能はヘルスコネクトから新しいデータを読み取るだけで簡単に開発できます。新たな連携機能を開発する必要はありません。
たとえば、Android ユーザーは、Oura、MyFitnessPal、WeightWatchers、Lifesum といったアプリで Peloton ワークアウトを同期したりその実績を反映したりできるようになります。ヘルスコネクトとの連携機能が 1 つあるだけで、Peloton メンバーはワークアウトの統計情報を健康サポートアプリのエコシステム全体に共有できるようになります。
ヘルスコネクトには標準データスキーマがあり、6 つのカテゴリで 40 種類以上のデータがサポートされています。スキーマは直感的に利用でき、エクササイズ、睡眠管理、バイタルサインなどのさまざまなユースケースに対応しています。ヘルスコネクトに格納されているものであれば、どんな種類のデータでも数行のコードだけで読み書きできます。さらに、ヘルスコネクトは複雑な集計もサポートするので、アプリのユースケースに合わせて自由自在にクエリをカスタマイズできます。
「当社のエンジニアは、既存のアーキテクチャを簡単にヘルスコネクトの API に対応させ、栄養、水分補給、運動、歩数といったユーザーの健康データを読み書きすることができました。この連携機能があれば、ヘルスコネクトに書き込みを行うすべてのサードパーティ製アプリのデータも利用できるので、ユーザーの選択肢が広がります。同時に、細かな権限設定でどのデータを共有するかを選べるので、ユーザーの柔軟性も向上します」
– MyFitnessPal の最高技術責任者、Jason Peterson 氏
これまで、ユーザーは複数のアプリを開いてデータの権限を管理しなければなりませんでした。また、権限管理の UI はデベロッパーが自前で準備する必要がありました。
ヘルスコネクトを使うと、ユーザーは 1 か所で簡単に権限を管理でき、細かい制御によってどのアプリがどの時点でデータにアクセスしているかを確認できます。
デベロッパーにとって、ヘルスコネクトは権限管理ハブであり、すぐに設定して使える詳細な権限 UI です。
さまざまな種類のデータが示された詳細権限画面
たとえば、Signos はヘルスコネクトを使った権限チェックを簡単に設定できました。「うれしい驚きの 1 つは、ユーザーのオンボーディング UX でした」と Signos のデベロッパーである Jake Smith 氏は話します。「簡単に挿入できるコードで権限を設定できるので、ユーザーにもメリットがあります」
多くのデベロッパーがすでにヘルスコネクトとの連携をしています。ユーザーに高度な情報を提供できるチャンスを見逃さないように、ぜひヘルスコネクトを導入してください。ドキュメント、便利な動画チュートリアル (動画/日本語字幕あり) 、コードサンプルを確認し、さっそく今日から開発を始めましょう!
この記事は Wolfram Klein による Android Developers Blog の記事 " Android 13 for TV is now available " を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
2022 年 12 月 2 日、Android TV OS (英語) の最新版となる Android 13 for TV をリリースしました。この最新リリースでは、パフォーマンスとユーザー補助がさらに改善され、次世代 TV 向けに魅力的なアプリを開発できるようになっています。
ここでは、Android 13 for TV の新機能をいくつか紹介します。
Android 13 では大画面向けの新しい API が導入され、さまざまな種類のデバイスで高品質なユーザー エクスペリエンスを実現できるようになっています。
Android 13 では、TV の操作を柔軟にする新機能が導入されます。
TV 向けの Android 13 に導入されるその他の新機能の詳細については、Android TV OS デベロッパー サイト (英語) をご覧ください。ADT-3 と Android TV エミュレータの両方で、新しいリリースが公開されています (英語)。Google TV インターフェースか、標準の Android TV インターフェースのどちらかを選択してテストできます。いつものことですが、Android TV OS をサポートし続けてくださるデベロッパーの皆さんに感謝いたします。皆さんが大画面向けに作り続けているイノベーションあふれるすばらしいアプリを見るのを楽しみにしています。
この記事は Android Developers Team による Android Developers Blog の記事 " The new Google Pixel Watch is here - start building for Wear OS! " を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
2022 年 10 月 6 日の Made by Google イベント (英語) を見た方は、Pixel ポートフォリオ (英語) の最新デバイスをご覧になったはずです。スマートフォンの Pixel 7 と Pixel 7 Pro に加えて、2 つの最新フォーム ファクタを紹介しました。それが、Google Pixel Tablet1 (Google のまったく新しいタブレット、2023 年発売予定)と、Wear OS by Google を搭載した最新デバイス Google Pixel Watch です。 このスマートウォッチ販売が始まった今こそ、これからのホリデーシーズン中に多くの消費者の手に渡ることになる新しいスマートウォッチにアプリが対応する絶好のタイミングです。ここでは、Wear OS の最新アップデート、皆さんのアプリの体験を向上する方法、美しく効率的な Wear OS アプリの開発に着手する方法についてお知らせします。
Google Pixel Watch には Wear OS が搭載されており、プラットフォームの最新アップデートである Wear OS 3.5 が含まれています。この最新バージョンの Wear OS を利用できる Wear OS デバイスは他にもあります。新しい Wear OS は、スムーズかつ簡単に操作できるように設計されており、タップやスワイプ、音声コマンドで必要な情報にアクセスできます。また、刷新された UI と高度な通知機能が搭載されているので、ユーザーが一目で確認できる情報が増えました。
こうした新機能をベースとして存分に活用しながら開発を進められるというメリットを実感していただくため、少ない開発時間とコード行数でアプリを実行できる最新の宣言型 UI ツールキット、Compose for Wear OS を2022 年にすでにリリースしています。すべて Kotlin で構築されており、API が安定版であり、開発に利用できることを示すバージョン 1.0 (英語) になっています。1.0 リリースの内容は次のとおりです。
Wear OS 向けのアップデートに含まれるもう 1 つのうれしい内容は、短時間でタイルを作成できる Tiles Material ライブラリ (英語) のリリースです。Tiles Material ライブラリには、Wear OS 向けの最新マテリアル デザインに対応した既製のマテリアル コンポーネントやレイアウトが含まれています。この使いやすいライブラリには、ボタン用コンポーネントや進捗状況を示すアークなどが含まれているため、ゼロからコンポーネントを作る必要がなくなります。さらに、既製のレイアウトが使えるので、タイル開発を大幅に加速でき、タイル向けのマテリアル デザイン ガイドラインに確実に従うことができます。
また、先日リリースされた Android Studio Dolphin にはさまざまな Wear OS 機能が追加されているので、アプリ、タイル、ウォッチフェイスがすべての Wear OS 3 デバイスに対応することができます。Wear OS エミュレータ ツールバーのアップデート、直感的なペア設定アシスタント、ウォッチフェイスやタイル、ウォッチフェイスの追加機能をすばやくテストできる新しいダイレクト サーフェス起動機能などが含まれ、WearOS 向けの高度なアプリをこれまでになく簡単かつ効率的に作れるようになっています。
皆さんのアプリをはじめとして、Google アプリや Spotify、Strava、Bitmoji、adidas Running、MyFitnessPal、Calm など、さまざまなアプリが Wear OS 向けにすばらしい体験を提供しています。2022 年は、Todoist (英語) 、PeriodTracker、Outdooractive (英語) がアプリを Compose で再構築し、アプリの開発をシンプルかつ効率的にできるツールや API のメリットを活用しています。Outdooractive は、Compose for Wear OS を使うことで、チームの開発時間を 30% 削減できました。
Google Pixel Watch の発表と合わせて、Google 製アプリによる新たな体験 も提供します。ここでは、すばらしいユーザー エクスペリエンスを実現するもう 1 つの方法として、新しいハードウェア機能が使われています。Google フォトでは、お気に入りの写真を Google Pixel Watch のウォッチフェイスに設定できるようになります。Google Pixel Watch にはカスタマイズ可能な 19 個のウォッチフェイスが搭載されており、各ウォッチフェイスで、たくさんのカスタマイズ オプションが提供されています。Google アシスタント (英語) も搭載されているので、Google Pixel Watch ユーザーは Wear OS アプリや内蔵の Google アシスタント機能を使ってお気に入りのアプリを操作できます。たとえば、Google Home の最新アップデートでは、Wear OS アプリを使うか、時計に「Hey Google」と話しかけることで、スマートホーム デバイスを簡単に制御できます。また、温度を調整したり、来客や配達があったときに Nest ドアベルから通知を受け取ったりすることなど、あらゆる操作が可能です。2
最新の Wear OS プラットフォームやハードウェアのアップデートを活用すれば、健康&フィットネス アプリにたくさんのチャンスが生まれます。Google Pixel Watch には、プロセッサ レベルに至るまで最適化されたオンデバイス機械学習による正確な心拍数トラッキングなど、Fitbit のすばらしい健康&フィットネス機能が含まれており、Google Pixel Watch で呼吸数、心拍数の変動、睡眠の質といった主要な指標を把握できます。このようにデータの質が向上しているので、健康&フィットネス アプリが有意義な情報や体験をユーザーに提供できる場面が増えています。
Wear OS と Google Pixel Watch のアップデートや機能強化により、目に見える形でアプリを差別化できるようになっています。さまざまなアプリが、こういった機能を使ってユーザーを喜ばせています。皆さんもぜひお試しください。
すばらしいデバイスがすでにそろっている Wear OS エコシステムに、最新デバイスの Google Pixel Watch が加わります。API やツールの改善から刺激的な新しいハードウェアまでがそろった今こそ、Wear OS アプリの開発に着手する絶好のチャンスです。Compose for Wear OS 向けの開発を始めるには、こちらの学習パスの順を追った説明をご覧ください。それからクイック スタートガイドなどのドキュメントを確認し、Wear OS 向けの Compose の Codelab でハンズオン形式での実習に挑戦しましょう。
さらに詳しい情報については、Google I/O の Wear OS セッション (動画/英語) をご覧ください。また、まもなく開催される Android Developer Summit (英語) の基調講演やテクニカル セッションで、Wear OS の最新の重要な情報をお聴きください。*日本語字幕は、YouTube の自動字幕機能から日本語を選択してください
Made by Google についてのお知らせをいち早く知りたい方は、こちらの公式ブログ (英語) をご覧ください。Pixel エコシステムに加わるもう 1 つのすばらしいフォーム ファクタである Google Pixel Tablet 向けに開発を始めたい方は、タブレット向けにアプリを最適化する方法 (英語) をご覧ください。
免責事項 :
1. Google Pixel Tablet は、米連邦通信委員会などの規制機関の規則によって義務づけられている認可を受けていません。このデバイスは、義務づけられている法的な認可が得られるまで、販売などの方法で流通されない可能性があります。
2. 対応するスマートホーム デバイス(別売)が必要です。
この記事は Kat Kuan による Android Developers Blog の記事 " Learn Jetpack Compose at a Compose Camp near you! " を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。日本で開催される Compose Camp の詳細はこちらをご確認ください。
Jetpack Compose は、Android の UI 開発をシンプルにする Android の最新ツールキットです。Twitter、Airbnb (英語)、Google Play など、すでに世界中の多くのアプリで使われています。まだ使っていない方は、今が使い始める絶好のチャンスです。もっと簡単に Compose を学習していただくため、対面とバーチャルに対応したセッションとして、各地で Compose Camp (英語) を始めました。 (※ 日本で開催される Compose Camp の詳細はこちらをご確認ください。) Jetpack Compose を使って Android アプリを開発する方法を仲間と一緒に学ぶことができます。さっそく「キャンプ道具」を集めて、近くの Compose Camp (英語) に参加する方法を確認しましょう!
Jetpack Compose を使うと、コードの使用量と保守作業が少なくなるため、短期間でアプリを開発できます。また、API も直感的で強力なので、Android の最高の機能を使って優れたユーザー エクスペリエンスを提供できます。Google は、あらゆる人が Android 開発を学べるチャンスを増やせるようにする努力を続けており、その一環として、最新のベスト プラクティスをさまざまな学習スタイルで学んでいただけるようにしています。グループで学習を進めると、とても楽しく効果的に学べるという意見をたくさんの方からいただいています。それを受け、世界各地で Compose Camp (英語) を開催することにしました。ガイドしてくれる仲間や「キャンプ リーダー」のサポートを受けながら、Compose で Android アプリを開発する方法を学びましょう。
Android 開発が初めての方やプログラミングを始めたばかりの方は、Beginner トラックをご覧ください。基本的なプログラミングの考え方や、Jetpack Compose でユーザー インターフェースを作成する方法などのアプリ開発の基礎を学ぶことができます。
ビューから Compose に移行する方法を学びたい、あるいは高度な機能を使って UI を構築する方法を知りたいという Android デベロッパーには、Experienced トラックがおすすめです。Jetpack Compose のポイントから始めて、Compose のさまざまなトピックを掘り下げます。
他の人と一緒に学ぶと、コミュニティの一員としてアドバイスやサポートを受けられて楽しいという声がたくさんの方から寄せられています。Google デベロッパー コミュニティ (英語) は、同じ業界の学習者や仲間とつながりを持つ絶好のチャンスです。協力して技術的な難題に向かったり、お互いに技術を学び合って直接プロジェクトに活用したりできます。これからの数か月間、こういったコミュニティが世界中で Compose Camp を開催しますので、近くのイベントを探してみてください。 (※ 日本で開催される Compose Camp の詳細はこちらをご確認ください。)
イベントを開催して参加者に教えるのも、専門性を育む絶好のチャンスです。皆さん自身が「キャンプ リーダー」になる (英語) こともできます。学習に役立つ教材、セッションの進め方についてのガイド、サンプル スライド、参加グループを募るための資料など、Compose Camp を開催するために必要なものは、すべて揃えてあります。
「ソロキャンプ」の方が好きだという方は、自分のペースで学べるオンライン コースを確認しましょう。Android 開発を始めたばかりの方には、Android Basics with Compose コースがおすすめです。すでに Android 開発の知識をある程度お持ちの方は、Jetpack Compose for Android Developers コースをご覧ください。
ここで紹介したリソースが、Android 開発と Compose の学習に役立つことを願っています。Compose Camp (英語) で皆さんとお会いできるのを楽しみにしています。
この記事は Jolanda Verhoef による Android Developers Blog の記事 " Jetpack Compose 1.2 is now stable! " を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
2022 年 7 月 27 日、Android の最新ネイティブ UI ツールキットである Jetpack Compose のバージョン 1.2 をリリースしました。そして、引き続きロードマップを構築しています。今回のリリースには、ダウンロード可能なフォント、遅延グリッドといった新機能に加え、フォーカス、マウス、入力ハンドリングの改善といった、タブレットや Chrome OS 向けの機能強化が含まれています。
スマートフォン、タブレット、折りたたみ式向けに新しい Android アプリを開発する場合、私たちは Compose を推奨しています。今回は Compose for Wear OS 1.0 (英語) もリリースしたので、Wear OS アプリ開発でも Compose が最適な手段になります。
Twitter エンジニアリング チームなどのデベロッパーは、Compose を使って開発のスピードを上げています。
「Compose によって生産性が劇的に向上しました。コンポーズ可能な関数を書くのは、カスタムビューを作成するよりもはるかに簡単で速く、デザイナーの要件もたやすく満たせます」
Compose 1.2 には、スマートフォン、タブレット、折りたたみ式向けのたくさんのアップデートが含まれています。試験運用版から安定版になった新しい API があり、新しいバージョンの Kotlin もサポートされています。サンプル、Codelab、Accompanist ライブラリ、MDC-Android Compose Theme Adapter はすでにアップデートされ、Compose 1.2 対応になっています。
注 : Compose Compiler ライブラリを 1.2 にアップデートするには、Kotlin 1.7.0 が必要です。今後、Compiler のリリースは他の Compose ライブラリのリリースから切り離されます。この点に関する詳しい説明は、Jetpack Compose ライブラリが独立したバージョニングに関するブログ記事をご覧ください。
複数の機能や API が安定版として追加されました。主なものを紹介します。
Compose に新機能を導入する作業も続いています。いくつかの主な機能を紹介します。
@OptIn (英語) を使って新しい API を試し、フィードバックをお寄せください!
コミュニティから報告されたたくさんの問題を修正しました。主なものを紹介します。
Issue Tracker にバグレポートや機能リクエストをお送りいただき、大変感謝しています。Compose の改善や、皆さんに必要な API を作るうえで役立っています。Compose をより良いものにするために、今後もフィードバックをお願いします!
次に登場するのは何でしょうか。現在検討中または作業中の機能は、更新版のロードマップで確認できます。たとえば、項目の遅延追加や遅延削除時のアニメーション、フロー レイアウト、テキスト編集の改善などです。
Jetpack Compose は、皆さんから寄せられた要望をもとに進化し続けます。すでに多くのアプリで Jetpack Compose が本番環境として使われているのを見て、とてもうれしく思っています。そして、Jetpack Compose でアプリ開発がどのように改善したかを、皆さんの多くが共有しています。皆さんの次のアプリのリリースを楽しみにしています!
Compose をお楽しみください!
この記事は Tom Grinsted による Android Developers Blog の記事 " Google Play @ Google I/O - 3 updates you need to know " を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
※ 諸事情により Google I/O 関連記事の投稿のタイミングが前後してしまいました。申し訳ありません。
Google Play チームは、インストール数の増加、エンゲージメントの向上、収益化の加速など、常にデベロッパーの皆さんのビジネス成長に役立つ新たな方法に取り組んでいます。そこで、見逃してしまった方のために、2022 年の Google I/O で発表したビジネス成長に寄与する新しい方法トップ 3 を紹介します。
ストアのカスタム掲載情報 が大幅にアップデートされ、ユーザーごとに適切なメッセージを表示できるようになっています。これにより、優れた第一印象を与えられる新たな方法を提供できました。
カスタム掲載情報への一意なディープリンクを生成できるので、ユーザーがどのチャンネルやサイトからアクセスしてきたかによって掲載情報を変えることができます。さらに、Google Play Console でカスタム掲載情報ごとに分析情報を確認できるため、それぞれの効率性を把握し、徐々に最適化することもできます。
すべてのデベロッパーが最大 50 個のストアのカスタム掲載情報を作成でき、これまで以上にユーザーに合ったストーリーを伝えることができます。また、掲載情報 1 つにつき 5 つまでの実験ができることから、大きな最適化の余地が生まれます。
LiveOps は、Google Play ストアでゲームやアプリの期間限定イベント、特典、メジャー アップデートを宣伝するためのセルフサービス マーチャンダイジング ユニットです。ベータ版に参加しているデベロッパーは、インストールの促進、エンゲージメントの向上、販売増進に役立つコンテンツを送信できます。
さらに、ディープリンクを使ってユーザーをアプリやゲームの最適な部分に直接誘導し、Google Play Console の新しい LiveOps レポーティング ダッシュボードで成果を確認できるようになっています。このレポートでは、各イベントのパフォーマンス指標を細かく確認したり、経時的な結果や、獲得、オープン、アップデートなどの実績ごとの結果を表示したりできます。
LiveOps の詳しい情報やベータ版プログラムへの参加申請は、こちらをご覧ください。
定期購入のビジネスモデルが進化するにつれて、多くのデベロッパーから、定期購入を販売する方法の柔軟性を向上させて複雑さを低減してほしいという声が寄せられています。そこで、大きなアップデートとして新しい定期購入機能 (英語) をリリースし、定期購入ごとに複数のベースプランとオファーを設定できるようにしました。複数のオファーを作成してサブスクリプション ライフサイクルのさまざまな段階をサポートすることで、新しい登録者を獲得したり、アップグレードを推奨したり、既存の登録者を維持したりできます。同時に、増える一方だった SKU を管理するコストと複雑さを大幅に減らすことができます。
さらに、期間限定でアクセス可能なプリペイド プランも利用できるので、従量課金が一般的な地域や、まだ自動更新プランに登録するほど熱心でないユーザー向けに優れた選択肢となります。アクセス期間は、期限が切れる前にアプリ内や Google Play ストアの定期購入画面からいつでも簡単に延長できます。
ここでは、Google Play で皆さんの成長と発展を支援するために行った多くのアップデートの中から 3 つを紹介しました。他の項目について知りたい方は、Google I/O の Google Play 関連の全プレイリスト (日本語字幕は YouTube の自動翻訳機能で日本語を選択してください) をご覧ください。
この記事は Dan Galpin による Android Developers Blog の記事 " 3 things to know about Android Privacy, Platform & Security from Google I/O'22 " を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。※一部 I/O 関連記事の翻訳が遅れております。内容が前後してしまい、申し訳ありません。
Google I/O では実にさまざまなことが紹介されましたが、その中でプライバシー、セキュリティ、Android プラットフォームに関して大きな発表がありました。以下で説明しますが、ぜひ YouTube (英語) でこのトピックのプレイリストもご覧ください。
2022 年 4 月に、Android のプライバシー サンドボックスの初めてのデベロッパー プレビュー (英語) 版を公開したので、SDK ランタイムと Topics API をいち早く確認できます。これは、無料のコンテンツやサービスへのアクセスを危険にさらすことなく、ユーザーのプライバシーを強化した新しい広告ソリューションの実現に向けた仕組みです。
これら新技術の予備テストをして、どのようにソリューションに採用できるかを評価してください。そしてフィードバックの提供をお願いします。詳しくは、Android のプライバシー サンドボックスの概要 (動画/英語) を説明したセッションをご覧ください。
新しい Google Play SDK Index は、特によく使われる 100 以上の商用 SDK を掲載したパブリック ポータルです。SDK がリクエストするアプリのパーミッション、使われているアプリの統計情報、最もよく使われている SDK のバージョンといった情報が含まれており、SDK がビジネスやユーザーにとって適切かどうかを評価できます。Android Studio Electric Eel では、Google Play SDK Index に基づいた依存関係インサイトを見ることができます。ライブラリの作成者が特定のバージョンに「古いバージョン」のマークを付けている場合、その依存関係定義を確認しようとすると、対応する lint 警告が表示されます。ブログ記事を確認し、Google Play の新機能 (英語) や Android 開発ツールの新機能 (英語) についてのセッションを視聴しましょう。
Android 13 の 2 回目のベータ版が公開 (英語) されています。アプリごとの言語設定のサポートやテーマ別アプリアイコンなどの Android 13 の機能でアプリを強化できます。システムの「戻る」の基本 (動画/英語) についてのセッションでは、Android 13 の新しいオプトイン API について説明しています。この API により、「戻る」を扱うことを事前にシステムに伝えることで、予想可能でスムーズな「戻る」操作を実現できます。
ユーザーのプライバシーを中心としたアプリの開発 (動画/英語) についてのセッションは、新しい通知パーミッション、プライバシーを保護する写真ピッカー、近くのデバイスとのペア設定やメディア ファイルへのアクセスの際の権限の改善など、アプリをプライバシーとセキュリティの最新機能に対応させる際の参考になります。
Android メディアの新機能 (動画/英語) に関するセッションは、HDR 動画や Bluetooth LE オーディオなどの最新の標準を組み込む際に役立ちます。また、Android カメラの新機能 (動画/英語) に関するセッションでは、動画キャプチャや WYSIWYG カメラ コントロールのサポートなど、現在 CameraX で行っていることの「スナップショット」についてお話しします。
こちらから Pixel デバイスを登録すると、すぐに試すことができます。Android 13 ベータ版は、ASUS、Lenovo、Nokia、OnePlus、Oppo、Realme、シャープ、TECNO、Vivo、Xiaomi、ZTE など、さまざまなデバイスでテストできます。詳しくは developer.android.com/13 (英語) をご覧ください。
ここで紹介したのは、私たちが行っている Android プラットフォーム、ユーザーのプライバシー、セキュリティの改善のごく一部です。詳しくは、プレイリスト (動画/英語) をご覧ください。
この記事は Jolanda Verhoef による Android Developers Blog の記事 " Independent versioning of Jetpack Compose libraries " を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
2022 年 6 月 29 日より、さまざまな Jetpack Compose ライブラリが独立したバージョニング スキームに移行します。これにより、androidx.compose.compiler や androidx.compose.animation などのサブグループが個別のリリース サイクルに従えるようになります。
androidx.compose.compiler や androidx.compose.animation
これらのライブラリに独立したバージョニングを導入することで、これまで暗黙的に結合されていた依存関係が切り離されます。そのため、アプリの段階的なアップグレードがしやすくなり、最新の Compose 機能を維持できるようになります。
バージョンが 1 つになっていた Compose から最初に切り離されるライブラリは、Compose Compiler です。2022 年 6 月 29 日より、Kotlin 1.7.0 をサポートする 1.2.0 安定版をリリースしました。このリリースには、Compose UI ライブラリおよび Compose Runtime ライブラリとの下位互換性と上位互換性の両方が備わっています。つまり、Compose Compiler を 1.2.0 安定版にアップグレードして Kotlin 1.7.0 を使いつつ、他の Compose ライブラリは 1.1.0 安定版などの現行バージョンのままにすることができます。
アプリで使っている Compose Compiler のバージョンをアップグレードするには、build.gradle ファイルで kotlinCompilerExtensionVersion を指定します。
build.gradle
kotlinCompilerExtensionVersion
android { composeOptions { kotlinCompilerExtensionVersion = "1.2.0" }}
android {
composeOptions {
kotlinCompilerExtensionVersion = "1.2.0"
}
Compose と Kotlin は密接に結びついており、Kotlin のバージョンをアップグレードするために Compose Compiler のアップデートが必要になるというフィードバックがありました。Compose と Kotlin の両方で最も優れた最新の機能(とバグの修正)を使っていただけるように、Compose Compiler の安定版は頻度を上げてリリースする計画です。つまり、Compose Compiler のバージョン番号は、他のほとんどの Compose ライブラリよりも上がるペースが早くなります。Compose Compiler では上位互換性と下位互換性の両方が確保されるので、新しいバージョンがリリースされたら、すぐにアップグレードできます。
Compose Compiler は Kotlin コンパイラ プラグインなので、お使いの Kotlin のバージョンと互換性のあるバージョンの Compose Compiler を使う必要があります。Compose-Kotlin 互換性マップを参考に、プロジェクトに合ったバージョンを選んでください。
Compiler ライブラリを異なるバージョニング スキームに移行することは、Compose ライブラリ グループ間のバージョン依存を解消するための第一歩です。今後、他の Compose ライブラリでも新しい安定版リリースが公開され、Compose Compiler とは別にそれぞれのリリース サイクルに従うことになります。
独立したバージョニングに対応し、さっそく最新バージョンの Compose Compiler と Kotlin (英語) を使ってみましょう。
皆さんが Compose で作るアプリを楽しみにしています。
Google Play は、ユーザーとデベロッパーの皆さんのプライバシーと安全が、最も重要であると考えています。 そのため、大きなポリシーの改定に伴い、デベロッパーの皆さんに対応いただくことが必要となる場合に、その情報を広くお伝えするためのウェビナーを開催しています。
2022 年 8 月 17 日に開催されたポリシー ウェビナーでは、 2022 年 7 月末に適用となったポリシー変更の内容を中心にお伝えしました。本ウェビナーは、Google Play ストアに向けたアプリの開発やパブリッシングを担う企業や個人の皆さまを対象にした、オンライン ウェビナーで、事前にいただいた質問に回答する場も設けております。
この記事では、イベント内で解説した内容と、ご紹介した関連動画やリソースをまとめます。
アプリで定期購入アイテムを販売する場合、ユーザーが定期購入を管理または解約する方法を明確に開示しなければなりません。また、定期購入をオンラインで簡単に解約できる手段にアプリ内からアクセスできるようにすることも必要です。この要件を満たすには、アプリのアカウント設定(または同等のページ)に次の項目を追加してください。
または
審査プロセスを妨げ、不承認の理由ともなる、アプリのログイン認証の欠落のような、一般的な違反を回避するために、Google Play Console を通じて情報を送信する場合には、必ず以下のことを行ってください。
ユーザーがアプリに投稿したコンテンツが他のユーザーにも、または少なくともアプリユーザーの一部にも表示される、またはアクセスできるようになる場合、それをユーザー作成コンテンツ(UGC)といいます。アプリが UGC カテゴリに該当する場合、必要なモデレーションを実施しレポートシステムを実装する必要があります。
UGC ポリシー違反の例
UGC アプリに性的なコンテンツが表示されている場合でも、(1)主に性的でないコンテンツへのアクセスを提供しており、(2)性的なコンテンツを積極的に宣伝または推奨していない場合は、「偶発的」な性的コンテンツと見なされます。ただし、適用される法律で違法と定義されている性的なコンテンツや、児童を危険にさらすコンテンツは、「偶発的」とは見なされず許可されません。
以下のすべての要件を満たしている場合、その UGC アプリには偶発的な性的コンテンツが含まれている可能性があります。
以下にて、UGC ポリシーの要件について確認しましょう。UGC が含まれるアプリや UGC を提供するアプリは、次の項目を守る必要があります。
2021 年末 Google Play の「性的なコンテンツと冒とく的な表現に関するポリシー」をアップデートしました。Google は、ユーザーにとっての性的なコンテンツの許容範囲が国によって違うことを認識しています。このアップデートでは、対象となるコンテンツが許容される一部の国ではアプリを公開できるが、対象となるコンテンツが許容されない国ではアプリを公開できなくなるということをポリシーに明記しました。
また、これに伴い、日本での文化的背景を鑑みた結果、これまで Google Play で禁止されてきたウェブ漫画における偶発的な性的描写を日本の Google Play ストアでは許可する旨のポリシーのアップデートを行いました。
今回のアップデートは、成人向けコンテンツを許容するものではございません。以下に該当する場合のみ、漫画アプリにおける性的描写が許容されます。
引き続き、性的なコンテンツをアクティブにプロモーションする行為、違法な性的コンテンツや児童を危険にさらすコンテンツは許可されません。
イベント内では、その他のアップデートに関しても説明を行いました。アーカイブ配信は、こちらのウェブサイトから登録後、いつでもご視聴いただけますので、イベントを見逃した方は、ぜひアーカイブ配信もご活用ください。
今後もお寄せいただいたご意見には真摯に向き合い、ポリシーの改善を続けていきます。引き続き Google Play を安全で、信頼できるプラットフォームにするために、ご協力をお願いします。
この記事は Fred Chung による Android Developers Blog の記事 " Privacy Sandbox Developer Preview 3: Support for conversion measurement, custom audiences, and ad selection " を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
Android のプライバシー サンドボックスは、ユーザーのプライバシーを保護しながら、アプリの効果的でパーソナライズされた広告エクスペリエンスを実現する新しいソリューションを開発することを目的としています。私たちは、最初のデベロッパー プレビュー (英語) 以降も、Google は、プロジェクトの進捗に関する最新情報をお伝えするとともに、デベロッパー プレビューのタイムライン、トピックの分類、SDK のバージョン管理など、あらゆることについて業界と連携を続けています。皆さんのフィードバックに感謝しています。
2022 年 6 月 22 日に、デベロッパー プレビュー 3 をリリースしました。これには、コンバージョン測定やリマーケティングのユースケースに対応する API やデベロッパー リソースが含まれています。以前リリースした SDK ランタイムや Topics API のプレビューに加え、今回初めて Android 版のプライバシー サンドボックスのすべての主要 API のテストと影響の評価を開始することができます。
これらの API により、広告のクリック イベントやビューイベントがコンバージョン(新しいゲームのダウンロードなど)につながるタイミングを測定できます。これらの API は、アプリとウェブを横断するアトリビューションの主要なユースケースをサポートし、クロスパーティのユーザー識別子への依存を排除することで、ユーザーのプライバシーを向上させます。
今回のリリースには、アトリビューション レポート ワークフローの主要部分に関するクライアント側とサーバー側のセットアップとインタラクションを理解するのに役立つ、デベロッパー ガイドとサンプルアプリが含まれています。
テストをしやすくするため、今回のリリースには報告期間を上書きできる ADB コマンドが含まれています。Android クライアント API の詳細については、API リファレンスをご覧ください。
これらの API は Android 版 FLEDGE の一部で、サードパーティのデータ共有なしで、過去のアプリのエンゲージメントに基づいてカスタマイズされた広告をユーザーに提供するためのビルディングブロックを提供します。以下のことを実現できます。
詳細については、Custom Audience API と Ad Selection API (英語) リファレンス ページや、 リリースノートをご覧ください。
初めてデベロッパー プレビューを試してみる方は、SDK ランタイムと Topics API のデベロッパー ガイドに記載されているサポート対象となる機能もご確認ください。
Android 版のプライバシー サンドボックスの主要テクノロジーを復習したい方には、こちらの概要の動画を視聴し、設計案を確認することをお勧めします。
(日本語字幕は YouTube の自動翻訳機能で日本語を選択してください)
2022 年 6 月 22 日のデベロッパー プレビュー リリースには、機能の早期テストを開始し、フィードバックを共有 (英語) するために必要なリソースが含まれています。開発を始めるには、エミュレータまたはサポート対象の Pixel デバイスで SDK とシステム イメージをセットアップする手順をご確認ください。
Android 版プライバシー サンドボックス デベロッパー プレビューの詳細については、デベロッパー サイトをご覧ください。ニュースレターに登録 (英語)すると、定期的に最新情報を受け取ることができます。
この記事は Oscar Rodriguez による Android Developers Blog の記事 " Boost the security of your app with the nonce field of the Play Integrity API " を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
先日リリースされた Play Integrity API を使って、リスクや不正行為の可能性からゲームやアプリを保護する手段を講じるデベロッパーが増えています。
Play Integrity API は、アプリの整合性、デバイスの整合性、ライセンス情報に関する便利なシグナルに加えて、シンプルでありながら非常に便利な「ノンス」と呼ばれる機能を備えています。これを正しく使うと、Play Integrity API が提供する既存の保護をさらに強化できるほか、中間者 (PITM) 改ざん攻撃やリプレイ攻撃といった特定の種類の攻撃を軽減できます。
このブログ投稿では、ノンスとは何か、どのような仕組みで動作するのか、どのように使えばアプリの保護を強化できるのかについて、詳しく説明したいと思います。
暗号学やセキュリティ エンジニアリングにおいて、ノンス (number once) とは安全な通信の中で一度だけ使われる数を指します。ノンスは、認証、暗号化、ハッシュなど、さまざまなことに応用できます。
Play Integrity API でのノンスは、Base64 でエンコードされた暗号バイナリ blob です。API の整合性チェックを呼び出す前にこれを設定すると、API の署名付きレスポンスでその値がそのまま返されます。ノンスの作成方法、検証方法によって、Play Integrity API が提供する既存の保護をさらに強化したり、中間者 (PITM) 改ざん攻撃やリプレイ攻撃などの特定の種類の攻撃を軽減したりできます。
Play Integrity API が行うのは、署名付きレスポンスで実際のノンスデータをそのまま返すことだけです。そのため、有効な Base64 でさえあれば、どんな値でも設定できます。ただし、ノンスは、レスポンスをデジタル署名するために Google のサーバーに送られます。そのため、ノンスにはユーザー名、電話番号、メールアドレスなどの個人を識別できる情報 (PII) を一切設定しないことが非常に重要です。
アプリに Play Integrity API を設定したら、setNonce() メソッドを使ってノンスを設定します。または、Kotlin 版、Java 版、Unity 版、およびネイティブ版の API でも、同等の方法が提供されています。
setNonce()
Kotlin:
val nonce: String = ... // Create an instance of a manager.val integrityManager = IntegrityManagerFactory.create(applicationContext) // Request the integrity token by providing a nonce.val integrityTokenResponse: Task<IntegrityTokenResponse> = integrityManager.requestIntegrityToken( IntegrityTokenRequest.builder() .setNonce(nonce) // Set the nonce .build())
val nonce: String = ...
// Create an instance of a manager.
val integrityManager =
IntegrityManagerFactory.create(applicationContext)
// Request the integrity token by providing a nonce.
val integrityTokenResponse: Task<IntegrityTokenResponse> =
integrityManager.requestIntegrityToken(
IntegrityTokenRequest.builder()
.setNonce(nonce) // Set the nonce
.build())
Java:
String nonce = ... // Create an instance of a manager.IntegrityManager integrityManager = IntegrityManagerFactory.create(getApplicationContext()); // Request the integrity token by providing a nonce.Task<IntegrityTokenResponse> integrityTokenResponse = integrityManager .requestIntegrityToken( IntegrityTokenRequest.builder() .setNonce(nonce) // Set the nonce .build());
String nonce = ...
IntegrityManager integrityManager =
IntegrityManagerFactory.create(getApplicationContext());
Task<IntegrityTokenResponse> integrityTokenResponse =
integrityManager
.requestIntegrityToken(
.build());
Unity:
string nonce = ... // Create an instance of a manager.var integrityManager = new IntegrityManager(); // Request the integrity token by providing a nonce.var tokenRequest = new IntegrityTokenRequest(nonce);var requestIntegrityTokenOperation = integrityManager.RequestIntegrityToken(tokenRequest);
string nonce = ...
var integrityManager = new IntegrityManager();
var tokenRequest = new IntegrityTokenRequest(nonce);
var requestIntegrityTokenOperation =
integrityManager.RequestIntegrityToken(tokenRequest);
ネイティブ :
/// Create an IntegrityTokenRequest object.const char* nonce = ...IntegrityTokenRequest* request;IntegrityTokenRequest_create(&request);IntegrityTokenRequest_setNonce(request, nonce); // Set the nonceIntegrityTokenResponse* response;IntegrityErrorCode error_code = IntegrityManager_requestIntegrityToken(request, &response);
/// Create an IntegrityTokenRequest object.
const char* nonce = ...
IntegrityTokenRequest* request;
IntegrityTokenRequest_create(&request);
IntegrityTokenRequest_setNonce(request, nonce); // Set the nonce
IntegrityTokenResponse* response;
IntegrityErrorCode error_code =
IntegrityManager_requestIntegrityToken(request, &response);
Play Integrity API のレスポンスは、JSON Web Token (JWT) (英語) 形式で返されます。このペイロードは、次の形式の平文 JSON テキストです。
{ requestDetails: { ... } appIntegrity: { ... } deviceIntegrity: { ... } accountDetails: { ... }}
{
requestDetails: { ... }
appIntegrity: { ... }
deviceIntegrity: { ... }
accountDetails: { ... }
ノンスは requestDetails 構造に含まれており、次のような形式になっています。
requestDetails: { requestPackageName: "...", nonce: "...", timestampMillis: ...}
requestDetails: {
requestPackageName: "...",
nonce: "...",
timestampMillis: ...
nonce フィールドの値は、以前に API に渡した値と厳密に一致する必要があります。さらに、ノンスは Play Integrity API の暗号学的に署名されたレスポンスに含まれているため、レスポンスを受け取った後に値を改変することはできません。この特性を活用することで、ノンスを使ってアプリの保護を強化することができます。
悪意のあるユーザーが、オンライン ゲームでプレーヤーのスコアをゲームサーバーに報告する不正行為のシナリオについて考えてみましょう。この場合、デバイスは侵害されていませんが、プロキシ サーバーや VPN を使うと、ユーザーはゲームとサーバーとの間でネットワークに流れるデータを参照したり改変したりできます。そのため、悪意のあるユーザーは、実際のスコアはかなり低いにもかかわらず、高いスコアを報告できることになります。
この場合、Play Integrity API を呼び出すだけでは、アプリを保護することはできません。デバイスは侵害されておらず、アプリも正当なものなので、Play Integrity API が行うすべてのチェックに合格します。
しかし、Play Integrity API のノンスを使えば、操作の値をノンスにエンコードすることにより、ゲームのスコア報告という価値の高いアクションを保護できます。この実装は次のようになります。
この手順を示したのが次の図です。
保護すべき元のメッセージが署名結果と合わせて送信され、サーバーとクライアントの両方でノンスの計算にまったく同じメカニズムを使っている限り、メッセージが改ざんされていないことを示す強力な保証となります。
なお、このシナリオのセキュリティ モデルは、攻撃がデバイスやアプリではなく、ネットワーク上で行われることを前提としています。そのため、Play Integrity API が提供するデバイスとアプリの整合性シグナルも合わせて検証することが特に重要です。
別のシナリオについて考えてみましょう。ここでも、悪意のあるユーザーが Play Integrity API で保護されたクライアント サーバー アプリと不正な行為を行おうと、侵害したデバイスをサーバーが検出できないような形で使う場合です。
まず、攻撃者は正当なデバイスでアプリを使い、Play Integrity API で署名付きレスポンスを収集します。次に、侵害したデバイスでアプリを使い、Play Integrity API の呼び出しを傍受して、整合性チェックをする代わりに以前に記録した署名付きレスポンスを返します。
署名付きレスポンスは改ざんされているわけではないので、デジタル署名は問題なく見えます。そのため、アプリサーバーは正当なデバイスと通信していると誤解する可能性があります。これを リプレイ攻撃と呼びます。
このような攻撃に対する防御の第一線となるのは、署名付きレスポンスの timestampMillis フィールドを検証することです。このフィールドにはレスポンスが作成された時間を表すタイムスタンプが含まれており、たとえデジタル署名が正当であることが検証されても、古くて疑わしいレスポンスを検出する際に役立ちます。
timestampMillis
ただし、Play Integrity API のノンスを使ってレスポンスごとに一意な値を割り当て、レスポンスが以前に設定した一意な値と一致することを検証することもできます。この実装は次のようになります。
この実装があれば、サーバーがアプリに Play Integrity API の呼び出しを要求するたびに、毎回異なるグローバルに一意な値が使われることになります。そのため、攻撃者がこの値を予測できない限り、ノンスが期待される値と一致しないので、以前のレスポンスを再利用することはできなくなります。
上記の 2 つのメカニズムはまったく異なるメカニズムで動作しますが、アプリで両方の保護が同時に必要になる場合は、1 回の Play Integrity API 呼び出しで両方を組み合わせることができます。たとえば、両方の保護の結果を大きな Base64 ノンスに追加します。両方のアプローチを組み合わせた実装は、次のようになります。
ここで紹介したのは、ノンスを使って悪意のあるユーザーに対してアプリの保護を強化する方法です。アプリでプライベートなデータを扱っている場合や、アプリが不正使用に対して脆弱な場合は、Play Integrity API を使って脅威を軽減する措置を検討することをお勧めします。
Play Integrity API の詳細を知りたい方やこの API を使ってみたい方は、g.co/play/integrityapi のドキュメントをご覧ください。
Reviewed by Mari Kawanishi - Developer Marketing Manager, Google Play
この記事は Android Team による Android Developers Blog の記事 " eBay gets a 4.7 Google Play rating with tablet optimizations " を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
eBay は、全世界で何百万人ものセラー (購入者) とバイヤー (販売者) が利用している巨大なオンライン マーケットプレイスです。売り上げを伸ばすには最適なユーザー エクスペリエンスが鍵となります。eBay のアーキテクチャ チームの Android エンジニアたちは、eBay アプリをタブレットや折りたたみ式デバイスなどの大画面デバイス向けにさらに最適化できる余地があることに気づきました。さまざまなデバイスでシームレスなエクスペリエンスを提供するために、一刻も早く対応する必要があることは明らかでした。その努力のかいあって、eBay アプリは Google Play でたちまち星 5 つ中の 4.7 を獲得しました。
チームがユーザー統計を分析したところ、 Android の大画面デバイスで eBay アプリにアクセスしているタブレット ユーザーが驚くほど多いことがわかりました。うれしいことにこの新しいデータは、タブレットを使っている eBay ユーザーが、スマートフォンで同アプリを使っているユーザーよりもアプリの利用時間が長めな傾向にあることを示していました。
「大画面デバイスへの対応は、デベロッパーが時間をかけて取り組む価値があります。これは、当社のパブリック フィードバック チャンネルではっきり示されています」と eBay のモバイル アーキテクチャ チームの Android エンジニアである Matthew Mossman 氏は話しています。大画面デバイス向けにアプリを最適化することで、eBay のデベロッパーはユーザー エクスペリエンスの質を高め、ユーザーの満足度は大きく向上しました。
eBay アプリには非常にたくさんの情報が詰め込まれているため、セラーやバイヤーの人気を維持するには、公開されているアイテムの全容や詳しい説明をユーザーに示すことが重要でした。eBay の Android エンジニアたちは、タブレットの広い画面領域を活用することでユーザーのブラウズや検索のエクスペリエンスを向上できると考え、リスト / 詳細パターン (英語) を使って UX フローを改善しました。
Mossman 氏は、Android の強力なリソース修飾子メカニズムを使い、さまざまなデバイスに最適なレイアウトを設定しました。そして eBay のスマートフォン アプリのユーザー インターフェース コンポーネントのライブラリを更新し、ノートパソコンやタブレットでも利用できるようにしました。また、eBay のアーキテクチャ チームと機能チームは、業界の Android 標準化ガイドラインを採用して、アプリのカスタマイズ プロセスを一致させました。それにより、改善をこれまで以上に迅速にユーザーに提供できるようになりました。
Mossman 氏とデベロッパー チームは、タブレット ユーザー向けに eBay アプリを改善した後、Google Play で好意的なレビューが急増し、その結果 eBay Android アプリの評価も星 5 つ中 4.7 に上昇することができました。また、マテリアル デザイン コンポーネント (英語) やダークテーマのサポートなど、直感的で目を引く機能をアプリに組み込むと、ユーザーの満足度が大きく向上すると、デベロッパー チームは結論付けました。
さらに、eBay のトラストチームと検索チームも、営業活動を通じてユーザー エンゲージメントが向上したことを確認しています。特定のデバイスへの対応を強化するためにアプリ バンドルと動的機能を有効化すると、コミュニティ サポート ネットワークでのエンゲージメントが 20% 上昇しました。これは、タブレット ユーザーが新たな関心を寄せていることを表しています。
引用カード :「私たちはデザインとエンジニアリングのレベルに注力し、タブレット固有のエクスペリエンスもサポートしました。その結果うれしいことに、Google Play で星 4.7 個の評価を獲得することができました」– eBay アーキテクチャ チームの Android エンジニア、Matthew Mossman 氏
今後のリリースでは、eBay の Android アプリにも最近導入された UI 構築ツールキット、Jetpack Compose の豊富な機能を十分に活用できるようにする予定です。Firebase (英語) の指標とレポートも、eBay アプリの拡大とユーザーのメリットにつながる改善の機会をピンポイントで特定することに役立ちました。
eBay は大画面デバイス向けの最適化を計画したことで、デバイス固有のエクスペリエンスに注力することが、ユーザーとデベロッパー双方のメリットにつながることを実証しました。
Android や Chrome OS デバイス向けに大画面ならではのエクスペリエンスを構築するときはこちらの説明をご覧ください。
この記事は Amanda Alexander による Android Developers Blog の記事 " Google I/O 2022: What’s new in Jetpack " を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
Android Jetpack は、最新の Android 開発の重要な柱とも言えるものです。これは 100 以上のライブラリ、各種ツール、ガイドをまとめたスイートで、デベロッパーはベスト プラクティスに従ったり、ボイラープレート コードを減らしたり、Android のあらゆるバージョンやデバイスで一貫して動作するコードを書いたりしやすくなるため、アプリ独自の機能の構築に専念できるようになります。
Jetpack は Google Play のほとんどのアプリのアーキテクチャに使用されており、現在、上位 1,000 アプリの 90% 以上で使用されています。
こちらは、I/O での「Jetpack の新機能」 (動画/英語) の拡大版として、Jetpack の最新アップデートのハイライトを紹介したものです。
以下では、次の 3 つの主要な Jetpack アップデートについて取り上げます。
最後に、いくつかの重要な機能更新を紹介します。
アプリ アーキテクチャ ライブラリとコンポーネントを使うと、堅牢で、テストや保守がしやすいアプリを構築できます。
Room は、SQLite の抽象化レイヤを提供する、推奨のデータ永続性レイヤです。プラットフォームのユーザビリティと安全性を高めることができます。
Room 2.4 では、Kotlin Symbol Processing (KSP) のサポートが安定版になりました。当社の Kotlin コードのベンチマークでは、KSP の処理速度は KAPT の 2 倍に向上しています。Room 2.4 には enum と RxJava3 の組み込みサポートも追加され、Kotlin 1.6 に完全対応しています。
Room 2.5 には、Kotlin への完全な書き換えの最初の部分が含まれます。これにより、Java プログラミング言語で書かれた旧バージョンとのバイナリ互換性も確保しながら、今後の Kotlin 関連の機能向上の基盤を提供します。また、room-paging アーティファクトを利用した Paging 3.0 の組み込みサポートにより、Room クエリで PagingSource オブジェクトを返せるようになります。さらに、マルチマップ(ネストしたマップや配列)型戻り値を使用するリレーショナル クエリ メソッドがサポートされるので、デベロッパーは追加のデータ構造を定義せずに、JOIN クエリを実行できるようになります。
@Query("SELECT * FROM Artist JOIN Song ON Artist.artistName = Song.songArtistName")fun getArtistToSongs(): Map<Artist, List<Song>>
@Query("SELECT * FROM Artist
JOIN Song ON Artist.artistName =
Song.songArtistName")
fun getArtistToSongs(): Map<Artist, List<Song>>
AutoMigrations のアップデートによってデータベースの移行がシンプルになり、新たなアノテーションとプロパティのサポートも追加されます。@Database アノテーションの新しい AutoMigration プロパティを使うと、移行元や移行先のバージョンを宣言できます。また、Room でテーブルや列の変更に関する追加情報が必要な場合も、@AutoMigration アノテーションを使用して入力を指定できます。
Database( version = MyDb.LATEST_VERSION, autoMigrations = { @AutoMigration(from = 1, to = 2, spec = MyDb.MyMigration.class), @AutoMigration(from = 2, to = 3) })public abstract class MyDb extends RoomDatabase { ...
Database(
version = MyDb.LATEST_VERSION,
autoMigrations = {
@AutoMigration(from = 1, to = 2,
spec = MyDb.MyMigration.class),
@AutoMigration(from = 2, to = 3)
)
public abstract class MyDb
extends RoomDatabase {
...
DataStore ライブラリは、SharedPreferences の問題に対処する堅牢なデータ ストレージ ソリューションです。これは、さまざまな SharedPreferences のユースケースを置き換えることができる強力な仕組みです。使い方を詳しく知りたい方は、最新の Android 開発スキル : DataStore (英語) の動画シリーズと記事をご覧ください。アプリでこのライブラリを使用できるかどうかを確認する方法、依存関係の注入と合わせて使用する方法、SharedPreferences から Proto DataStore への移行などに関するガイドを提供しています。
Paging ライブラリを使うと、データの小さなチャンクを読み込んで表示することで、ネットワークやシステム リソースの消費を抑えることができます。アプリのデータは、RecyclerView や Compose の Lazy リストで、少しずつ段階的に読み込むことができます。
Paging 3.1 は Rx と Guava 統合の安定したサポートを提供します。Paging は Kotlin コルーチンをネイティブに使用していますが、これらの統合はその Java による代替機能を提供します。このバージョンでは、無効なデータや古いデータを表す新しい戻り値の型、LoadResult.Invalid が追加され、無効化の競合状態の処理が向上しました。また、新しい onPagesPresented API と addOnPagesUpdatedListener API によって、no-op 読み込みや空ページに対する操作の処理も向上しました。
Paging 3 についての詳細は、新しくシンプルになった、Android デベロッパー サイトの Paging の基本 Codelab をご覧ください。リストを表示するアプリに Paging ライブラリを組み込む方法を確認できます。
Navigation ライブラリは、アプリ内のさまざまなコンテンツ間を移動するためのフレームワークです。
今回、新しい navigation-compose (英語) アーティファクトによって、Navigation コンポーネントが Jetpack Compose に統合され、アプリでコンポーズ可能な関数を遷移先として使用できるようになりました。
また、複数バックスタック機能が改善され、状態を記憶しやすくなりました。NavigationUI で、ポップされた遷移先の状態の保存と復元が自動的に行われるようになったので、デベロッパーはコードを変更せずに複数のバックスタックをサポートできます。
navigation-fragment アーティファクトにより大画面サポートが拡張され、構築済みの 2 ペイン レイアウト実装が AbstractListDetailFragment で提供されます。このフラグメントは SlidingPaneLayout を使用して、一覧ペイン(サブクラスにより管理される)と詳細ペイン(NavHostFragment を使用)を管理します。
すべての Navigation アーティファクトは Kotlin で書き換えられ、ジェネリクスを使用するクラス(NavType のサブクラスなど)の null 可能性に関する改善が行われています。
最新の Android 開発のベスト プラクティスを取り上げたさまざまな動画と記事で、主要なアーキテクチャ ライブラリの詳しい使い方を説明しています。最新の Android 開発スキル : アーキテクチャ (動画/英語) シリーズをご覧ください。
パフォーマンス ライブラリを使用すると、パフォーマンスの高いアプリを構築したり、高パフォーマンスを維持するための最適化方法を特定したりして、エンドユーザーのエクスペリエンスを向上できます。
特にインストール直後にアプリを使用するときなど、アプリのスピードはユーザー エクスペリエンスに大きく影響します。そのような初回エクスペリエンスを向上するために、ベースライン プロファイルを作成しました。ベースライン プロファイルを使うと、アプリやライブラリが Android ランタイムにコードパスの使用方法に関するメタデータを提供します。ランタイムは、それを使って Ahead-Of-Time コンパイルの優先順位を判断します。このプロファイル データはライブラリ全体で集計され、baseline.prof ファイルとしてアプリの APK に保存されます。そしてインストール時に、アプリとその静的にリンクされたライブラリ コードの一部を事前コンパイルするために使用されます。これによってアプリの読み込みが速くなり、ユーザーがアプリを初めて利用する際のフレーム ドロップを減らすことができます。
Google ではベースライン プロファイルをすでに活用しています。ベースライン プロファイルを採用することで、Google Play ストアアプリの検索結果ページの最初のレンダリング時間は 40% 短縮しました。ベースライン プロファイルは Fragment や Compose などの一般的なライブラリにも追加されており、エンドユーザーのエクスペリエンスが向上しています。独自のベースライン プロファイルを作成するには、Macrobenchmark ライブラリを使用する必要があります。
Macrobenchmark ライブラリは、Jetpack のベンチマーク対象をより複雑なユースケース(アプリの起動、RecyclerView のスクロールやアニメーションの実行といった組み込み UI 操作など)に拡大することで、デベロッパーがアプリのパフォーマンスを深く理解できるようにします。Macrobenchmark は、ベースライン プロファイルの生成に使うこともできます。
Macrobenchmark がアップデートされ、テストのスピードが向上し、新たな試験運用版機能が加わりました。また、TraceSectionMetric を使用したトレースベースのカスタム時間測定もサポートされ、デベロッパーが特定のコード セクションをベンチマーク測定できるようになりました。さらに、AudioUnderrunMetric によるオーディオ バッファ アンダーランの検出が可能になり、オーディオのジャンクを分析しやすくなりました。
BaselineProfileRule は、ランタイム最適化に役立つプロファイルを生成します。BaselineProfileRule は他のマクロ ベンチマークと同じように機能し、デベロッパーはユーザー アクションをラムダ式のコードで表します。以下は、コンパイラが事前に最適化すべき重要なユーザー アクションが、コールド スタート(ランチャーからアプリのランディング アクティビティを開く)である場合の例です。
@ExperimentalBaselineProfilesApi@RunWith(AndroidJUnit4::class)class BaselineProfileGenerator { @get:Rule val baselineProfileRule = BaselineProfileRule() @Test fun startup() = baselineProfileRule.collectBaselineProfile( packageName = "com.example.app" ) { pressHome() // This block defines the app's critical user journey. Here we are // interested in optimizing for app startup, but you can also navigate // and scroll through your most important UI. startActivityAndWait() }}
@ExperimentalBaselineProfilesApi
@RunWith(AndroidJUnit4::class)
class BaselineProfileGenerator {
@get:Rule
val baselineProfileRule = BaselineProfileRule()
@Test
fun startup() = baselineProfileRule.collectBaselineProfile(
packageName = "com.example.app"
) {
pressHome()
// This block defines the app's critical user journey. Here we are
// interested in optimizing for app startup, but you can also navigate
// and scroll through your most important UI.
startActivityAndWait()
Macrobenchmark でのベースライン プロファイルの生成と使用に関する詳細と完全なガイドについては、Android デベロッパー サイトのガイドをご覧ください。
新しい JankStats ライブラリを使うと、アプリの UI のパフォーマンス上の問題の追跡や分析をすることができます。これには、一般に「ジャンク」と呼ばれる、レンダリング フレームのドロップに関するレポートが含まれます。JankStats は、FrameMetrics などの既存の Android プラットフォームを利用していますが、API レベル 16 以降で使用できるようになっています。
このライブラリは、プラットフォームに組み込まれている機能以外に、新たな機能も提供しています。フレーム ドロップの原因の特定に役立つヒューリスティック、レポートに UI の状態を含めることによる追加コンテキストの提供、分析用データのアップロードに使用できるレポート コールバックなどです。
この 3 つの JankStats の主要機能について説明します。
Tracing ライブラリは、トレース イベントをシステム バッファに書き込み、アプリのパフォーマンス プロファイリングができるようにします。Tracing 1.1 は、API レベル 14 以降のデバッグ不可ビルドのプロファイリングをサポートしています。これは、API レベル 29 で追加された <profileable> マニフェスト タグに似ています。
UI ライブラリにいくつかの変更が加えられ、大画面の互換性、折りたたみ、絵文字のサポートが向上しました。
ネイティブ UI を作成するための Android の最新ツールキット、Jetpack Compose の 1.2 ベータ版がリリースされました。ダウンロード可能なフォント、lazy layout、ネストされたスクロールの相互運用性など、いくつかの機能が追加され、より高度なユースケースをサポートするようになります。詳しくは、ブログ投稿 Jetpack Compose の新機能をご覧ください。
新しい WindowManager ライブラリは、デベロッパーがアプリをマルチウィンドウ環境や新しいデバイスのフォーム ファクタに対応させる際に役立ちます。このライブラリは、API レベル 14 以降でサポートされる共通 API サーフェスを提供します。
最初のリリースは、折りたたみ式デバイスのユースケースが対象で、コンテンツの表示方法に影響する物理特性の照会などが含まれています。
Jetpack の SlidingPaneLayout コンポーネントがアップデートされ、WindowManager のスマート レイアウト API を使用できるようになりました。ヒンジをまたぐ場合など、オクルージョン領域にコンテンツが配置されないようにすることができます。
新しい DragAndDrop ライブラリも、新しいフォーム ファクタとウィンドウ モードの対応に役立ちます。デベロッパーは、アプリ内外からのデータのドラッグ&ドロップを受け入れることができます。DrapAndDrop には一貫したドロップ ターゲット アフォーダンスが含まれ、API レベル 24 以降がサポートされます。
AppCompat ライブラリを使うと、旧 API バージョンのプラットフォームで新しい API にアクセスできます。これにはダークモードなどの UI 機能のバックポートも含まれます。
AppCompat 1.4 には、Emoji2 ライブラリが統合されています。API レベル 14 以降の AppCompat でサポートされるすべてのテキストベース ビューで、新しい絵文字がデフォルトでサポートされます。
カスタム ロケール選択が API レベル 14 以降でサポートされるようになりました。アプリを再起動しても失われないロケール設定の手動永続化と、サービス メタデータ フラグによる自動永続化をサポートしています。この機能は、同期的にロケールを読み込み、必要に応じて実行中のアクティビティを再作成することをライブラリに指示します。API レベル 33 以降では、プラットフォームが永続化を管理します。これによってオーバーヘッドが増加することはありません。
Annotation ライブラリは、ツールや他のデベロッパーがアプリのコードを理解するために役立つメタデータを公開します。@NonNull のような一般的なアノテーションが提供されます。こういったアノテーションを lint チェックと組み合わせて使用することで、コードの正確性とユーザビリティを向上できます。
アノテーションは現在 Kotlin に移行中で、Kotlin を使用するデベロッパーには、より適切なアノテーション ターゲット(@file など)が表示されるようになります。
要望の多かったいくつかのアノテーションが、対応する lint チェックと共に追加されています。これには、メソッドや関数のオーバーライドに関するアノテーションや、@DeprecatedSinceApi アノテーションが含まれます。@DeprecatedSinceApi は、@RequiresApi を補うもので、特定の API レベル以上で使用を推奨しないことを示すアノテーションです。
現在、GitHub で 100 以上のプロジェクトを公開しています。以下のモジュールは、標準の GitHub ベースのワークフローを通じてデベロッパーの皆さんからのサポートを受け付けています。
Pull リクエストの処理方法と Jetpack ライブラリの開発について詳しくはウェブサイトをご覧ください。
以上は、過去数か月間に行われた Jetpack のすべての変更に関する概要です。各ライブラリの詳細については、AndroidX のリリースノートをご覧ください。API ピッカーを使用して簡単にライブラリを検索することもできます。また、その他のハイライトについては、Google I/O トーク (動画/英語) を視聴してください。
Java は Oracle および / またはその関連会社の商標または登録商標です。
この記事は Takeshi Hagikura による Android Developers Blog の記事 " Android Studio Chipmunk" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
今回は、Android Studio Chipmunk 🐿 安定版のリリースについてお知らせします。Android Studio は、Android アプリ開発の公式 IDE です。これは小さな機能リリースですが、最新の IntelliJ アップデートが含まれています。また、品質と安定性に多くの時間をかけており、このリリースだけで 175 以上の品質の問題に対応しています。
Android Studio の最新安定版を使いたい方は、さっそくダウンロード (英語) してください!
Android Studio Chipmunk のすべての新機能のリストを次に示します。
Jetpack Compose のデベロッパーが、Compose で作成したアニメーションを調査したりデバッグしたりできる機能です。この機能はこれまで試験運用版でした。コンポーザブル プレビューにアニメーションが記述されていれば、ある時間でのアニメーションの正確な値を調べたり、アニメーションの一時停止やループ、早送り、スロー再生ができます。この機能は特に、アニメーションとデザイン仕様をフレーム単位で比較する際に役立ちます。
現在の Compose アニメーション プレビューでは、AnimatedVisibility と updateTransition がサポートされています。今後、さらに多くの種類のアニメーションがサポートされる予定です。
Android Studio Chipmunk では、表示されるジャンク情報が更新されており、ジャンクの種類などが含まれるようになっています。想定期限と実際の期限も表示されるので、ジャンクの実際の原因を見つけるのに役立ちます。このジャンク情報は、API レベル 31(Android 12)以降の Android Emulator または実機を使う場合に表示されます。詳細については、こちらを参照してください。
Chipmunk では、Build Analyzer に新しい Jetifier チェックを導入しました。これにより、Jetifier フラグをオフにするとビルド時のパフォーマンスを改善できる場合に通知されます。
Jetifier フラグは、サードパーティ製ライブラリを AndroidX を使うように自動移行するもので、現在も大半の Android Studio プロジェクトで有効になっています。しかし、ほとんどのライブラリ エコシステムがネイティブに AndroidX をサポートするように移行されているため、このフラグをオンにしている場合、ビルドに不要なオーバーヘッドが追加されることになります。その場合、フラグをオフにすると一般的にビルド時間を 5~10% 短縮できます。
Android Studio Chipmunk での Android 固有の機能の数は少ないものの、このリリースには IntelliJ 2021.2 プラットフォーム メジャー リリース 😎 が含まれており、プロジェクト全体の分析、新しい強力なパッケージ検索 UI、ワークフローを高速化する IDE アクションの拡張など、多くの新機能が搭載されています。詳細はこちら (英語) をご覧ください。
Android Studio Chipmunk 🐿 は見逃すことができないアップデートです。短期間でのリリースでしたが、新しいバージョンの IntelliJ、IDE の品質やパフォーマンス、安定性改善に向けたたゆまぬ作業、そしてここで紹介した機能などが詰まっています。さっそくダウンロード (英語) してお試しください!
いつものように、気に入った機能や問題点、新機能の提案などのフィードバックは大歓迎です。バグや問題を見つけた方は、問題を送信してください。最新機能に関する情報をいち早く得るには、私たち Android Studio 開発チームを Twitter と Medium でフォローしてください。