この記事は Ashnil Dixit による Android Developers Medium の記事 "Collaborating with local payment partners to drive awareness and conversion" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
昨年、1 ドル未満の価格や現地価格に対する効率的なアプローチを探す上で役立つヒントについてのブログ記事(英語) を公開しました。今年は、インドと東南アジアでユーザーのコンバージョンを推進するベスト プラクティスについて、記事とケーススタディから成る 4 部構成のシリーズを連載します。今回はその 1 回目です。
Google Play を使うと、ユーザーは Play Billing が提供するさまざまな決済方法(クレジットカード、携帯通信会社の課金、Google Play ギフトカードなど)を選択できるようになります。その中には、インドの UPI、タイの TrueMoney、インドネシアの GoPay など、現地特有の決済方法も多く含まれています。
しかし、最近の調査(Google Consumer Survey、Ipsos 2020)によると、大半のユーザーは現地特有の決済方法が使用できるということに気づいていません。この点は、ユーザーを課金ユーザーにコンバージョンする上で障壁になる可能性があります。
現地のエコシステム パートナーは、巨大な取引ユーザーを保持しています。そのため、ゲームのリリースや主要な LiveOps(ゲーム内イベント) のタイミングにおいて、非常に魅力的な共同マーケティング パートナーになります。こういった現地エコシステム パートナーと連携することで、ゲームの認知度を上げて高品質なユーザーを獲得できる可能性があります。
通常、決済パートナーは、さまざまなチャンネル(アプリ内およびオンライン メディア)を通してゲームの特典や LiveOps(ゲーム内イベント)、リリースをプロモーションするため、デベロッパーが新しいユーザーを獲得する上で役立ちます。
現地の決済パートナーと共同でマーケティングやキャンペーンを行うことで、デベロッパーの初回購入者数、合計消費額、インストール数などが増加します。
インドや東南アジアで支払者へのコンバージョンを推進する上で、デベロッパーができることはたくさんあります。現地の決済パートナーとのコラボレーションもその戦略の 1 つです。決済パートナーは大規模な取引ユーザーのベースを保持しているので、ここぞというタイミングでプロモーション効果を増幅させ、認知度を高めて、支払者へのコンバージョンを推進する上で役立ちます。これらの地域でビジネスの拡大を検討している方は、コラボレーションの機会を探してみるのもいいかもしれません。
さらに詳しい情報は、アプリ開発を成功させるためのアカデミーのゲームビジネス基礎コースで提供しています。価格の差別化やモバイルゲーム製品に関するレッスンをご覧ください。
この記事のインフォグラフィック版は、簡単に共有できます。こちらからご覧ください。
Reviewed by Hidenori Fujii - Google Play Developer Marketing APAC
この記事は Chet Haase による Android Developers - Medium の記事 "Now in Android #35" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
Android 開発の最新ニュースやトピックをご紹介する Now in Android。今回は Jetpack Compose ベータ版、#AndroidDevChallenge、Android 12、WorkManager、Android for Cars ライブラリ、RecyclerView、コルーチン、最新のポッドキャスト エピソードなどをご紹介します。
今回の Now in Android は、動画とポッドキャストでもお届けします。内容は同じですが、読む量は少なくて済みます。この記事版(そのままお読みください!)には、取り上げているすべてのコンテンツへのリンクが掲載されていますので、ぜひご覧ください。
下のリンクをクリックするか、お気に入りのクライアント アプリでポッドキャストをサブスクライブしてください。
公開です!ついに公開です!Jetpack Compose が 2 月 24 日(日本時間 2 月 24 日)にベータ版としてリリースされました!このリリースを祝して、#TheAndroidShow を開催しました。Jetpack Compose の機能概要とライブ Q&A、そしてデモを通して、この新しいツールのリリースがなぜ待ち望まれていたのか理由をご紹介します。
日本語字幕に対応しています。ぜひ日本語に切り替えてご覧ください。
Jetpack Compose は未来の Android 向け UI ツールキットで、ネイティブ Android アプリを短時間で簡単に作成できるように設計されています。このライブラリの作業は、2019 年の Google I/O で Compose を発表して以来、オープンソースで進めてきました。昨年 8 月にアルファ版のマイルストーンに到達したばかりですが、2 月 24 日にベータ版になりました。
ベータ版は大きな成果で、プロダクトの安定化を継続するために必要な API が安定版であることを示しています。 Compose に関する多数の情報が既に公開されています。使い方を学び、今年中に 1.0 が完成したときにアプリで利用できる準備を整えるためにご活用ください。
まずは、こちらのブログ記事をご確認ください。Jetpack Compose に関するあらゆる情報や、詳しく学習する際に役立つ関連情報へのリンクが掲載されています。
また、Jetpack Compose のさまざまな機能の使い方を説明した動画とスクリーンキャストもまとめてあります。
もちろん、実際にコードを触ってみることもできます。サンプルや新しい学習 Pathway の Codelab も更新されているので、忘れずにご覧ください。
さらに、デベロッパー サイトにアクセスすると、アップデートされた最新のドキュメントを確認できます。Jetpack Compose を使い始める方法など、あらゆる情報へのリンクが掲載されています。
Android の歴史は、1.0 リリース 1 年前 の 2007 年に開催した、デベロッパー チャレンジによって始まりました。ですので、 Android 開発の世界にクールな新機能が登場するとき、その様なチャレンジが企画されることは別に不思議なことではないでしょう。
そして、Jetpack Compose がベータ版になった今こそ、もう一度チャレンジを開催すべきだと考えました。今回は、4 週間にわたって毎週 1 回ずつチャレンジを実施し、Pixel 5 を含む 1000 個以上の賞品をご用意しました。詳しくは、初回のブログ記事や 第 2 週のチャレンジ以降のブログ記事、そして#AndroidDevChallenge の ウェブサイトをご覧ください。そして、ぜひこれからも Compose でコードを書いてみてください!
またこの季節がやってきました。桜の花が咲き始め、少しずつ暖かくなり、カリフォルニアは 11 月まで雨が降らなくなります。そして、次期バージョン Android 最初のデベロッパー プレビュー をリリースしました!
今回のリリースの概要はブログ記事(日本語)に掲載されています。プライバシーやセキュリティの向上、メディアのトランスコードや AVIF イメージのサポートといったグラフィック機能など、さまざまな内容が含まれています。
さらに、Android 12 プレビュー サイトでは、動作の変更点、新機能と新しい API などを詳しく説明しています。最も重要なことは、新しいリリースで皆さんのアプリを試し、何か問題があればフィードバックを送っていただくことです。早い段階でプレビューをリリースする意味のすべてはそこにあり、最終プロダクトの公開までに完成度を上げることが目的です。
もちろん今回のリリースは、最終リリースに向けてこの先も多くの段階が待ち受ける中、第 1 歩を踏み出したに過ぎません。今後もリリースを重ねて、機能や修正の数を増やしていきますので、ご期待ください。
Android 12 は最終リリースに向かって進行中、今後のリリースに注目
最先端の Android 開発に関する技術コンテンツを扱う MAD Skills シリーズが続いています。
今週より、MAD Skills で次のミニシリーズが始まり、Ben Weiss がその概要についてお話ししています。
WorkManager の基本: 最初の技術コンテンツとなるこのエピソードでは、Caren Chang が WorkManager の基本について解説しています。ここでは、WorkManager を使って画像をぼかす例を紹介します。コードは、WorkManager Codelab から確認できます。
連載中のコンテンツは、YouTube の MAD Skills プレイリスト、Medium の記事、またはすべてのリンクが掲載されているランディング ページからご覧いただけます。
新しい API Android for Cars App Library が登場します。現在はベータ版で、クローズド ソースの com.google.android.libraries.car.app の機能が元になっていますが、現在はオープンソースとして AndroidX で利用できます。
この API を使うと、Android Auto で動作するナビゲーション、駐車場、充電スポットのアプリを開発できます。ドライバー ディストラクション基準を満たし、画面フォーム ファクタや入力の違いなどの細かい点に対応してくれるテンプレートが提供されるので、開発が簡単になります。
ブログ記事(英語)と、ガイドを確認し、ライブラリを使って新しいアプリ体験を実現しましょう。
RecyclerView を扱う連載シリーズの最終回として、Meghan Mehta が ConcatAdapter を使って RecyclerView のヘッダーを実装する方法を解説します。
マルチスレッド プログラミングは厄介かもしれませんが、正しく行うことが重要です。Kotlin デベロッパーには、同時実行コードを簡単に書く方法として、コルーチンの使用をお勧めします。ただし、コルーチンを初めて使う方や、コルーチンを正しく効果的に使う方法についてアドバイスがほしい方は、こちらの新しいドキュメントをご覧ください。
新しいガイドに Kotlin のコルーチンで開発するためのベスト プラクティスをまとめました。
前回の Now in Android 以降、Android Developers Backstage にいくつかのエピソードが投稿されています。以下のリンクまたはお気に入りのポッドキャスト クライアントでご確認ください。
私は歴史にまつわる ADB エピソードが大好きです。なぜそのような仕組みになっているのかという深い謎に包まれた秘密に迫ることができるからです。今回は、Tor と Romain と私が、1.0 が登場するかなり前という初期の Android チームに関わっていたエンジニアの 1 人、Dan Bornstein に話を聞きました。Dan は、現在の Android Runtime(ART)の前身となる Dalvik ランタイムの作成に携わったメンバーです。Dalvik におけるいくつかの設計上の決断のほか、ランタイム、ガベージ コレクタ、パフォーマンスなど、ありとあらゆるテクノロジーに関するトークが登場します。
皆さんのお声をお待ちしています。今回は、Tor Norbye と Romain Guy と私が、Android Developers Backstage を改善するためにできること、またはしないことについて話します。
アンケートフォームから皆さんのご意見、ご感想をお知らせください。
今回は以上です。次回も Android デベロッパーの世界の最新アップデートをお届けします。お楽しみに。
Reviewed by Yuichi Araki - Developer Relations Team and Hidenori Fujii - Google Play Developer Marketing APAC
この記事は Manuel Vivo による Android Developers - Medium の記事 "Now in Android #34" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
Android 開発の最新ニュースやトピックをご紹介する Now in Android。今回は MAD Skills のミニシリーズ MotionLayout、マテリアル コンポーネント、KSP、AndroidX、コルーチンとインテントに関する最新のブログ記事・動画・関連ドキュメントなどをご紹介します。
今回の Now in Android は、動画とポッドキャストでもお届けします。内容は同じですが、読む量は少なくて済みます。このブログ記事版には、取り上げているすべてのコンテンツへのリンクが掲載されていますので、ぜひご覧ください。
MotionLayout についてのミニシリーズが終わりを迎えつつあります。4 回目のエピソードでは、Sean McQuillan が Motion Layout を使って折りたたみ可能なツールバーを作る方法について説明します。このようなツールバーは、この API が大活躍してくれる場所の 1 つです。MotionLayout を使ってカスタム属性をアニメーションさせる方法も習得できます。
最後のエピソードでは、デベロッパー リレーションズ チームとエンジニアリング チームからモーション レイアウトのエキスパートが参加し、リアルタイム Q&A を開催しました。
これまでのエピソードを見逃してしまった方は、MAD Skills ミニシリーズ MotionLayout のプレイリストをチェックしておきましょう。
material-components-android ライブラリの安定版として、バージョン 1.3.0 がリリースされました。MaterialTimePicker や ProgressIndicator などの新しいマテリアル コンポーネントが含まれています。その他、ダイアログなどのコンポーネント内の文字列の国際化とローカライズ、BadgeUtils クラスのパブリックへの公開も行われています。
すべての変更点は、リリースノートでご覧ください。
Kotlin で軽量コンパイラ プラグインを作成するツール、Kotlin Symbol Processing(KSP)がアルファ版になりました。アノテーション プロセッサに詳しい方向けに説明すると、KSP は KAPT に似たような機能を提供します。しかし、最大 2 倍高速で、Kotlin マルチプラットフォームを念頭において開発されています。
アノテーション処理を使っているライブラリ作成者の方は、ライブラリを KSP 互換にする方法に関するブログ記事をご覧ください。
さまざまな AndroidX ライブラリでたくさんの最新増分リリースが公開されています。また、以下の安定版リリースが含まれています。
安定版リリース以外では、Paging 3 が最初のベータ版リリースに到達しています。これは注目に値します。Paging 3 は、土台からコルーチンに対応している Kotlin を使って、大きく書き換えられています。この API は、beta01 で API 安定版に到達しました。
私は、コルーチンが Android ランタイムで実際にどのように実行されているのかを解説するブログ記事(英語)を投稿しました。Android のコルーチンは Java プログラミング言語で定義されているスレッドモデルを使うので、コードの同時実行の問題に注意する必要があります。
プライバシーは Android の最優先事項であり続けています。ユーザーの個人データの保護や、アプリがそのデータを使う際の透明性は、ますます重要になっているからです。Fred Chung の動画では、ユーザーの目に見える変更点もいくつか取り上げていますが、主にデベロッパーを対象に、新しい API、動作の変更、テストについて解説しています。1 回だけのアクセス許可オプションなどのアクセス許可の変更、ストレージ、パッケージの公開設定、個人データへのアクセスを特定する際に役立つツールなどをご紹介しています。
Nicole Borrelli が、アプリ内コールバックを実装する際に Intent ではなく PendingIntent を使うべき理由について説明しているブログ記事(英語)を投稿しました。PendingIntent を使わないと、アプリに脆弱性が残る可能性があります。
アプリの品質は、すべての人にとって重要です。Android Developers の ウェブサイトにアプリの品質セクションを新たに設けて、アプリの品質についての重要な最新情報や、高品質を実現して維持する際に役立つ情報を提供しています。アプリの中核品質チェックリストは、視覚的な体験、機能、パフォーマンスと安定性、プライバシーとセキュリティ、Google Play という観点でアプリを評価する参考になります。ユーザーから期待される水準を満たすため、このリストをデザインチームや QA チームと共有することもおすすめします。
今後は、このリストを定期的に更新して最新の状態を保つとともに、タブレットや WearOS などの他のフォーム ファクタにも拡大していく予定です。
アプリの品質については、こちらのブログ記事も併せてご覧ください。
私たちは、Android 開発をさらに多くの人に広めたいと考えています。そこで、Android 開発の教育者向けに、Kotlin による Android 開発の新しいカリキュラムを公開しました。講義のスライドから、ハンズオンの Codelab まで、必要なものをすべて含むたくさんの素材がそろっています。
グループで学びたい方のために、すべてのデベロッパーに Android Study Jams プログラムを公開しました。このコンテンツを使うと、グループのメンバーがオンライン カリキュラムを通して、好きなペースで一緒に Android を学ぶことができます。
この記事は Chet Haase による Android Developers - Medium の記事 "Now in Android #33" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
Android 開発の最新ニュースやトピックをご紹介する Now in Android。今回は MAD Skills のミニシリーズ Kotlin+Jetpack と MotionLayout、AndroidX、Hilt と WorkManager に関する最新のブログ記事・動画・関連ドキュメント、MotionTags スクリーンキャスト、WindowManager についての ポッドキャスト エピソードなどをご紹介します。
前回の Now in Android の後、リアルタイム Q&A をもって Kotlin と Jetpack API の利用に関するミニシリーズが完結しました。たくさんのご質問お寄せいただきありがとうございました。ぜひ録画をご覧ください。
いつものように、まとめのブログ記事(英語)には、すべてのエピソードの動画と記事、そして関連技術へのリンクを掲載しています。
MADSkills で新しいミニシリーズが始まりました。Sean McQuillan が、高度な UI アニメーションを作成できる MotionLayout API と Motion Editor ツールについてお話ししています。MotionLayout は Android の Transition API と似たような機能を提供しますが、はるかに柔軟性が高く強力で、高度なカスタム アニメーションを実現できます。さらに、複雑なアニメーションをとても簡単に作れる抜群のビジュアル エディタも搭載しています。
MotionLayout
Transition
この動画では、ConstraintSet を使って異なる状態を定義し、その状態間で UI をアニメーションさせる方法を紹介しています。Android Studio で Motion Editor を使って遷移を作成、編集する方法について、Sean が説明しています。
ConstraintSet
このエピソードでは、MotionLayout アニメーションで Keyframe を使い、さまざまなプロパティの値を時間とともに変化させてアニメーションをカスタマイズする方法を説明して
Keyframe
います。たとえば、オブジェクトが開始点と終了点の間を移動する場合、デフォルトでは直線上を移動しますが、キーフレームを使うと経路を変えることができます。
3 つ目のエピソードでは、Sean がデフォルトの 2 つ(開始と終了)に加えてさらに ConstraintSet を追加し、開始と終了の間で複数の状態を経由する複雑なアニメーションや遷移を作成する方法について説明しています。
ミニシリーズ MotionLayout のエピソードはまだまだ続きます。YouTube のプレイリストからご覧ください。MotionTags のYouTube プレイリストもチェックすることをおすすめします。MotionLayout API の特定の領域を詳しく取り上げたスクリーンキャストが掲載されています。
MAD Skills で連載しているコンテンツは、YouTube の MAD Skills プレイリスト、Medium のブログ記事(英語)、またはすべてのリンクが掲載されているランディング ページからご確認ください。
AndroidX ライブラリで、たくさんの最新増分リリースが公開されています。以下のような重要な安定版リリースが含まれていますのでご確認ください。
work-multiprocess
Manuel Vivo が投稿した新しいブログ記事(英語)で、Hilt の階層中に存在する新しい ViewModelComponent について説明しています。ViewModelComponent を使うと、型を特定の ViewModel にスコープさせることができます。一方、ActivityRetainedComponent のスコープ付き型は、すべての ViewModel で共有されます。
ViewModelComponent
ViewModel
ActivityRetainedComponent
Ben Weiss が WorkManager ライブラリの最新リリース、バージョン 2.5.0 に関するブログ記事を公開しました。このリリースでは、マルチプロセス アプリで WorkManager を簡単に使えるようになります。合わせて、バグの修正や一般的な改善も行われています。
MotionTags は、MotionLayout API の特定の領域を徹底解説するスクリーンキャスト動画集です。シリーズの最後の 2 つのエピソードが最近投稿されました。
このエピソードでは、以前公開した KeyCycle を解説している動画の続きとして、複雑なアニメーションの作り方を説明しています。
シリーズ最後のエピソードでは、KeyTrigger を取り上げています。これを使うと、アニメーションの状態(「トリガー」)に応じて発生するコールバックを通して、アプリでアニメーションを制御できます。
KeyTrigger
前回の Now in Android 以降、Android Developers Backstage に新しいエピソードが投稿されています。以下のリンクまたはお気に入りのポッドキャスト クライアントでご確認ください。
今年最初の Android Developers Backstage では、WindowManager チームの Wale Ogunwale と Rob Carr から話を聞きました。WindowManager の歴史(と複雑さ)、そして最新の進展やこの先実現する機能について話しています。
refContentProvider()
releaseWakeLock()
JobScheduler.schedule()
この記事は Ben Weiss による Android Developers - Medium の記事 "Using WorkManager in multi-process apps" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
📝 WorkManager 2.5.0 をリリースしました。マルチプロセス環境で簡単に使えるようになり、さらに、安定性の改善もいくつか行われています。複数のプロセスを管理するアプリでバックグラウンド作業を確実に管理する必要がある場合は、新しい WorkManager 2.5.0 をお使いください。
利用するためには、コードにいくつかの変更を加える必要がありますので、詳しくご説明します。また、本記事の最後に、今回のバージョンの WorkManager ライブラリにおけるその他の動作の変更点および最新の追加機能を記載していますので併せてご覧ください。
新しいマルチプロセス アーティファクトでは、ジョブのスケジュール管理を 1 つのプロセスに統合することで、パフォーマンスを向上させています。この機能を使うには、まずアプリに追加します。
implementation "androidx.work:work-multiprocess:2.5.0"
これで、WorkManager が WorkRequest をキューに追加するために使う専用のプロセスを選び、プロセス内スケジューラを実行できるようになります。
Configuration.Provider を使って設定する方法は次のようになります。
class MyApplication() : Application(), Configuration.Provider { override fun getWorkManagerConfiguration() = Configuration.Builder() .setProcessName("com.example:remote") .build()}
注: setProcessName のパラメータには完全修飾プロセス名を渡す必要があります。具体的には、アプリのパッケージ名にコロンを付け、その後にホストのプロセス名を指定します。例: com.example:remote
work-multiprocess を使う場合は、WorkManager の代わりに RemoteWorkManager を使って作業リクエストを管理できます。RemoteWorkManager は、常に専用プロセスにアクセスして作業をキューに格納します。これにより、呼び出し側のプロセスで誤って新しい WorkManager を初期化してしまうことはなくなります。プロセス内スケジューラも、同じ専用プロセス内で実行されます。
このように WorkManager を設定し、RemoteWorkManager を使って作業をスケジュールすることで、ジョブを高速に管理し、マルチプロセス アプリの信頼性を高めることができます。指定するプロセスで WorkManager インスタンスが 1 つだけ実行され、ファイルベースのロックを使わなくてよくなるため、SQLite 接続の数を大幅に削減できることに加え、プロセス間でジョブを調整する必要がなくなるためです。
これまでは、ActivityManager が JobService のインスタンスを作成してジョブを開始することができなかった場合、ベースとなるプラットフォームのバグの影響で、そのジョブは破棄され、何の通知も行われませんでした。今回より、WorkRequest オブジェクトとジョブを調整して Application インスタンスが作成されると、WorkManager はすべての WorkRequest についてスケジューラ ジョブが存在することを確認します。
アプリがクラッシュする原因の 1 つは、デバイスのストレージ不足であることがわかりました。これが起きるのは、主に最初からストレージ容量が少なかったデバイスです。しかし、アプリが大量の作業をスケジュールする場合、WorkManager がデバイスのストレージ不足の原因になることもありました。
完了したジョブはデフォルトで 7 日間内部 WorkManager データベースに記録されていました。今回、それが 1 日間に短縮されたので、データベースのサイズが大幅に減少します。
バッファの期間は短縮されますが、ジョブを記録する期間は keepResultsForAtLeast() API を使って制御できます。
WorkManager と ListenableFuture を併用すれば、テストがさらに簡単になります。TestListenableWorkerBuilder Kotlin 拡張機能が、ListenableWorker を拡張したすべてのクラスを受け取れるようになり、テストの柔軟性が向上しています。
今回のリリースには、新機能に加えていくつかのバグの修正も含まれています。これにより、WorkManager の安定性、信頼性、パフォーマンスが向上します。すべての変更点と修正されたバグは、リリースノートで確認できます。
WorkManager を含め、いくつかの Jetpack ライブラリは GitHub からの貢献を受け付けています。Alan Viverette が、プロセス全体について説明しているブログ記事(英語)を書いています。
2.5.0 リリースで修正されたバグのほとんどは、パブリック Issue Tracker で寄せられたものです。
修正につながる問題を登録するコツは、再現できる問題を登録することです。問題の再現に役立つように、WorkManager のサンプルを使うか、問題の説明に手順を記載して独自のサンプルコードを提供することをお勧めします。
ぜひこの機会に作業に着手し、アプリでこのライブラリのバージョンをアップデートしてください。
2019 年 6 月、同社の開発チームは Android アプリの主要な開発言語が Kotlin に移行しつつあると判断し、Kotlin の導入を検討し始めました。Kotlin が採用された決め手は、Kotlin メインの Jetpack ライブラリを活用できること、コード量を減らしてメンテナンスの負担を軽減できること、構文の表現性が高く理解しやすいことなどでした。
同社の開発チームには Kotlin を使った開発経験があるエンジニアや、また、Java に精通しているエンジニアがいるため、Kotlin でのコーディングに難しさを感じることはありませんでした。Kotlin は Java との相互運用性が 100% なので、既存のコードベースを維持しながら、雨雲レーダーやニュース検索といった新機能を Kotlin で記述することができました。この雨雲レーダーでは、コルーチンを使用して画像のダウンロードとキャッシュを管理し、コルーチン ディスパッチャでタスクの管理を抽象化することで、raw スレッドの管理で陥りやすい罠を回避しています。
開発チームは、一部の Java コードをリファクタリングし、Kotlin の null 安全性機能も活用しています。Kotlin の構文では、可変性、null 可能性、初期化を特定できるため、早い段階でエラーを捕捉できます。これにより、コード変更の検証にかかる時間を 10% 短縮することができました。Kotlin の簡潔で効率的な構文を使用することで、コードベースの読みやすさが向上してメンテナンスが容易になり、実装から公開までの全体的な生産性が向上し、コード行数の 20% 削減に成功しました。
SmartNews アプリのコードはすでに全体で 45 % ほどが Kotlin に移行しています。新機能はすべて Kotlin で記述することにしているほか、既存のコードのリファクタリングを進めてさらにメンテナンス性を高めることにしています。
Kotlin を実装し、ボイラープレート コードを削減していくと、開発チームのモチベーションが向上してきました。開発メンバーがアイデアをより効率的に表現できるようになり、各自が読みやすいコード記述を心がけるように変化しました。同社でエンジニアリング マネージャーを務める大橋英雄氏によると、Kotlin はエンジニアの募集や採用にも効果的とのことです。
「応募者から最も多い質問のひとつが、"Kotlin は使っていますか?どれくらい活用していますか?" というものです。多くのエンジニアが Kotlin への移行に関心を寄せており、弊社としてもこの動きを支援したいと考えています。」
スマートニュース株式会社 Android エンジニアリングマネージャー 大橋英雄氏
SmartNews アプリへの Kotlin の導入は、アプリ開発だけに限らず、エンジニアのモチベーション向上や採用への良い反響を得ることができました。Android Developers の事例も併せてご覧ください。
Posted by Tamao Imura - Developer Marketing Manager, Platforms and Ecosystems
この記事は Chet Haase による Android Developers - Medium の記事 "Now in Android #32" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
Android 開発の最新ニュースやトピックをご紹介する Now in Android。今回はKotlin と Jetpack の API、Navigation についての新コース、最近公開されたブログ記事・動画・関連ドキュメント、ポッドキャスト エピソードなどをご紹介します。
最先端の Android 開発に関する技術コンテンツを扱う連載シリーズ MAD Skills の新しいミニシリーズ Kotlin で Jetpack API を使用する が順調に進んでいます。最初のエピソードを紹介した前回以降、3 つのエピソードが追加されました。この 3 つのエピソードでは、大まかに言えば Room ライブラリと WorkManager ライブラリの使い方に関する情報をお届けしていますが、コルーチンなどの Kotlin 機能を使ってコードをシンプルにする具体的な方法にも触れています。
このエピソードでは、Florina Muntenescu が、Room Kotlin API を使ってローカル データベース ストレージ要件を実現し、それをテストする方法について説明します。
ブログ記事(英語)でもご覧いただけます。
このエピソードでは、Florina が WorkManager を使って非同期作業をスケジュールする方法を説明します。これは、すぐに実行することも、遅延実行することもできます。
Android の Google Developer Expert の Magda Miu さんとチームメンバーは、Kotlin を使ってわかりやすく、メンテナンスしやすい CameraX のベンダー拡張機能を記述しています。その方法について動画で説明してくれました。
Kotlin と Jetpack シリーズの締めくくりとして、1 月 15 日にからもう一度リアルタイム Q&A を開催しました。
1 月 18 日の週から、新しい MAD Skills シリーズが始まっています。連載中のコンテンツは、YouTube の MAD Skills プレイリスト、Medium の記事、またはすべてのリンクが掲載されているランディング ページからご覧いただけます。
Android Basics in Kotlin コースに新しいユニット「Unit 3: Navigation」が追加されました。
このユニットでは、Navigation コンポーネントや Android アーキテクチャ コンポーネント ライブラリのその他の API に関するチュートリアルとサンプルを確認できます。
Isai Damier が暗号と認証、セキュリティについての新しい記事(英語)を公開しました。暗号に関するさまざまな興味深い背景を取り上げながら、暗号を利用した安全なソリューションで生体認証が用いられることが多い理由について説明しています。
Florina Muntenescu が、Kotlin を使えば生産性が上がるという記事を公開しました。既にたくさんの Kotlin コードを書いている方なら、おそらくご存知のことでしょう。しかし、仕事で Kotlin を使うべきか迷っている方や、プロジェクトの他のメンバーを説得する方法を探している方なら、この記事に書かれている具体的な内容が役立つかもしれません。
Meghan Mehta が RecyclerView に関する連載シリーズの第 3 回目のブログ記事(英語)を公開しました。RecyclerView でよくある要件の 1 つが、ユーザーのクリックへの対応です。リストの項目をクリックすれば、通常は何かが起こります。記事では、この機能を扱うおすすめの方法を紹介します。
2020 年末、Tor Norbye と Romain Guy、そして私がこのエピソードを収録しました。昨年、それまでとは違う働き方を模索する中で起きたことや、Android のツールやプラットフォームの最新機能について解説しています。
この記事は Florina Muntenescu による Android Developers Blog の記事 "MAD Skills Kotlin and Jetpack: wrap-up" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
今回は MAD Skills シリーズの 1 つ、Kotlin と Jetpack についての動画と記事をまとめました。Android コードの表現力と簡潔さ、安全性を向上させ、Kotlin で非同期コードを実行しやすくするさまざまな方法を取り上げています。
それぞれのエピソードから、Kotlin と Jetpack についての最新情報をご確認ください。いくつかの具体的な API を取り上げ、API の使い方だけでなく、API が内部的にどのように動作しているか解説しています。また、すべてのエピソードには対応するブログ投稿があり、そのほとんどにサンプルか Codelab へのリンクが含まれているので、実際に試してみたり、コンテンツに関する理解を深めたりできます。また、Jetpack や Kotlin のエンジニアが登場するリアルタイム Q&A も実施しました。
このエピソードでは、Jetpack KTX 拡張機能を使って、Android と Jetpack のコーディングを簡単、快適、そして Kotlin らしくする方法を取り上げました。現在のところ、20 以上のライブラリに KTX 版があり、その中から特に重要なものを紹介します。core-ktx は、Android プラットフォームに由来する API を Kotlin らしく書けるようにする機能を提供しています。また、LiveData や ViewModel などの API と組み合わせてユーザー エクスペリエンスの向上を図れるいくつかの Jetpack KTX ライブラリも紹介します。
動画またはブログ記事(英語)をご覧ください。
エピソード 2 では、コルーチンと Flow を使って API をシンプルにする方法と、suspendCancellableCoroutine API と callbackFlow API を使って独自のアダプタを作る方法について説明します。このトピックを実際に試してみたい方は、Kotlin 拡張機能ライブラリの作成 Codelab をご覧ください。
動画を視聴するか、ブログ記事(英語)でご確認ください。
このエピソードでは、実際に Room を使ってみます。その上で、Kotlin を使って Room のテーブルやデータベースを作る方法、挿入などの 1 回限りの suspend 操作を実装する方法、Flow を使った監視可能クエリーについて簡単に確認します。コルーチンと Flow を使うと、Room はすべてのデータベース操作をバックグラウンド スレッドに移してくれます。Room のクエリーの実装方法やテスト方法については、動画またはブログ記事(英語)をご覧ください。実際に試してみたい方は、ビューで Room を使う Codelab をご覧ください。
エピソード 4 では、WorkManager を使って作業を簡単にする方法について説明します。この機能を使うと、非同期タスクのスケジュールを設定して、アプリが閉じられた場合や、デバイスが再起動した場合にも実行されることが期待されるタスクを、即時実行または遅延実行できます。このエピソードでは、WorkManager の基本について説明し、CoroutineWorker などの Kotlin API についても解説しています。
こちらの動画またはこちらのブログ記事(英語)をご覧ください。また、ぜひ WorkManager Codelab で実際に体験してみてください。
エピソード 5 では、Android の Google Developer Expert の Magda Miu さんが Kotlin の基本 API と CameraX を使った経験についてお話ししています。
最後のエピソードでは、リアルタイム Q&A を実施しました。司会の Chet Haase のほか、ゲストとして Architecture Components テックリードの Yigit Boyar、Kotlin プロダクト マネージャーの David Winer、そしてデベロッパー リレーションズ エンジニアの Manuel Vivo と私が参加し、YouTube、Twitter などから寄せられた質問に回答しています。
この記事は Florina Muntenescu による Android Developers - Medium の記事 "More productivity with Kotlin" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
Kotlin は簡潔なプログラミング言語として知られています。そしてそれは、高い生産性を意味します。そして実際に、Kotlin を使っている Android デベロッパーの 67% が、生産性が向上したと述べています。このブログ投稿では、Kotlin を使ってパートナーのエンジニアたちが生産性を向上させた方法をいくつか共有し、そのために役立つ Kotlin の機能も紹介します。
レビューやメンテナンスの担当者は、読むコードが少なくなるので、コードが行っていることを理解しやすくなります。そのため、レビューやメンテナンスが楽になります。
その一例として、Flipkart のチームを紹介しましょう。
「弊社の社内調査によると、デベロッパーの 50% が、Kotlin でモジュールを書くと [機能を完成させるまでの] 見積りが小さくなると回答しました」(Flipkart)
Kotlin の機能のほとんどは、簡潔さと高い可読性を持つため、高い生産性につながります。特によく使われる機能について見てみましょう。
Java プログラミング言語では、コンストラクタのパラメータが省略可能な場合、一般的に次の 2 つの方法のどちらかを利用します。
Kotlin ではデフォルト引数を利用できるので、どちらも必要ありません。デフォルト引数を使うと、ボイラープレートを追加することなく、関数のオーバーロードを実装できます。
Cash App チームが Kotlin を使い始めたとき、多くのビルダーを削減し、書く必要があるコードの量を減らすことができました。場合によっては、コードのサイズが 25% 少なくなりました。
たとえば、以下の一例は、 Task オブジェクトの実装で、タスクの名前のみが必須パラメータになっています。ビルダーを使った場合と、デフォルト引数を使った場合でそれぞれどうなるかを示しています。
/* Copyright 2020 Google LLC. SPDX-License-Identifier: Apache-2.0 */- public class Task {- private final String name;- private final Date deadline;- private final TaskPriority priority;- private final boolean completed;-- private Task(String name, Date deadline, TaskPriority priority, boolean completed) {- this.name = name;- this.deadline = deadline;- this.priority = priority;- this.completed = completed;- }-- public static class Builder {- private final String name;- private Date deadline;- private TaskPriority priority;- private boolean completed;-- public Builder(String name) {- this.name = name;- }-- public Builder setDeadline(Date deadline) {- this.deadline = deadline;- return this;- }-- public Builder setPriority(TaskPriority priority) {- this.priority = priority;- return this;- }-- public Builder setCompleted(boolean completed) {- this.completed = completed;- return this;- }-- public Task build() {- return new Task(name, deadline, priority, completed);- }- }-}+ data class Task(+ val name: String,+ val deadline: Date = DEFAULT_DEADLINE,+ val priority: TaskPriority = TaskPriority.LOW,+ val completed: Boolean = false+)
/* Copyright 2020 Google LLC.
SPDX-License-Identifier: Apache-2.0 */
- public class Task {
- private final String name;
- private final Date deadline;
- private final TaskPriority priority;
- private final boolean completed;
-
- private Task(String name, Date deadline, TaskPriority priority, boolean completed) {
- this.name = name;
- this.deadline = deadline;
- this.priority = priority;
- this.completed = completed;
- }
- public static class Builder {
- private Date deadline;
- private TaskPriority priority;
- private boolean completed;
- public Builder(String name) {
- public Builder setDeadline(Date deadline) {
- return this;
- public Builder setPriority(TaskPriority priority) {
- public Builder setCompleted(boolean completed) {
- public Task build() {
- return new Task(name, deadline, priority, completed);
-}
+ data class Task(
+ val name: String,
+ val deadline: Date = DEFAULT_DEADLINE,
+ val priority: TaskPriority = TaskPriority.LOW,
+ val completed: Boolean = false
+)
デフォルト引数の詳細については、連載シリーズ Kotlin Vocablary のブログ記事「Kotlin のデフォルト引数」をご覧ください。
おそらく、シングルトン パターンはソフトウェア開発で特によく使われるパターンの 1 つでしょう。オブジェクトのインスタンスを 1 つだけ作成し、他のオブジェクトから共有してアクセスできるようにしたい場合に役立ちます。
シングルトンを作るには、インスタンスが 1 つだけ存在するようにオブジェクトの作成方法を制御し、コードがスレッドセーフであることを保証する必要があります。Kotlin では、object キーワードだけでこれを実現できます。
/* Copyright 2020 Google LLC. SPDX-License-Identifier: Apache-2.0 */ - public class Singleton{- private static volatile Singleton INSTANCE;- private Singleton(){}- public static Singleton getInstance(){- if (INSTANCE == null) { // Single Checked- synchronized (Singleton.class) {- if (INSTANCE == null) { // Double checked- INSTANCE = new Singleton();- }- }- }- return INSTANCE;- }- private int count = 0;- public int count(){ return count++; }- }+ object Singleton {+ private var count = 0+ fun count(): Int {+ return count+++ }+ }
- public class Singleton{
- private static volatile Singleton INSTANCE;
- private Singleton(){}
- public static Singleton getInstance(){
- if (INSTANCE == null) { // Single Checked
- synchronized (Singleton.class) {
- if (INSTANCE == null) { // Double checked
- INSTANCE = new Singleton();
- return INSTANCE;
- private int count = 0;
- public int count(){ return count++; }
+ object Singleton {
+ private var count = 0
+ fun count(): Int {
+ return count++
+ }+ }
Kotlin 言語の簡潔さとシンプルさは、演算子オーバーロード、分割代入、文字列テンプレートなどの機能から明らかです。そのため、コードはとても読みやすくなります。
たとえば、本を集めたライブラリがあるとしましょう。ライブラリから本を取り出し、そのタイトルだけを出力する場合、コードは次のようになります。
/* Copyright 2020 Google LLC. SPDX-License-Identifier: Apache-2.0 */fun borrow(){ library -= book val (title, author) = book println("Borrowed $title")}
fun borrow(){
library -= book
val (title, author) = book
println("Borrowed $title")
}
使われている Kotlin の機能は次のとおりです。
Kotlin を使うと、コードは読みやすく、書きやすくなります。シングルトンや委譲などのパターンが言語に組み込まれており、たくさんのコードを書く必要がないため、バグが紛れ込む確率が低くなり、メンテナンスの負荷も軽減されます。また、文字列テンプレート、ラムダ式、エクステンション関数、演算子オーバーロードなどの機能で、コードをさらに簡潔かつシンプルにできます。書くコードが少なくなれば、読むコードやメンテナンスするコードも少なくなり、エラーが減って生産性が上がります。
詳しくは、Kotlin と Android Kotlin でより優れたアプリを作成するをお読みください。また、各社のケーススタディをご覧ください。デベロッパーにとっての Kotlin のメリットが確認できます。世界で特に好まれている開発言語の 1 つである Kotlin を使ってみたい方は、入門ページをご覧ください。
この記事は Christopher Katsaros による Android Developers Blog の記事 "What’s your MAD score?" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
MAD Skills シリーズを通して最先端の Android 開発(MAD)についてさまざまなことをお話ししてきました。そして今回は、皆さんの MAD スコアについてお知らせします。2020 年 12 月 15 日(日本時間 12 月 16 日)、MAD スコアカードを公開しました。これは、皆さんが使っている Jetpack ライブラリの数や、Kotlin でコーディングしているアプリの割合などを使い、皆さんの Andorid 開発がどれだけ最新であるかを示すスコアです。
MAD スコアカードは Android Studio を使って、アプリが Android App Bundle でどれくらいサイズを削減したかなどの情報を示します。また、特定の Jetpack ライブラリや Kotlin 機能など、皆さんが使う可能性がある主要な MAD テクノロジーにもそれぞれスポットライトを当てています。さらに、皆さんの最も MAD なスキルに基づいて、特別な MAD キャラクターも表示されます。
ご自身の MAD スコアは、新しい Android Studio プラグインを通じて確認できます。スコアカードを確認して共有する方法は、以下のとおりです。
スコアカードを確認できたら、MAD Skills の各エピソードもご覧ください。この動画と記事のシリーズでは、最先端の Android 開発の最新技術を使って、優れたアプリを簡単に作る方法を説明しています。ナビゲーション、Kotlin、Android Studio などの各トピックは、3 週間のシリーズとして構成されています。各トピックの最後には、Q&A で皆さんの質問に回答します。マテリアル デザイン コンポーネント、App Bundle、ナビゲーションなど、以前のトピックも確認できます。今後のトピックは、YouTube の Android Developers で公開します。
ここから MAD スコアカードを確認して、共有しましょう!
この記事は Chet Haase による Android Developers - Medium の記事 "Now in Android #31" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
Android 開発の最新ニュースやトピックをご紹介する Now in Android。今回は連載シリーズ MAD Skills のコンテンツ、最近公開されたブログ記事・動画・関連ドキュメント、ポッドキャスト エピソードなどをご紹介します。
MAD Skills シリーズに少しインタラクティブ性をもたせ、あなたのアプリがどのくらい MAD か、スコアで可視化できるようになりました。あなたの MAD スコアを確認するには、Android Studio に MAD Scorecard プラグインをインストールして実行します。すると、カードが作成され、最先端の Android 開発の大事な 4 つのトピックにおいて、皆さんのアプリを評価したスコアが表示されます。この結果は、 #MADscore ハッシュタグを付けて Twitter で共有できます。
詳しくは、MAD Score サイトをご覧ください。Christopher Katsaro のブログ記事(英語)でも詳しく説明しています。
最先端の Android 開発に関する技術コンテンツを扱う連載シリーズ MAD Skills が続いています。先週は、マテリアル デザイン コンポーネント (MDC) のシリーズが完結しました。前回の Now in Android 以降、さらに 3 つのエピソードが投稿されています。
#4: マテリアル モーション
MDC 4 つ目のエピソードでは、Nick Rout がマテリアルに動きをつける 4 つのパターンと、アプリでそれを実装する方法についてお話ししています。実際の活用例を紹介するため、Reply サンプルアプリとそのアプリに基づいた Codelab を題材に解説します。
#5: Zarah Dominguez さんからのコミュニティ ヒント
5 つ目の MDC エピソードは、Google Developer Expert の Zarah Dominguez さんが、チームでマテリアル カタログアプリを使って、各コンポーネントが実際にどのような外観になるか、またその実装例としてどのようなソースコードになるかの両方を確認している方法について説明しています。
#6: リアルタイム Q&A
最後の MDC エピソードは、これまでの App Bundle やナビゲーションのシリーズと同じく、MDC のエキスパートであるデベロッパー リレーションズ チームとマテリアル エンジニアリング チームが登場して、リアルタイム Q&A を行いました。Twitter からだけでなく、Q&A の最中も YouTube からリアルタイムで質問が寄せられました。すべてに答える時間はありませんでしたが、マテリアルについて理解を深めていただけたのではないかと思います。
MDC シリーズのコンテンツを見逃してしまった方のために、Nick Rout がシリーズのまとめのブログ記事を投稿しました。対応する動画や記事に加え、関連するサンプルやドキュメント、Codelab などへのリンクも含まれています。
12 月 第 3 週から、Kotlin と Jetpack について取り上げる新しい MAD Skills のミニシリーズが始まりました。具体的には、Kotlin と多くの Jetpack API を組み合わせて使う方法について、Florina Muntenescu が紹介しています。
#1: Using KTX
ミニシリーズ最初のエピソードで取り上げるのは、KTX の使い方です。KTX は、さまざまなプラットフォームや Jetpack ライブラリに対するアプローチを改善して簡単に使えるようにした Kotlin エクステンションです。Florina が、プラットフォームと Jetpack API の両方の例を挙げて、LiveData と ViewModel を利用する場合の使い方を示しながら、KTX の概要について説明します。
このコンテンツはブログ記事(英語)でもご覧いただけます。
#2: コルーチンで API をシンプルに
この 2 つ目のエピソードでは、Manuel Vivo が、Kotlin コルーチンを使って既存の API を簡単に利用できるようにする方法について説明します。たとえば、コルーチンを使ってアダプタを作成すれば、複雑にネストしたコールバックをシンプルに整理できます。Fused Location Provider を使うための API をシンプルにする例を挙げ、実際にこれを行う方法を解説します。
ブログ記事形式(英語)でもご覧いただけます。
これからの数週間で公開される Kotlin/Jetpack エピソードにご期待ください。YouTube プレイリストと Android Developers のブログ記事(英語)のどちらでもご覧いただけます。
連載中のコンテンツは、YouTube の MAD Skills プレイリスト、Medium の記事、またはすべてのリンクが掲載されている 便利なランディング ページ からご確認ください。
最近数回実施している Android のリリースでは、ユーザーによる制御やユーザーデータの透過性を重視することを続けているため、権限に関するいくつかの変更が行われています。場合によっては、最新のアップデートや動作の変更に追従するというデベロッパーの作業も伴います。そのため、そのプロセスをサポートするドキュメントの整備に取り組んでいます。
この作業の一環として、 Android の権限ガイドにいくつかの重要な改善を行いました。権限の仕組みに関するわかりやすいガイドのほか、アプリで権限を使う際のベスト プラクティスを確認できるようになりました。特に重要なのは、実際に権限の宣言が 必要かどうかを評価することです。多くの一般的なユースケースでは、権限は必要ではありません。
いくつかの Room ライブラリ ガイドを全面的に改訂し、一部の API の使い方をわかりやすく説明するようにしました。
Room DAO を使用してデータにアクセスするでは、組み込みのクエリーを使う方法や、@Query アノテーションを使うカスタムの方法など、DAO インターフェースの使い方の概要を説明しています。
Write asynchronous DAO queries では、UI スレッド以外で実行するクエリーの書き方についてさらに詳しく説明しています。データベースを操作する場合、この方法が求められることが非常に多くあります。このガイドでは、好みの言語や非同期 API に応じて利用できるいくつかの代替手段についても解説しています。
最近たくさんのアルファ版、ベータ版、RC 版の AndroidX ライブラリがリリースされましたが、安定版のリリース内容は次のとおりです。
Exifinterface 1.3.2、Media 1.2.1、Navigation 2.3.2 など、いくつかの安定版でもバグ修正リリースが行われています。
Jamal Eason が Android Studio の次期リリースについてのブログ記事(日本語)を投稿しました。現在、Canary チャンネルに Arctic Fox がリリースされ、試せるようになっています。このリリースについてまず注目すべき点は、新しい命名スキームとバージョニング スキームです。この記事では、その内容について詳しく説明しています。さらに、このリリースには、デバイスとペア設定して Wi-Fi デバッグを行うための UI(現在のところ MacOS のみ)、レイアウト検証ツール、継続的に行われている Jetpack Compose 開発のサポートなどが含まれています。なお、現段階のバージョンはかなり初期の状態です。Compose を利用する場合は常に Canary 版の Studio を使う必要がありますのでご注意ください。
Murat Yener も、新しい Android Studio に関するブログ記事(日本語)を投稿しました。この記事では、Android Gradle プラグインの新しいアルファ版リリースであるバージョン 7.0.0-alpha01 について説明しています。なお、AGP もバージョン名が変更されました。今後、AGP は Android Studio のバージョンと連動するのではなく、Gradle のリリース バージョンに追従する形になります。現在の 4.2 リリースからいくつかバージョン番号が飛んでいるように見えるのは、そのためです。この記事では、AGP 4.2 における最新 API のいくつかの変更点についても説明しています。
Meghan Mehta が、RecyclerView についてのシリーズにブログ記事を投稿(英語)しました。RecyclerView は新しいものではありませんが、おそらく、ほとんどの Android デベロッパーはすでにアプリで使っているはずです。一部の基本的なドキュメントやサンプルがドキュメントや記事の中で見つけにくいことがわかったので、基本から使い方を説明しています。さらに、実例を示すためのサンプルコードも提供します。
この最新記事では、ListAdapter の使い方を重点的に説明します。ListAdapter を使うと、パフォーマンスの向上や項目の自動アニメーションなどのすばらしい機能を RecyclerView で簡単に実現できます。ListAdapter は DiffUtil を使って発生した具体的な変更を確認します。RecyclerView は、それを使ってパフォーマンスやアニメーションを最適化します。
私は引き続き、最近 1.0 に到達した AndroidX ライブラリである App Startup についての 2 回シリーズの記事(英語)で、起動時のパフォーマンスについて説明しています。パート 1 では、ライブラリのインスタンス化に Content Provider が使われることが多く、それによってアプリの起動時間に見えない影響が生じている点について説明しました。
パート 2 では、App Startup ライブラリを使って見えない Content Provider を取り除き、代わりにライブラリの遅延初期化リクエストをプーリングする方法について検討します。
Android Developers ブログには、位置情報のシステムと API に加えた改善について詳しく説明した記事(日本語)が投稿されています。この改善により、都市部で正確な位置情報を得られるようになります。この記事では、都市部で GPS 位置情報を取得する際の問題点について説明しています。GPS テクノロジーは、デフォルトで対象が見通し線上にあることを前提としているので、信号が高層ビルで反射する都市部ではうまく機能しない場合があります。Tor と私は、2014 年の ADB ポッドキャストで、位置情報チームの Marc Stogaitis から、「アーバン キャニオン」と呼ばれるこの現象について話を聞きました。
このチームは、精度の高い位置情報を得るために、主要都市の 3D 建造物モデルを統合しました。現在、一部の Pixel デバイスでこの技術のバージョン 2 を利用できます。初期バージョンはすでにエコシステムで広く使われており、来年の早いうちにこの最新バージョンも利用できるようになる予定です。
もちろん、この機能はユーザー機能で、Now in Android はデベロッパーが対象です。しかし、ここでこの機能を紹介したのは、(a)この記事と技術は興味深く、(b)デベロッパーは Fused Location Provider(FLP)を使って高度な位置情報データにアクセスすることが求められる場合があるからです。
さらに、FLP に新しい API が追加され、現在の位置情報をはるかに簡単に取得できるようになっています。具体的には、位置情報の変化をサブスクライブして最初の結果が得られたときにサブスクライブを解除するのではなく、現在の位置情報をリクエストして結果を得ることができます。詳しくは、FLP の getCurrentLocation() API のドキュメント、新しい CurrentLocationKotlin のサンプル、そしてブログ記事をご覧ください。
Chris Banes は、Tivi アプリを現在の UI Toolkit を使うアプリから、Jetpack Compose を使うアプリに移行しています。すべての UI を Compose 化し、移行作業の大部分を終えたところで、APK サイズ(大幅に減少)、メソッド数(減少)、ビルド時間(少し減少)について興味深い結果をブログ記事(日本語)で報告してくれました。
CameraX の CameraView API は、UI の制御から制御ロジックまで、あまりに多くのことを行い過ぎていました。そこで、ロジックをリファクタリングし、PreviewView と新しい CameraController クラスに分割しました。このブログ記事(英語)では、CameraController の使い方を説明するとともに、これまでの CameraView を使った機能との比較を行っています。
Romain Guy、Tor Norbye と私は、Square の Jesse Wilson 氏から、OkHttp、Okio、[Ok]Moshi など、同氏が手がけたいくつかの有名なオープンソース ライブラリについて話を聞きました。これらのライブラリのほかにも、Android、ライブラリ、フレームワーク、Kotlin 開発について語り合っています。また、機能リクエストや細かな問題を新しいオープンソース ライブラリを作るプロジェクトにしてしまう一部のエンジニアの厄介な癖に関する話題も登場しました。
Reviewed by Takeshi Hagikura - Developer Relations Team and Hidenori Fujii - Google Play Developer Marketing APAC