本記事では、クービック株式会社が提供している**サロンの前日・当日予約サービスPopcorn**のAndroidアプリで使っているライブラリを紹介します。
ここで紹介しているライブラリはほんの一部です。アプリ内のライセンス表記から全リストを見れるので、気になる方はぜひ一度ダウンロードしてみてください。
ライブラリ一覧
ActiveAndroid
生のSQLiteのクエリを書くのは辛いので、ActiveAndroidというORMを使っています。
ORMは途中で移行するのが厳しいので、かなりコンサバにライブラリを選定しました。
1年ほど運用してみて感じたのは、
- APIがとてもわかりやすい
- (英語も日本語も)情報が多いので、何か問題が発生しても大抵なんとかなる
- パフォーマンスは微妙
- そこまで困ってはないですが
- バージョンを飛び級するマイグレーションが微妙(バグってる?)
ということです。
ActiveAndroidのネガティブな評判というとパフォーマンスが挙げられることが多いですが、個人的には最後のマイグレーションの問題がネックでなんだかなあという感じです
Conceal
Facebookが開発している暗号化ライブラリ。
デリケートな情報を端末に保存する際に、暗号化/復号するのに使っています。
こちらのライブラリは非常にめんどくさい&気をつけないと脆弱性を仕込む可能性のある暗号化処理を代わりにやってくれるので大変有用なのですが、64bit CPUに対応できてないという致命的な問題が。。(Xperia Z4やGalaxy S6で動かないというレポートで気付きました)なお、本家のリポジトリにPull Requestは出てるのですが、もはやメンテする気がないのかマージされる気配が全く無いです。
しょうがないので、64bit対応されたforkをcloneしてきて、手元でビルドして使っています。ビルドにはbuckというFacebookのビルドツールが必要なので注意。
Dagger 2
アプリの規模が大きくなり、依存関係が複雑になってきたタイミングで導入しました。
導入当初はDagger 2が出たばかりの頃で情報が少なく手間取りましたが、導入後はコンポーネント間の依存関係がすっきりと整理されました。
ButterKnife
ビューの依存性注入に使用。
もはやAndroid開発においてデファクトスタンダード感ありますね。findViewById
やsetOnClickListener
など書かなくてよくなるので、ActivityやFragmentのコード量を減らして見やすくできます。
Parceler
画面間でデータの受け渡しをする場合に、Parcelとモデルの間の変換コードを自動生成してくれます。
Retrofit
APIクライアントをアノテーションから自動生成するライブラリ。
はじめGoogleのVolley(※リンク先はクローン)というライブラリを使っていたのですが、エンドポイントが増えるたびにそこそこコードを書かなくてはならないのが辛くて途中で移行しました。移行前後で比較すると、API周りのコード量をとにかく減らせるのがメリットです。
一方、Volleyにある機能で自動リトライなどはRetrofitにはないので、自前で作る必要があります。
Picasso
サーバーにある画像を読み込んでImageViewに表示するのに利用しています。
こちらも元々はVolleyのNetworkImageViewを使っていたのですが、円形のImageViewを作るときにNetworkImageViewを継承しないといけない縛りが辛かったのでPicassoに移行しました。
このライブラリは現行の2.5.2で、特定のEXIFヘッダがついているときに画像が読み込めないというバグがあります。しょうがないのでサーバー側でEXIFを消すことで対応しています。
Stetho
Facebookが提供しているデバッグ用ライブラリです。
通信のリクエスト/レスポンスの分析やSQLiteの中身を除くのに便利です。
通信系が現在使っているRetrofit+OkHttpだと導入はお手軽なのですが、以前Volleyを使ってた時は導入に一苦労しました。結論を言うと、
- Volleyが内部で使っている通信クラスをHttpUrlConnectionからOkHttpに変更する
- StethoのOkHttp用アダプターを入れる
という手順で導入しました。
ライブラリとの付き合い方
ライブラリを導入するときは、
- 十分に実績があるか
- ちゃんとサポートされているか
を確認してから導入するようにしていますが、それでもライブラリのバグを踏むことはよくあります。ActiveAndroid, Picasso, Concealあたりは実際にバグを踏んでおり、しかも本家で対応されていません。そんなときは
- ライブラリを自分で直して使う
- バグを踏まないように回避する
しかないので、事前にじっくり調査した上で用法用量を適切に守ってライブラリを使いましょう。