久々にAndroidアプリを開発したら色々と便利になっていた
- 2017年4月14日
- Android
最近、数年振りにAndroid開発に携わったのですが、色々と驚かされました。私が開発した当初に比べ環境が進歩し、開発がかなり便利になっていました。IDEしかり、ライブラリも豊富かつ有用なものが増えており、最近の開発者は恵まれているな、と感じました。
そこで、今回は備忘録も兼ねてAndroid開発で便利だった機能やライブラリを幾つかピックアップして紹介していこうかと思います。
データ バインディング
ViewとModelをシームレスに結合出来ます。当然、双方向のサポートしているのでModelで変更した値がView側にも反映されます。Modelをそのまま変更するのは当然危険なので、ViewModelを使ってバインディングしました。
Android Developers データ バインディング ライブラリ
Gradle
Androidアプリの設定をカジュアルに定義出来ます。DSLもGroovyなので XMLと違って見やすく書きやすい!。
何より嬉しかったのがMavenリポジトリに対応している事。
例えば、
compile 'io.reactivex.rxjava2:rxjava:2.0.1'
と1文追加すれば、RxJava2のライブラリをリポジトリから自動でインストールしてくれ、なおかつ参照の設定まで行ってくれます。また、依存関係も(大抵は)綺麗に管理してくます。
これまで手動で行っていた面倒な設定が、1行定義するだけで済むのはありがたいです。
Gradleの便利さもあり、今回の開発はライブラリも色々と使わせてもらいました。以下、すぐに使える(Dagger2以外)便利なライブラリを紹介します。
Eventbus
ここからライブラリの紹介です。カジュアルにObserverでイベントを通知、受信できます。iOSだとNSNotificationみたいなものです。AndroidではLocalBroadcastManagerが標準で用意はされているのですが、汎用性が高い故、扱うのが面倒でした。ですが、Eventbusだとカジュアルに通知を扱えたうえソースコードも簡潔になります。
Dagger2
DIコンテナです。square社製のDaggerもあったのですが、Google製という事もありDagger2をチョイスしました。DI用のクラスを用意するまでは面倒でしたが、以降はクラスも綺麗に分けられ、これ無しでの開発は考えられない程になりました。
OkHttp3
HTTP通信のライブラリです。HTTP通信の処理って実装が面倒なのですが、このライブラリを導入するとカジュアル且つ簡潔にコードを書けます。
Picasso
画像のダウンロードのライブラリです。ダウンロードした画像を非同期でImageViewに反映するコードもPicassoを使えば1行で書けてしまいます。また、キャッシュなんかも使ってくれます。Glideという選択肢もあったのですが、今回はそんな複雑な処理もしなかったのでPicassoをチョイスしました。
RetroLambda
ラムダでコードを書けます。Java8から使えるのですが、AndroidだとN以上でなければ使用出来なかったはず。
ラムダで書くと以下のコードが、
button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { hoge(); } });
button.setOnClickListener(v -> hoge());
で書けます!何かとJavaのコードは冗長になりがちなので、これは助かります。
Retrofit2
Headerの定義だとか、POJOでGsonを使ったりとかが、簡潔に書けます。
また、インターフェースで通信先の定義が出来ます。今まではオレオレでこういう仕組みを作っていたのですが、Retrofit2の方がアノテーションも使って見通しが良いです。
定義はこんな感じ。
public interface getUser{ @GET("api/user/info") Call<User> fetchUser(); }
Stetho
HTTP通信の試験用ライブラリ。Chrome上で通信内容やパフォーマンスを表示してくれます。試験の際は重宝しました。当然、製品版ではライブラリ自体を削除しています。
LeakCanary
メモリリークを判定してくれる試験用ライブラリ。アプリを動作させていると、メモリリークがどの辺りで発生したかが、分かります。
久々に開発したがまだ便利になっていない点
ImageViewなんですが、そろそろピンチイン・ピンチアウトで拡大・縮小する機能を搭載して欲しいです。今回も自作しましたが、結構大変なんですよ。コレ。
久々に開発したがさらにカオスになっていた点
CameraAPIが非推奨になっていたので、Camera2APIに切り替えたのですが……なんでしょうか、このコールバック地獄。
Googleのサンプルコードでこの状態です。(1000行を超えています)
GitHub googlesamples/android-Camera2Basic Camera2BasicFragment.java
もちろん、サンプルなのでこれをコピーしてもそのまま実運用では使えません。普通のアプリならカメラ機能なんて自作せずにインテントで別アプリを使ってね、という事でしょうか。(ちなみに私はこの考えに賛成です。)
後、これはAndroidというより各ベンダーに対してなのですが、カメラの挙動が各端末毎にあまりにも違い過ぎます。一体、いつになったらAndroidは機種依存という問題から解放されるのでしょうか。
Androidアプリの開発も充実してきたのは、喜ばしい感じですね。ネットにアクセスしているOSも遂にWindowsを抜き首位に立ったというニュースも最近流れていましたし、今年中にAndroidアプリの収益がiOSを抜くかもしれないとの調査報告もあげられており、ますますAndroidはその存在感を増すのでしょうね。
金曜日担当 Window開発チーム 古村
komu at 2017年04月14日 10:00:08