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

クックパッドアプリのマルチモジュール化への取り組み

 クックパッドアプリのマルチモジュール化への取り組み

2018-08-21 Cookpad.apk #1
Chihiro Koyama

こやまカニ大好き

August 21, 2018
Tweet

More Decks by こやまカニ大好き

Other Decks in Programming

Transcript

  1. 時代の流れ • 新機能の開発にモジュール化が必須/推奨されている ◦ Instant App ◦ Dynamic Feature(Dynamic Delivery)

    ◦ Wear OS / Android TV / Android Things • ビルドシステムのサポートも進んでいる ◦ Android Plugin for Gradle v3 から高速化 ◦ モジュールの並行ビルドにも対応
  2. InstantApp • Instant App では base + feature の合計サイズに 4MB

    制 限が適用されるため、アプリとコードを共有するためには feature のモジュール化がほぼ必須
  3. クックパッドアプリの(旧)構成 • ファイル数およそ 2,800 • 総行数およそ 280,000 • 完全なモノリシックアプリ •

    2013年から引き継がれてきた秘伝のソース • ほとんどの箇所でレイヤーアーキテクチャ未導入
  4. 最初の一歩として考えていたこと • 新しい library モジュールを作成し、一部の機能を移す • app モジュールに library モジュールを参照させる

    • これを繰り返せばマルチモジュール化できるぞ • 簡単なところからコツコツ切り出していこう!
  5. マルチモジュール化爆発ポイント • DataBinding が爆発 ◦ AGP 3.2 beta にして解決(v2 でも良さそう)

    ◦ ライブラリモジュールの application ID は必ず別のものにする • アプリバージョンや BuildConfig への参照が爆発 ◦ app module 側の定義は legacy から参照できない ◦ legacy 側で Interface を定義して app 側で実装を注入 ◦ BuildConfig への依存は減らしていったほうが良い • test / androidTest が爆発 ◦ 上記のアプリパラメータ Interface を Mock したりいろいろ • Fabric など一部のライブラリが爆発 ◦ CustomApplication クラスや application ID に強く紐付いた処理は app 側に持ったほうが良い
  6. 成果 • 差分ビルドが爆速化 ◦ 差分ビルド時間が 3分 → 30秒 ◦ InstantRun

    もまともに動作するようになった ◦ マルチモジュール化の前に行った flavor / buildType 整理の効果もある
  7. 現在は ui モジュールも分割済み • 現在は ui モジュールも分割済み ◦ ui ->

    library -> app という構成 ◦ アプリ全体のデザインリソースを整理しつ つ移動 ◦ 汎用 CustomView も移動 • 画面毎のデザインリソースは ui に は含めない ◦ module のビルドキャッシュが有効になる 範囲で考える :legacy :app :ui