Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Androidアプリ開発にクリーンアーキテクチャを取り入れよう (OSS編)

kan
February 25, 2016

Androidアプリ開発にクリーンアーキテクチャを取り入れよう (OSS編)

クライアント企業様向けの資料を公開させていただいています。

kan

February 25, 2016
Tweet

More Decks by kan

Other Decks in Programming

Transcript

  1. 開発環境 Android Studio Eclipse+ADTはオワコン 新しいSDKを使うなら、Android Studioを選択。 Gradle※ (build tool)でOSSを簡単にインポート。 ※グラドルではないよ。グレイドル

    Retrolambda(レトロラムダ) Android Studioなら、SAM(Single Abstract Method)型はlambdaで書けるけど、 Retrolambda(backport tool)を使うとJava8のlambdaで書ける。 SAM型なら、こんなに簡単に書ける。 before: button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { … } } after: button.setOnClickListener(v -> { … });
  2. Binding/DI ButterKnife – Jake Wharton 面倒なfindViewById()のボイラープレートを抹殺 @Bind(R.id.button) Button button リスナーもbindできるよ。

    @OnClick(R.id.submit) public void submit(View view) Dagger2 – Google/Square Component/Module単位にDIできる。 使ってみたけど正直、難解 バターナイフではケガしないが、短剣は危険(笑)
  3. Networking Okhttp3+Retrofit2 – Square/J.W. API作成最適コンビ。Retrofit2はbeta4まできたね。 http://square.github.io/okhttp/ http://square.github.io/retrofit/ 拙記事:「Retrofit2のRxJavaCallアダプタを試す」 beta<=2での話。 http://qiita.com/notice_inc/items/74a7e98b54dd2838c559

    Picasso(ピカソ) - Square 画像ダウンロード・キャッシュ Volley(ボレー) - Google HTTPクッキーの扱いにバグがあるんで、セッション使うアプリはやめといたほうがいいよ。 自分でHttpStackつくれってよ。えぇ、これ仕様?? 特にLaravelは、セッションキー以外にXSRFトークンがクッキーされるんで、つぶしてしまいます。 弊社では独自パッチして使ったよ(非公開)。 NetworkResponse does not support multiple cookies https://github.com/mcxiaoke/android-volley/issues/87
  4. Reactive eXtentions/Promise RxJava/RxAndroid/RxBinding Rxbinding – Jake Wharton TextViewの入力文字列を文字列があるかどうかの真偽値に変換(map)して、 サーチボタンを活性・不活性する。 @Bind(R.id.text)

    TextView textView; @Bind(R.id.search) Button search; RxTextView.textChanges(textView) .map(text -> text.length() > 0) .subscribe(enabled -> search.setEnabled(enabled)) jdeferred/android-promise まだ、使ったことないけど、試してみるか。
  5. View/Presenter Mortar(モルタル) - Square Bundleサービスを提供してくれる。 永続化できるViewPresenterが利用できる。 Dagger2と相性よし。 Flow/Path – Square

    FragmentManagerの代替。 スクリーン・画面遷移を抽象化したフレームワーク。 ヒストリーも扱える。 Mortarとあわせて、画面状態・画面スタックを保存・復元。 リクリエーション地獄から解放される。 実際使うには、もう少し内部の理解が必要そう。 Flow and Mortar – Thorben Primke https://realm.io/jp/news/using-flow-mortar/
  6. Database Realm(レルム)  SQLiteの代替データベース。ActiveRecordのように利用できる。  autoincrementなし。offset,limitなし。cascadingもなし。  SQLをガンガン使いたいなら、止めた方がいい。  Realmエンティティのメンバへの代入が即データベースに反映する

    (トランザクション必要)。便利だか、逆に切り離したいとき不便。そ もそも、エンティティをモデルとして利用すべきではない(でも、面 倒だし)。  iOS/Swiftでも使えるが、Objective-Cが混在すると、Objective-C版し か使えないのが、残念。 いまんとこ、Objective-C版しか使ったことないけど。
  7. Others Gson(ジーサン) - Google Json-POJO間をシリアライズ・デシリアライズする。 Timber(ティンバー) - Jake Wharton ログファサードとして利用できる。

    Logと違って、フォーマットできる。 Timber.d(“[%s] %d”, “hoge”, n) Logクラスを使うと、リリース時のログ抑制ができなくなる。 拙記事:「アンドロイドアプリのログ出力にTimber+Log4Jを使う」 http://www.notice.co.jp/archives/3852