前回の記事から分離。
2019年現在、よく使われるライブラリと過去使われているために現在知見が求められがちなライブラリについて、独断と偏見で選んで簡単にまとめてみました。
Android Architecture Components
2017年のGoogle IOで発表された、Googleが提供するフレームワーク群です。 Androidの各ライフサイクルコールバックの再整理をベースに、DBや画面遷移などの様々なAndroid固有処理のライブラリを提供しています。
このうち、下記2つは(すぐには使わなくとも)確認しておくと後ほど便利です。
そのほか、不揮発性のDBを組みたい場合にはRoomを、Fragmentによる画面遷移を考えたい場合にはNavigationを確認すると良いと思います。
既存プロジェクトでは歴史的な経緯や、技術的にどうしても譲れない箇所が発生することがあるため、必須のライブラリとは言えません。 一方で新規に特殊な制約のない環境でアプリ開発を行うのであれば、LiveDataとViewModel程度は導入することになるのではないかと思っています。
Network
通信処理に関連するライブラリ。
OkHttp3 + Retrofit2
ど定番。
OkHttp
v3.13 から対応OSがAndroid 5.0
以上に引き上げられたことが記憶に新しい、HTTP通信用のデファクトスタンダードライブラリです。
なお、AndroidだけでなくJavaアプリケーションでも利用できます。
OkHttpはRetrofitだけでなく、KtorやGlideなどのライブラリで組み合わせて利用する方法が提供されています。 なぜOkHttpがデファクトスタンダードになったかは、下記のような歴史的な経緯が大きいです。時代を感じます。
Retrofit
RetrofitはHTTP API(GETやPOST, PUTやDELETEなど)をルールに則りinterfaceクラスとして定義することで、Annotation Processorによりコードを自動生成することができるライブラリです。 開発者としてはサーバーサイドAPIに合わせたinterfaceクラスを作成するだけで通信処理を記載することができるため、大幅なボイラーコードの削減を行うことができます。
Adapterと呼ばれるオプションを追加することで、RxやGsonなどの様々な処理を追加することもできます。 OkHttpとRetrofitがなければ、アプリ開発がままならなくなる現場も多いはず。それだけ重要度も知名度も高いライブラリです。
Image
どうしてもキャッシュしたいけどキャッシュ処理を書くのが厄介なネットワーク越しの画像取得をあれこれしてくれるやつ。
機能比較は色々なところでされていますが、日本語文献でよく参照されるのは下記の記事だと思います。
PicasoとGlideはAPI設計が似ているので、どちらかを使っていればもう一方にスイッチするのも簡単だと思います。 設定を見る限りGlideの方が設定できる項目が多いのですが、特に設定しないようであればどちらを利用しても大差がないのではないか、と感じます。
更新頻度で見るとGlideの方が活発ですが、Picasoは機能がシンプルなのでそこまで差は無いのではないでしょうか。 なお、個人的にはGlideを利用する傾向があります。
Android固有の問題対応
Androidのバージョン差に対応するタイプのライブラリです。
Permissions Dispatcher
Android 6.0(Android M)より導入されたRuntime Permission対応を簡単に行うことができるライブラリです。
Runtime Permissionについては下記の公式ドキュメントを参照してください。 「カメラやストレージへのアクセス、位置情報取得などの際にユーザーに認証を求める機能」と書けば、ユーザーとして利用したことがあるはずです。
Runtime Permissionに対応する際には、まずPersmissions Dispatcherの利用を検討してください。
ThreeTenABP
最低対応OSをAndroid 7.0(Android N)以前とすると、Java 8の機能を全て使うことはできません。*1
特に困るのは、日付型の扱いです。
Java 8よりLocalDate
などのTime APIが追加されました。
これらのTime APIをAndroid 7.0未満をターゲットにしたアプリで利用できるようにするライブラリが、ThreeTenABPとなります。
Time APIによる日付の扱いが非常に優秀なため、多くのケースで利用するライブラリになります。
Dagger2 or Koin
DIについては下記ブログを参照してください。
DIを行う際に利用されるライブラリは、DaggerとKoinに絞られている印象があります。*2
RxJava
非同期処理のデファクトスタンダードとしてRxが利用されていた(されている)ため、必須となることが多いライブラリです。 Android用のRxAndroidと合わせて利用されることが多くなります。
ただKotlin Coroutinesが登場したことで、本当に必要な場合にのみRxJavaが利用されるケースが増えるのではないか、と個人的に感じています。 Kotlin Coroutinesだけで済むのであれば、あえて入れる必要はないのではと思います。
古いコードを読み解くために
おそらく新しく作るプロジェクトでは利用することはないが、既存プロジェクトのリーディングなどでよく出会うライブラリです。
ButterKnife
findViewBy
を省略できるライブラリです。
最近では同じ目的でもDataBindingライブラリが使われる場合が多い印象です。
@BindView
というアノテーションが見えたら、ButterKinifeを調べてみてください。
Realm
AndroidのORMの歴史は少々複雑なため、下記の記事などを参照してみてください。
Realmは非常に優秀なライブラリなのですが、個人的にはアクセスするスレッドの管理などが難しいなと感じることもあり、新規に採用するならRoomかOrmaにするかなと思います。
RealmObject
を継承したクラスが現れたら、Realmについて簡単に調べてみてください。また、iOS版とは雰囲気がだいぶ異なるので参考にする文献には注意が必要です。。。
終わりに
簡単にまとめるつもりが5000字近くになってしまった。。。 ライブラリ選びの参考になれば幸いです。 なにかありましたら、ぜひコメントしちゃってください。
*1:ラムダ式などの機能は利用することができます。 詳しくは
Use Java 8 language features | Android Developers
を参考にしてください。
*2:Daggerしか使ったことないです