Androidプロジェクトを作って結構な確率で導入するライブラリ

やぎすけAdventCalendar2016 Android

Posted on Dec 4


こんにちは、やぎにいです!
やぎすけ Advent Calendar 2016の4日目です。 昨日は僕がさくっとRecyclerViewを使ってリストを作成するを書きました。

概要

今日は僕が今年1年、OSSのAndroidソースや、自分で作ってるアプリのソースを書いているときに、かなりの確率で導入する(されている)ライブラリや、僕が気に入って使っているライブラリを紹介したいと思います。
それぞれの使い方を紹介するとかなりの分量になってしまうので、掘り下げて紹介しようと思うライブラリは後日別記事として使い方を紹介します。


Stetho

まずはじめにStethoです。
これはデバッグをかなり容易にできるようなライブラリです。導入するとGoogle Chromeのchrome://inspectにアプリが表示され、Inspectウィンドウで簡単に見ることができるようになります。
見ることができる内容としては本当に様々で、よく使うのを挙げれば。

  • Viewのレイアウトの確認
  • ネットワークログ
  • RealmやMySQL等のORMのデータ
  • Preferenceで保存している値の確認

などを個人的にかなり使用します。
普通にGoogle ChromeでWebページを開いて検証を確認した時と同じ通り、ネットワークはデータタイプやサイズ、レスポンス時間なども表示されるのでどこがネックなのか等簡単に確認することが可能です。
まず最初にこれを入れてデバッグに備えることが多い気がします。


Timber

次はTimberです。
こちらもStetho同様デバッグに使うライブラリになります。   よくデバッグログを出力するときはLog.d(TAG, "message");のように書きますが、このコードをそのまま書いてしまうとreleaseビルドなのにデバッグ出力がされていたりします。(実際にADBにつなぐと流れてきたりする)

TimberはApplicationクラスでTreeインスタンスを.plantすることによって簡単に場合分けのようなことが出来ます。Treeインターフェースは自分で実装することもでき、自由にカスタマイズ出来ます。
予め用意されているDebugTreeを使えばTAGは自動生成されるのでTimber.d("message");のようにいちいちTAGを書く必要性がなくなったりして非常に楽になったりします。
ライブラリの導入も面倒ではないので、Logを使うのであれば導入してしまいましょう。

ButterKnife

続いてButterKnifeです。
よくいろんなViewを操作するときにTextView textView = (TextView) findViewById(R.id.text_view);のように書いていると思いますが、量が多かったりするとfindViewByIdだらけになってしまいます。

それをアノテーションを利用してonCreateButterKnife.bind(this);をすることにより、いちいちfindViewByIdをしなくても良くなります。
使い方は後日紹介しますが、ローカルスコープ内でしか利用しないから.bind()するのも……というときもButterKnife#findByIdを使用すると(TextView)を置くみたいなキャストが必要なくなります。TextView textView = ButterKnife.findById(this, R.id.text_view);の用にスッキリします。

間違いなく今findViewByIdでいっぱいだよ!っていうケースではスッキリするのでおすすめです。(僕は初めて知った時めちゃくちゃスッキリしました)

Icepick

そしてIcepick
よくAndroidアプリを作るときはActivityやFragmentのライフサイクルを考え、破棄される時の事を考慮して設計します。
画面回転を抑制していなければ回転した瞬間に画面にあったEditTextに入力してた値が吹っ飛んだ!みたいな経験がきっとあると思います(僕はあります)。

そういうケースではonSaveInstanceStateでデータを保持しておいてonRestoreInstanceStateで復元する。みたいな実装をするのが定番の実装だと思います。
が、結構保持するべきデータが多かったりするとそれぞれのコード量が多くなりがちです(本来こういう実装はあんまりよくないと思うけど)。

そんなときにこのIcepickを使うと、保持しておきたいフィールドに対して@Stateアノテーションを付け、onSaveInstanceState内でIcepick.saveInstanceState(this, outState);と記述してあげることでアノテーションがついていたフィールドの値は保持されます。
同様に復元するときもIcepick.restoreInstanceState(this, savedInstanceState);と書くだけで復元されます。すっごい簡単ですね。今まではoutstate.putString(Key, value);と書きまくっていたのが1つにまとまります。

EditTextの文字を保持して復元するときは、EditTextから値を引っ張り出し、Icepick.saveInstanceState()、そしてIcepick.restoreInstanceState()してからEditTextにセットという手順を踏む必要はありますが、今までと比べて簡単になりました。
保持したいなーと思うフィールドが多い場合は導入する価値があるライブラリだと思います。オススメです。

IntentLogger

今回紹介する最後のライブラリはIntentLoggerです。
Stetho,Timber含めデバッグ系のライブラリが多いなという印象ですが、このIntentLoggerもデバッグに貢献するライブラリになります。

Androidのアプリ開発をしていて、1画面で完結し他のActivityなどに遷移しないというのはかなりのレアケースだと思いますが、遷移する際によくIntentに値を含めて渡すケースが有ると思います。
それがイマイチうまく渡ってなかったりするときに受け取り側でintent.getXXX()をいっぱい書いてそれをLogクラスなり、紹介したTimberなりに渡してデバッグをする必要がありましたが、このIntentLoggerを導入するとIntentLogger.dump(TAG, getIntent());の1つで済みます。
Actionや含めたExtra、IntentにセットしたFlagなどがLogCatに表示されます。

GitHubのスター数も今まで紹介したライブラリよりは少ない上に「Android おすすめ ライブラリ」等で検索したときもあまりヒットしないライブラリではありますが、個人的にかなりおすすめのライブラリです。


おわりに

以上5個のライブラリを僕は大体の確率で導入しています。
今回は文字成分だけの記事になってしまいましたが、明日以降個別の記事としてIntentLoggerを除いた4つのライブラリを掘り下げて使い方などを実際のコードを交えて紹介していきたいと思います。
Androidアプリを開発する際は本当に便利なライブラリがこの世界にはいっぱい転がっているので、色々見てみるととても楽しいです。

以上、やぎにいでした!


このエントリーをはてなブックマークに追加
comments powered by Disqus

<< Stethoを使ってGoogle Chromeでデバッグをする     さくっとRecyclerViewを使ってリストを作成する >>



2018やぎ小屋