2020年のAndroidアプリ開発の変化を振り返る

2020年ももうすぐ終わりですね。

今年は本当に激動の1年でした。

Androidアプリ開発においても、1年経てば色々と環境が変わってきます。

今年出た技術や注目された技術について、私なりの視点で解説していきたいと思います。

Kotlin

Android開発においてもはや欠かせなくなっているのがKotlinですね。

2020年はKotlin 1.4もリリースされ、より一層、安定性とパフォーマンスが向上しました。 Kotlin Coroutines SAM変換末尾コンマ等の新しい機能についても、記憶に新しいと思います。

今後の発展にも注目です。

Kotlin Coroutines

Kotlin Coroutinesは特にFlowの変更が激しい1年でした。

今までホットストリームはChannel、コールドストリームはFlowといった使い分けでしたが、ホットストリームであるStateFlowSharedFlowが登場し、一気に書き方が変わりました。

また、今までホットストリームで使っていたBroadcastChannelConflatedBroadcastChannelは非推奨になることが決まっているようです。

個人的には、合わせて登場となった、ストリームの共有を行うためのstateIn, shareInが熱いなと思っています。

詳しくは以下の記事にまとめてあります。

また、Android Jetpackのライブラリも続々とKotlin Coroutinesの対応をしており、Android開発において広く取り入れられるようになってきました。

Android Jetpackに関してはまた後で取り上げます。

Kotlin Multiplatform (Kotlin Multiplatform Mobile)

Kotlin Multiplatformの話題もより一層盛り上がってきました。

今年は、Kotlin Multiplatform Mobile(KMM)という名前で、新しいSDKがalpha版で提供され始めました。

以前からも行われていた、AndroidとiOSのビジネスロジックだけ共通し、UI部分は各々で書くという手法を、公式がサポートし始めた形となります。

また、Netflixを始めとしてプロダクションでの採用報告が目立った年でもありました。

純粋なコードの記述量が減るだけでなく、iOS / Androidの予期せぬロジック差分を減らせるというところが魅了的に感じます。

Android Jetpack

Android JetpackはAndroidアプリ開発向けのサポートライブラリ群ですが、今年も様々な進化を遂げました。

気になったものをピックアップして紹介します。

Jetpack Compose

今年大注目のJetpackライブラリといえばJetpack Composeでしょう。

発表自体は2019年でしたが、この1年でかなり進化したように思います。

Jetpack ComposeはAndroidの新しいUI構築のためのツールキットで、SwiftUIReactFlutter等と同じように、宣言的に記述することができます。

まだalpha版ですが、2021年はさらに飛躍するのではないかと思って見ています。

Paging 3

Paging 3も今年追加されたライブラリの一つです。

意外と煩雑になりがちなページングの処理を支援してくれます。

Kotlin Coroutinesを全面的に利用しており、Flowにも対応しているのが印象的でした。

こちらもまだalpha版になっています。

DataStore

こちらも追加されて驚いたライブラリ、DataStoreです。

SharedPreferencesのいくつかの問題を解決するため、代替として登場しました。

Flow に対応していたり、protobuf でデータの形式を記述できたりと、非常に驚きの多いライブラリでした。

こちらもまたまたalpha版ですが、慣れ親しんだSharedPreferencesにお別れを告げる日は、そう遠くないかもしれません。

Dagger Hilt

今年公開されたもののうち、反響が大きかった一つはDagger Hiltだと思います。

DI Containerとしてデファクトではあるものの、若干とっつきにくかったDaggerが、アノテーション等によって書きやすくなっているようです。

個人的には、Daggerを使いこなせず、koinを愛用しているのですが、Dagger Hiltはかなり注目しています。

こちらもまだalpha版です。

App Startup

もう一つ、今年新たにAndroid Jetpackに参戦してきたのが、App Startupです。

アプリの起動時の初期化処理を支援してくれます。

こちらは、すでにstableになっています。

Activity / Fragment

Activity 1.2.0-alpha02Fragment 1.3.0-alpha02から、新しいActivity Result APIが追加されました。

API level 1からある、慣れ親しんだonActivityResultは非推奨となったため、注意が必要です。

詳しくはこちらから確認してみてください。

ViewBinding

DataBindingの弟分のようなVIewBindingが、今年Android Studio 3.6でstableとなりました。

DataBinding より機能は少なく、その分軽量に動くようになっています。

一方で、Kotlin Android Extensionsによるviewの参照は Kotlin 1.4.20 にて非推奨になりました。

もし使っていれば、これからはDataBindingもしくはViewBindingに乗り換える必要があります。

私の書いたこちらの記事も参考にしてみてください。

MotionLayout

MotionLayoutはアニメーションやモーションをxmlで管理できるものです。

発表自体は2018年のGoogle I/Oですが、2020年になってConstraintLayout 2.0でようやくstableになりました。

複雑な動きも比較的シンプルに記述することができます。

様々なサンプルも用意されているので、ぜひ一度覗いてみてください。

Android 11

毎年、Androidの新しいOSが発表されます。

今年も様々な新しい機能と安全性が向上した、Android 11が公開されました。

開発者目線で、Android 11で変わったところをさらっとおさらいしたいと思います。

プライバシー

Android 11ではプライバシーの保護の強化が行われています。

特に権限取得周りの変更が激しく、 1回のみのアクセス許可長期間アプリを利用しなかったときの権限自動リセット 等が追加されており、もし権限取得の情報を永続化してる場合は対応が必要となります。

他にもいくつか変更があるため、詳しくはこちらをご覧ください。

メディア コントロール

新しいメディア コントロールのUIが追加されました。

動画や音楽の操作を通知欄から行うことができ、また最後に再生したものを再開することもできます。

WindowInsetsの変更

ソフトウェアキーボードや、ステータスバー、ナビゲーションバー周りの操作が一新されました。

ステータスバーやナビゲーションバーの高さを取得するための、WindowInsets.getSystemWindowInsets() やフルスクリーンモード等を開始するためのView.setSystemUiVisibilityが非推奨となり、WindowInsets.TypeWindowInsetsControllerが追加されています。

Android 9頃から話題になっているedge-to-edgeの対応等が、かなり書き方が変わるので注意が必要です。

また、今までずっとできなかった、ソフトウェアキーボードのアニメーションの動きを検知し、UIと同期させることができるようになりました。

このあたりの説明は、この記事が詳しそうです。

Google Play

毎年、厳しい変更要求をしてくるGoogle Playですが、今年もいくつか変更があります。

ちょっとだけ紹介します。

In-App Review API

アプリ内でPlayストアに評価やレビューの送信を促すことができるようになりました。

詳しくはこちらを御覧ください。

定期購読の変更

Account HoldとRestoreが必須になったり、ResubscribeとPaused Subscriptionsの機能が追加されました。

この記事が一番わかりやすかったです。

その他ライブラリ

その他のライブラリで気になったものを紹介します。

coil

今まで画像表示のためのライブラリとしては、glidepicassoを選択することが多かったように思います。

2020年には、kotlin製の画像表示用のライブラリ、coilがstableになりました。

CoilはKotlin Coroutinesで実装されており、高速かつ軽量なのが特徴です。

少し使っただけですが、インターフェースも使いやすいように感じました。

ぜひ選択肢の一つにしてみてください。

Store 4

Dropboxが作成している、状態管理用のライブラリがKotlin Coroutinesで書き直され、Store 4として再登場しました。

ネットワークやDBのデータのフェッチや共有、キャッシングを支援してくれます。

私自身は使ったことはないですが、評価の高いライブラリのようです。

Turbine

TurbineはKotlin CoroutinesのFlow用のテストライブラリです。

私は自作のutilを使ってテストをしていますが、Flowをよく使っているプロジェクトでは採用してみても良いかもしれません。

Pokedex

こちらはライブラリではないですが、ここで紹介しておきます。

Pokedexは様々な最新ライブラリを活用したMVVMのAndroidサンプルアプリケーションです。

上記のDagger HiltからRoom、Kotlin Coroutines Flow等、今Androidアプリを開発する上では外せない様々な要素を学ぶことができます。

まとめ

かなり駆け足になりましたが、今年もAndroidの開発環境は激しく進化していることがわかりました。

2020年の前半にあった出来事で、もう忘れていたものもあったのではないでしょうか。

個人的には、2021年はJetpack Composeがかなり来るのではないかと思っています。

もちろん、Kotlin Multiplatform Mobileからも目が離せません。

また今回は紹介しませんでしたが、Flutterもますます勢いを増してくると思っています。

それでは皆さん、良いお年を!

参考