kobakei's blog

プログラミングの話や技術系イベントの話をゆるく書くブログです

Android開発における定番ライブラリ22選

Androidをはじめたばかり or これから始める人向けにまとめました。UI系ライブラリは種類が多すぎるので除外しています。

公式系

1. サポートライブラリ

developer.android.com

※種類が多いのでまとめて1つとカウントしました

Android後方互換性を維持するために、Googleが提供しているライブラリ群です。機能ごとにパッケージが分かれていますが、ほぼ必須のものが多いです。

  • appcompat
  • support-v4
  • multidex
  • design
  • recyclerview
  • cardview
  • etc

2. Data Binding

developer.android.com

レイアウトにデータを紐付けることで、データの更新に応じて自動的にビューを更新することができるライブラリです。レイアウトの属性を増やしたり、findViewByIdを簡略化するだけでも使えます。

以前はButterKnifeというライブラリが使われることが多かったですが、data bindingの方が多機能なので最近はdata bindingの方が人気があると思います。

3. Architecture Components

developer.android.com

Androidフレームワークのライフサイクル関連の問題を扱うことができます。まだ情報が少ないので定番とは言いにくいですが、間違いなくこれから主流になると思います。主に以下4つのコンポーネントからなりますが、LifecycleとViewModelが優先度が高く、Roomが最も優先度が低いです。

  • Lifecycle
  • ViewModel
  • LiveData
  • Room

JSON

4. Gson

github.com

JSON文字列をPOJO (Plain Old Java Object)に変換したり、逆にPOJOJSON化するのに使います。

僕の観測範囲ではGsonが最もメジャーどころですが、他にもJackson, Moshiなどがあります。

Parcelable

5. Parceler

github.com

AndroidにはParcelableというシリアライズの仕組みがあり、画面遷移時のデータの受け渡しなどに使います。Parcelableを使うためにはボイラープレート(お決まりの定型文となるコード)を書く必要があるのですが、Parcelerはこれを自動的に生成してくれます。

KotlinではParcelizeという標準の仕組みがありますが、まだExpetimentalなので実戦投入にはご注意ください。

通信

6. OkHttp

square.github.io

Squareが提供しているHTTPクライアントです。ほとんどのAndroidアプリが採用しているといっても過言ではないかと思います。

7. Retrofit

square.github.io

インタフェースを定義するだけでAPIクライアントを生成してくれるライブラリです。ほとんどの人はOkHttpとセットで使用していると思います。また、後述のRxJavaと組み合わせて、APIの結果をRxJavaのストリームで受け取ることも出来ます。

画像

8. Glide

bumptech.github.io

簡単にサーバー上の画像を読み込んでImageViewに表示することができます。OkHttpと連携することで、画像のダウンロードをOkHttpに任せることも出来ます。

SquareのPicassoもメジャーですが、最近アップデートされていないので今ならGlideを使うほうが無難だと思います。

データベース

9. Orma

github.com

AndroidSQLite用のORMです。高速なIOや自動マイグレーションなど、豊富な機能がたくさんあります。

Architecture ComponentsのRoomも似ていますが、マイグレーション周りはOrmaの方が便利だと思うので僕はOrmaをおすすめします。

10. Realm

realm.io

こちらはNoSQLなデータストアです。高速なIO、簡単に暗号化できる点などが人気があるようです。Android組み込みのSQLiteではなく、完全に別のデータベースを組み込むのでアプリサイズが大きくなるかもしれません。

依存性注入

11. Dagger 2

google.github.io

依存性注入ライブラリの定番です。導入は難しいですが、一度導入してしまえばクラス間の依存関係を綺麗に保ち、テストを書きやすい状態を維持できます。

SquareのDaggerとGoogleのDaggerがありますが、Googleの方が新しくAPIやパフォーマンスが改善されているので基本はGoogleの方を使用しましょう。

非同期処理

12. RxJava

github.com

Reactive Streamsという非同期処理ライブラリのJava実装です。APIやデータベース処理などをストリームとして扱うことができます。RxAndroidと大体セットで使います。

13. EventBus

greenrobot.org

Pub/Subのライブラリです。AndroidフレームワークのBroadcastReceiverに似ていますが、Context以外のクラスでも受信できたり便利です。

使いすぎるとコードがカオスになるので用法・用量を守って以下略。

言語機能系

14. ThreeTen ABP

github.com

Java 8の日付関連のAPIのバックポートライブラリです。

15. Lightweight Stream API

github.com

Java 8のストリームAPIのバックポートライブラリです。mapfilterなど他のプログラミング言語のリストにあるメソッドが使えるようになります。

Kotlinの場合は、Kotlinのコレクションが多機能なので不要です。

ランタイムパーミッション

16. PermissionsDispatcher

permissions-dispatcher.github.io

Android 6から追加されたランタイムパーミッションに対応するためのライブラリです。アノテーションを付けるだけで、パーミッション周りのコードを自動生成できます。

17. RxPermissions

github.com

PermissionDispatcherと同じですが、RxJavaの形式でハンドリングできます。

デバッグ

18. Timber

github.com

ロガー。リリースビルドとデバッグビルドでログの出力を切り替えたり、本番だけCrashlyticsなどにログを送信したりできます。

19. Stetho

facebook.github.io

PCにつないでGoogle Chromeデバッグできます。通信のリクエスト/レスポンスの中身を見たり、アプリのデータベースの中身を見たり、UIの構造を調べたり出来ます。

20. LeakCanary

github.com

メモリリークを自動的に検出してくれるライブラリです。

テスト

21. Robolectric

Robolectric

Android単体テストJVMで実行するためのライブラリです。Android単体テストは通常Androidフレームワーク上でしか実行できないのですが、それだとテストの実行時にエミュレータの起動や実機の接続が必要になるため何かと不便です。Robolectricを使ってJVM上で実行することで、簡単かつ高速に単体テストを実行できます。

22. Mockito

site.mockito.org

テスト時にモックを簡単に作成できるライブラリです。