最近話題のandroid用ライブラリを使ってみた感想

いま,androidのライブラリが熱い!!!!!

のかどうかはわかりませんが,androidのコーディングを楽にしてくれる様々なサードパティのライブラリが多く出ているのを知って実際にいくつか使ってアプリを作ってみたのでそれぞれの雑感を簡単にまとめました.

今回作ったPodcast視聴アプリ : "Podtuner"

f:id:kazy1991:20121228093603p:plain

(クリックでgoogle Playに飛びます)

詳しくはこちら<androidアプリ第2弾 Podtunerをリリースしました>

f:id:kazy1991:20130410001134p:plain

使用したライブラリ

Aqueryについて

  • AqueryはAndroidのビューに関わるコードをjQueryライクにかけるライブラリです

良い点

  • コード量が圧倒的!! に少なくなる

例えばこんなコードを,

public void renderContent(Content content, View view) {
        
        
        ImageView tbView = (ImageView) view.findViewById(R.id.icon); 
        if(tbView != null){
                
                tbView.setImageBitmap(R.drawable.icon);
                tbView.setVisibility(View.VISIBLE);
                
                tbView.setOnClickListener(new OnClickListener() {
                                
                                @Override
                                public void onClick(View v) {
                                        someMethod(v);
                                }
                        });
                
        }
        
        TextView nameView = (TextView) view.findViewById(R.id.name);    
        if(nameView != null){
                nameView.setText(content.getPname());
        }
        
        TextView timeView = (TextView) view.findViewById(R.id.time);  
        
        if(timeView != null){
                long now = System.currentTimeMillis();
                timeView.setText(FormatUtility.relativeTime(now, content.getCreate()));
                timeView.setVisibility(View.VISIBLE);
        }
        
        TextView descView = (TextView) view.findViewById(R.id.desc);    
        
        if(descView != null){
                descView.setText(content.getDesc());
                descView.setVisibility(View.VISIBLE);
        }
}

Aqueryを使って書くとこんな感じにシンプルに書けます

public void renderContent(Content content, View view) {
        
        AQuery aq = new AQuery(view);
        
        aq.id(R.id.icon).image(R.drawable.icon).visible().clicked(this, "someMethod");  
        aq.id(R.id.name).text(content.getPname());
        aq.id(R.id.time).text(FormatUtility.relativeTime(System.currentTimeMillis(), content.getCreate())).visible();
        aq.id(R.id.desc).text(content.getDesc()).visible();             
        
        
}
  • 非同期通信が周りのコードも楽に書ける
    サーバーとのやり取りが簡単に記述できるので,webアプリからの移植も比較的簡単に出来ると思います.
aq.ajax(url, JSONObject.class, this, "jsonCallback");

public void jsonCallback(String url, JSONObject json, AjaxStatus status){
        
        if(json != null){               
                //successful ajax call          
        }else{          
                //ajax error
        }
        
}
  • さらにサーバーにある画像の読み込み処理なんかも簡単に記述できます

読み込みとか何も気にしなくても良いし,ローディング時の画像の切り替えやキャッシュの設定も簡単

  aq.id(R.id.thumnail_view).image("http://a3.mzstatic.com/us/r30/Podcasts/v4/e1/ef/d8/e1efd869-7829-1209-2bd0-beb718d62744/mza_7833329250072053958.600x600-75.jpg");

イマイチな点

  • すべてのメソッドが実装されているわけではない
    結構頻繁に使うメソッドが意外と実装されていないことがあり,"Aqueryで記述した部分" と "普通に書いた部分" が混在しコードが綺麗じゃないかんじがあります. 例えば ItemClickListenerの代替メソッドはあるけどItemLongClickListenerは実装されていません.

  • デバックが若干大変
    これはコード量が減ったのとトレードオフな感じがしました.

Gson

  • Gsonは厳密にはJavaのライブラリでandroid以外でも使用出来るJsonのパーサーです.

良い点

  • パースの手間がかからず楽 例えば こんな感じのjsonを受け取りたい場合
{
  name : john
  age : 21
  nation : US
}

こんな感じのクラスを用意して,

public class Person{
  String name;
  String age;
  String nation;
}

gson.fromJsonでjsonで受け取ったデータを用いたインスタンスが作成されます.

rankResult = gson.fromJson(json.toString(), Person.class);

悪い点

  • jsonのキーの名前がそのまま変数に使われるので,jsonの設計(camelCaseで書くとか)をJavaに合わせなければならない.

ActiveAndroid

  • SQliteを ActiveRecode風に扱えるラッパー

良い点

  • 文法も簡単で学習コストも低い
PodcastItemModel podcastItem = new PodcastItemModel();
  // .....  todo
podcastItem.save();

こんな感じで書けるsqliteを意識することは全くなく書けます

悪い点

  • ネット上に情報が少ない(ググらビリティも若干悪い) stackOverflowとか全然出てこなくて泣ける

総評的ななにか

どのライブラリもコード量が圧倒的に削減でき開発スピードを早めることができます. 今回のアプリは一週間を目標にしリリースしたですが,それが出来たのも今回紹介した3つのライブラリの影響がかなり大きかったように思います.