15
Hello AndroidAnnotations 2013.10.26 名古屋Androidつくる部 LT

Hello androidannotations

Embed Size (px)

Citation preview

Page 1: Hello androidannotations

Hello AndroidAnnotations

2013.10.26  名古屋Androidつくる部  LT

Page 2: Hello androidannotations

•  高木翔一 •  @fly1tkg •  http://b.fly1tkg.com •  最近、勢いでCookie Clicker Cameraというアプリをつくりました。(制作時間3時間くらい)

Page 3: Hello androidannotations

AndroidAnnotaionsとは?

•  Code  Diet  •  AndroidAnnota7onsはAndroidアプリ開発をスピードアップするためのフレームワークです。  

•  このフレームワークが水面下でサポートすることで開発者は本当に重要なものに集中できます。  

•  コードをシンプルにすることでメンテナンスをしやすくします  

•  h9p://androidannota7ons.org/ より

Page 4: Hello androidannotations

AndroidAnnotaionsとは?

AndroidAnnota7onsをつかってダイエットしましょう  

Page 5: Hello androidannotations

AndroidAnnotaionsとは?

•  現在2.7.1がリリースされている  •  もうすぐ3.0.0がでる  

•  いったいどんなことが出来るの?

Page 6: Hello androidannotations

@ViewById

•  Viewメンバ変数にfindViewByIdの結果を入れといてくれる  

•  IDの指定が無ければメンバ変数名から推測してくれる  

// findViewById(R.id.image)の結果を入れてくれます @ViewById ImageView image; // findViewById(R.id.button)の結果を入れてくれます @ViewById(R.id.button) Button mButton;

Page 7: Hello androidannotations

@Click

•  @Clickがついた関数は指定したIDのViewがックリックされたときに呼ばれる  

•  IDの指定が無ければ関数名から推測してくれる  

@Click void button() { // R.id.buttonが押されたときに呼ばれる } @Click(R.id.okButton) void onOkButtonClick() { // R.id.okButtonが押されたときに呼ばれる }

Page 8: Hello androidannotations

@Background

•  関数をバックグラウンドで実行してくれる  •  Callbackが必要なければ、これで投げっぱなしにするの便利  

@Background void backgroundTask() { // 何か時間のかかる処理 }

Page 9: Hello androidannotations

@UIThread

•  関数をUIThreadで実行してくれる  •  Viewの操作とかに便利(UIスレッド以外で操作すると怒られる)  

@UIThread void setImage() { imageView.setImageBitmap(mBitmap) }

Page 10: Hello androidannotations

AndroidAnnota7onsが使える所

•  @EAc7vity  @EFragment  @EView  @EViewGroup  @EBean  などのアノテーションがついたクラス  

@EActivity public class AnnotationsActivity extends Activity { @ViewById ImageView image; }

Page 11: Hello androidannotations

@EAc7vity

•  レイアウトIDを指定することでonCreate時に適用してくれる  

•  @ExtraでIntentExtraつくれる  •  IntentBuilderをつくってくれる  @EActivity(R.layout.activity_main) public class AnnotationsActivity extends Activity { @Extra String id; }

new AnnotationsActivity_.IntentBuilder().id(id).start();

Page 12: Hello androidannotations

仕組み

•  @EAc7vityなどがついたクラスのサブクラスのコードを生成し、そのクラス内でAnnota7onを元に処理を追加していきます。  

•  生成コードは.apt_generatedに入っているので、バグった時とか挙動がよくわからないときはソースを見ることが出来ます。  

@EAc7vity    public  class  Annota7onsAc7vity  extends  Ac7vity  {  }

public  class  Annota7onsAc7vity_          extends  Annota7onAc7vity  {  }

Page 13: Hello androidannotations

仕組み

@UIThread void setImage() { imageView.setImageBitmap(mBitmap) } // 元ソース

@Override void setImage() { runOnUiThread(new Runnable() { @Override public void run() { super.setImage(); } } } // AndroidAnnotationsが元ソースを継承して生成したソース

Page 14: Hello androidannotations

メリット、デメリット

•  メリット  •  コード量が減る(大正義!)  •  デメリット  •  Annota7onsを使ったクラスは他のクラスからアンダースコア(_)付で使わなきゃいけない。(AndroidManifestに登録するAc7vityも_をつけてください)  

Page 15: Hello androidannotations

実力はまだまだこんなものじゃない

•  AndroidAnnota7onsはちゃんとかゆい所に手が届くフレームワークです。学習する価値あり  

•  AndroidAnnota7onsのCookBookが参考になります  

•  h9ps://github.com/excilys/androidannota7ons/wiki/Cookbook  

•  よいAndroid開発ライフを!