hello androidannotations
TRANSCRIPT
Hello AndroidAnnotations
2013.10.26 名古屋Androidつくる部 LT
• 高木翔一 • @fly1tkg • http://b.fly1tkg.com • 最近、勢いでCookie Clicker Cameraというアプリをつくりました。(制作時間3時間くらい)
AndroidAnnotaionsとは?
• Code Diet • AndroidAnnota7onsはAndroidアプリ開発をスピードアップするためのフレームワークです。
• このフレームワークが水面下でサポートすることで開発者は本当に重要なものに集中できます。
• コードをシンプルにすることでメンテナンスをしやすくします
• h9p://androidannota7ons.org/ より
AndroidAnnotaionsとは?
AndroidAnnota7onsをつかってダイエットしましょう
AndroidAnnotaionsとは?
• 現在2.7.1がリリースされている • もうすぐ3.0.0がでる
• いったいどんなことが出来るの?
@ViewById
• Viewメンバ変数にfindViewByIdの結果を入れといてくれる
• IDの指定が無ければメンバ変数名から推測してくれる
// findViewById(R.id.image)の結果を入れてくれます @ViewById ImageView image; // findViewById(R.id.button)の結果を入れてくれます @ViewById(R.id.button) Button mButton;
@Click
• @Clickがついた関数は指定したIDのViewがックリックされたときに呼ばれる
• IDの指定が無ければ関数名から推測してくれる
@Click void button() { // R.id.buttonが押されたときに呼ばれる } @Click(R.id.okButton) void onOkButtonClick() { // R.id.okButtonが押されたときに呼ばれる }
@Background
• 関数をバックグラウンドで実行してくれる • Callbackが必要なければ、これで投げっぱなしにするの便利
@Background void backgroundTask() { // 何か時間のかかる処理 }
@UIThread
• 関数をUIThreadで実行してくれる • Viewの操作とかに便利(UIスレッド以外で操作すると怒られる)
@UIThread void setImage() { imageView.setImageBitmap(mBitmap) }
AndroidAnnota7onsが使える所
• @EAc7vity @EFragment @EView @EViewGroup @EBean などのアノテーションがついたクラス
@EActivity public class AnnotationsActivity extends Activity { @ViewById ImageView image; }
@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();
仕組み
• @EAc7vityなどがついたクラスのサブクラスのコードを生成し、そのクラス内でAnnota7onを元に処理を追加していきます。
• 生成コードは.apt_generatedに入っているので、バグった時とか挙動がよくわからないときはソースを見ることが出来ます。
@EAc7vity public class Annota7onsAc7vity extends Ac7vity { }
public class Annota7onsAc7vity_ extends Annota7onAc7vity { }
仕組み
@UIThread void setImage() { imageView.setImageBitmap(mBitmap) } // 元ソース
@Override void setImage() { runOnUiThread(new Runnable() { @Override public void run() { super.setImage(); } } } // AndroidAnnotationsが元ソースを継承して生成したソース
メリット、デメリット
• メリット • コード量が減る(大正義!) • デメリット • Annota7onsを使ったクラスは他のクラスからアンダースコア(_)付で使わなきゃいけない。(AndroidManifestに登録するAc7vityも_をつけてください)
実力はまだまだこんなものじゃない
• AndroidAnnota7onsはちゃんとかゆい所に手が届くフレームワークです。学習する価値あり
• AndroidAnnota7onsのCookBookが参考になります
• h9ps://github.com/excilys/androidannota7ons/wiki/Cookbook
• よいAndroid開発ライフを!