こんにちは、やぎにいです!
やぎすけ Advent Calendar 2016の4日目です。
昨日は僕がさくっとRecyclerViewを使ってリストを作成するを書きました。
今日は僕が今年1年、OSSのAndroidソースや、自分で作ってるアプリのソースを書いているときに、かなりの確率で導入する(されている)ライブラリや、僕が気に入って使っているライブラリを紹介したいと思います。
それぞれの使い方を紹介するとかなりの分量になってしまうので、掘り下げて紹介しようと思うライブラリは後日別記事として使い方を紹介します。
まずはじめにStethoです。
これはデバッグをかなり容易にできるようなライブラリです。導入するとGoogle Chromeのchrome://inspect
にアプリが表示され、Inspect
ウィンドウで簡単に見ることができるようになります。
見ることができる内容としては本当に様々で、よく使うのを挙げれば。
などを個人的にかなり使用します。
普通にGoogle ChromeでWebページを開いて検証
を確認した時と同じ通り、ネットワークはデータタイプやサイズ、レスポンス時間なども表示されるのでどこがネックなのか等簡単に確認することが可能です。
まず最初にこれを入れてデバッグに備えることが多い気がします。
次はTimberです。
こちらもStetho同様デバッグに使うライブラリになります。
よくデバッグログを出力するときはLog.d(TAG, "message");
のように書きますが、このコードをそのまま書いてしまうとrelease
ビルドなのにデバッグ出力がされていたりします。(実際にADBにつなぐと流れてきたりする)
TimberはApplicationクラスでTree
インスタンスを.plant
することによって簡単に場合分けのようなことが出来ます。Tree
インターフェースは自分で実装することもでき、自由にカスタマイズ出来ます。
予め用意されているDebugTreeを使えばTAGは自動生成されるのでTimber.d("message");
のようにいちいちTAG
を書く必要性がなくなったりして非常に楽になったりします。
ライブラリの導入も面倒ではないので、Log
を使うのであれば導入してしまいましょう。
続いてButterKnifeです。
よくいろんなView
を操作するときにTextView textView = (TextView) findViewById(R.id.text_view);
のように書いていると思いますが、量が多かったりするとfindViewById
だらけになってしまいます。
それをアノテーションを利用してonCreate
でButterKnife.bind(this);
をすることにより、いちいちfindViewById
をしなくても良くなります。
使い方は後日紹介しますが、ローカルスコープ内でしか利用しないから.bind()
するのも……というときもButterKnife#findById
を使用すると(TextView)
を置くみたいなキャストが必要なくなります。TextView textView = ButterKnife.findById(this, R.id.text_view);
の用にスッキリします。
間違いなく今findViewById
でいっぱいだよ!っていうケースではスッキリするのでおすすめです。(僕は初めて知った時めちゃくちゃスッキリしました)
そして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です。
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アプリを開発する際は本当に便利なライブラリがこの世界にはいっぱい転がっているので、色々見てみるととても楽しいです。
以上、やぎにいでした!
<< Stethoを使ってGoogle Chromeでデバッグをする さくっとRecyclerViewを使ってリストを作成する >>
2018やぎ小屋