ボクココ

個人開発に関するテックブログ

爆速 Android アプリ開発をサポートする Bootroid をOSS化しました

Bootroid は、特に JSON API を通じてサーバとやりとりする Android アプリ開発を爆速化するフレームワークです。 一般的な Web サービスをAndroidアプリで実現しようとした際に有用です。

インストール方法などは上記リンク先を参照していただくとして、この記事ではBootroid の中で特に有用と思われる 3つの主要機能について解説します。

API 通信

HTTP リクエスト

Bootroid 内に Volley が埋め込まれていますので、わざわざ Volley をインストールする必要はありません。ほんの少しのセットアップを済ませるだけで、以下のように簡単にAPIアクセスができます。

        ApiRequest.get(URL, new ApiResponseHandler() {
            @Override
            public void onSuccess(JSONObject jsonObject) {
               // parse json
            }

            @Override
            public void onFailure(ApiException e) {
                // error handling
            }
        });

REST API アクセス

API のレスポンスに対応した Java エンティティを作成するだけで自動でそのフィールドに値が入るような REST API アクセスも可能です。

例えば、以下のようなJSONを返す APIがあったとします。

{
  article: {
    "id": 1,
    title: "Bootroid",
    "author": "honkimi",
    "content": "Bootroid supports your speedy android development."
  }
}

以下のように書くだけで、値の入ったArticleを取得できます!

class Article {
    public int id;
    public String title;
    public String author;
    public String content;
}

private void fetchRestRequest() {
    RestApi.baseKey = "article";
    RestApi.show(URL, Article.class, new ApiCallbackBase.ApiCallback<Article>() {
        @Override
        public void onSuccess(Article response) {
            // article
        }

        @Override
        public void onFailure(String message, int code) {
            // error handling
        }
    });
}

画像表示

HTTP での画像表示

レイアウトは以下のように記述します。

        <com.android.volley.toolbox.NetworkImageView
            android:id="@+id/network"
            android:layout_width="50dp"
            android:layout_height="50dp" />

アクティビティに読み込むURLを指定すればOKです。

NetworkImageView network = (NetworkImageView) findViewById(R.id.network);
String imageUrl = "https://assets-cdn.github.com/images/modules/open_graph/github-mark.png";
network.setImageUrl(imageUrl, ApplicationController.getInstance().getImageLoader());

Fontawesome のアイコン表示

Fontawesome のたくさんのアイコンをAndroidで利用することができます。

レイアウトは以下のように記述します。

    <TextView
        android:id="@+id/github_icon"
        android:text="&#xf092;"
        android:textSize="50sp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

&#xf092; は上記リンク先で使いたいアイコンから指定します。

アクティビティに以下を追加するだけです! thisActivity を指します。

IconUtil.setIcons(this, R.id.github_icon);

キャッシュの保存、取得

APIで取ってきたデータを一時的に保管し、次回起動時にそれを読み込ませてオフライン時の対策だったり、ローディングを回避したりといったところでキャッシュは多用されます。

Bootroid ではオブジェクトをそのままJSONに変換し、保存する機能を提供します。

例えば以下のようなエンティティがあるとします。

    class Sample {
        public int id;
        public String name;
        private Sample(int id, String name) {
            this.id = id;
            this.name = name;
        }
    }

ListでAPIから取得したとします。つまり、以下のフィールドに値が入っている状態です。

private ArrayList<Sample> samples;
private static final String CACHE_KEY = "sample_cache";

キャッシュの操作

// 保存
ObjectStorage.save(samples, CACHE_KEY);
// 読み込み
Sample[] cache = ObjectStorage.get(CACHE_KEY, Sample[].class);
// 削除
ObjectStorage.remove(CACHE_KEY);

取得した配列をリストに変換し、リスト操作した後また上書き保存することにより、簡単なデータ更新や一部削除なども簡単に実装できます。 複雑なデータ処理はSQLite を使う必要がありますが、シンプルなデータ操作であればキャッシュだけで実現できます。

その他機能

その他にも以下のようなよく使われる機能をまとめてあります。

  • GCM(プッシュ通知) の登録、受け取り処理
  • EditText のバリデーションのフレームワーク
  • Google Analytics 共通処理
  • Splunk 共通処理
  • その他 Androidアプリ開発でよく使う Util系

終わりに

今回公開したソースは全て、実際に作ったプロダクトで外出しにできる部分のうち、特に有用だと判断したもののみを公開しております。

もっと改善してより爆速な Android 開発を目指していきます。