Edited at

使ってよかったAndroidライブラリ

More than 3 years have passed since last update.

どうも、kouhonです。日付ギリギリですいません。

今回は今までのAndroidアプリ開発で使ってみて、良かったライブラリをいくつか紹介したいと思います。

ホントはKotlinのこと書こうと思ってましたが、間に合いませんでした。ごめんなさい。


OkHttp

以前はGoogle純正のVolleyを使っていましたがOkHttpに切り替えました。

切り替えた理由は以下の通りです。


1. Volleyが依存しているライブラリが削除されたから。

致命的ですね。Volleyは「Apache HTTP client」に依存していますが、Android API level 22で「Apache HTTP client」はdeprecatedになってしまいました。

しかも、Android6.0(Android API level 23)では削除されてしまいました。

クックパッドさんもブログで「Volleyの採用は間違いでした」と述べています。


2. ライブラリがGradleで管理できない

今はAndroid Studioでの開発が主流です。ライブラリはGradleで管理したいです。

当然、OkHttpはGradleで管理できます。


サンプル

JavaでOkHttpを使ってGetリクエストを書くとこんな感じです。


sample

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
.url("http://hugahoge.com")
.build();
client.newCall(request).enqueue(new Callback()
{
@Override
public void onFailure(Request request, IOException e)
{
// リクエスト失敗時の処理
}
@Override
public void onResponse(Response response) throws IOException
{
// リクエスト成功時の処理
// ステータスコードが200かどうか
if(response.code() == 200)
{
// レスポンスが200(OK)だった時の処理
}
else
{
// レスポンスが200(OK)以外だった時の処理
}
}
});


EventBus

非同期処理が増大するとリスナー地獄になることがありますが、EventBusはそれを解消してくれます。

リスナーよりもオブジェクトが疎結合に保たれ、簡潔なコードになります。

EventBusにはいくつか種類があり、私が知っている限りで3つあります。

私は最初に使ったのがgreenrobotだったのでgreenrobotを使っていますがgreenrobotはAndroidに最適化されているので問題なく使えます。


サンプル

Javaで非同期リクエストをして、リクエスト結果をEventBusを使って書くと以下のようになります。


SampleEvent

public class SampleEvent

{
// イベントクラスには非同期処理の結果などを保持させておく
private boolean mResult;

public SampleEvent(boolean result)
{
this.mResult = result;
}

public boolean getResult()
{
return this.mResult;
}
}



SampleRequest

public class SampleRequest

{
private static SampleRequest instance = new SampleRequest();
public static SampeRequest getInstance() {return instance;}
private SampleRequest(){}

public void request()
{
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("http://hugahoge.com")
.build();
client.newCall(request).enqueue(new Callback()
{
@Override
public void onFailure(Request request, IOException e)
{
// イベントオブジェクトを生成して、リクエスト結果を設定
EventBus eb = EventBus.getDefault();
SampleEvent event = new SampleEvent(false);
// イベントを送信
eb.post(event);
}
@Override
public void onResponse(Response response) throws IOException
{
// イベントオブジェクトを生成して、リクエスト結果を設定
EventBus eb = EventBus.getDefault();
if(response.code() == 200)
{
SampleEvent event = new SampleEvent(true);
}
else
{
SampleEvent event = new SampleEvent(false);
}
// イベントを送信
eb.post(event);
}
});
}
}



SampleActivity

public class SampleActivity extends Activity

{
private final EventBus mEventBus = EventBus.getDefault();



@Override
public void onResume()
{
super.onResume();
/// イベントバスの登録
this.mEventBus.register(this);
}

@Override
public void onPause()
{
/// イベントバスの解除
this.mEventBus.unregister(this);
super.onPause();
}



// 非同期のリクエストを実行
public void executeRequest()
{
SampleRequest.getInstance().request();
}

// イベントが送信されたらこのonEventがコールされる
public void onEvent(SampleEvent event)
{
if(event.getResult())
{
// リクエストが成功した時の処理
}
else
{
// リクエストが失敗した時の処理
}
}
}



Guava

Googleが提供しているライブラリです。

コンセプトとしては「いつもやっていることを短く書くため」のライブラリです。

使った理由はCollections2のfilterを使ってみたかったからです。

java8ならラムダ式が使えますが、まだAndroidが対応しているのがjava7までのため使えません。


サンプル

List<String> hugaHoge = Lists.newArrayList("huga", "hoge", "hugahoge"); 

Collection<String> resultCollection = Collections2.filter(
hugaHoge, new Predicate<String>()
{
@Override
public boolean apply(PlaceEntity input)
{
return input.equals("hugahoge");
}
});
resultCollection.size() // 1


注意

Guavaをプロジェクトに取り入れた場合にGuavaのメソッド数が多いためdexファイル(実行ファイル)のメソッド制限数(65535)に引っかかる場合があるので注意が必要です。

対応策としてはgradleのdependenciesに必要なもののみを追加するように設定し直すか、またはmulti-dexを使ってdexを拡張する方法があります。


support-annotations

これもGoogleが提供しているライブラリです。

主に使ってたので@NonNullです。


サンプル

public void huga(@NonNull String hoge)

{
何かしらの処理
}

上記のように書くと例えばhuga(null)と記述すると警告してくれます。

これにより、null例外を軽減することが出来ます。

@NonNull以外にも@UIThread@WorkerThreadなどのスレッド系のアノテーションや@FloatRange@IntRangeなど値の範囲のアノテーションなど様々なアノテーションが追加されたので上手に使っていきたいですね。

簡単でしたが今回はこの辺でm(_ _)m

kotlinについては技術ブログで書こうと思います。


最後に

アクトインディではエンジニアを募集しています!!!

もちろん、スマフォアプリエンジニアも募集しています!!!

Androidアプリをつくりたい!250万組の親子を笑顔に!!

iOSアプリをつくりたい!250万組の親子を笑顔に!!


参考ページ

OkHttp

Google Guava EventBus

square/otto

greenrobot

Google Guava