Gradle Plugin for Multi Module

Gradle Plugin for Multi Module

A2407c5cea2c38ce15d85a5df9da820a?s=128

Fumiya Kume

October 23, 2020
Tweet

Transcript

  1. Gradle Plugin for Multi Module potatotips #71 iOS/Android開発Tips共有会

  2. kuu Android Engineer @ 株式会社メルカリ 旅行好き。明日は新潟へ GOTO 最近は GCPを触るのが好き。

  3. Multi Module なアプリの 生産性をGradle Pluginで 上げてく

  4. Android アプリ開発の最近の流行 • Android Studio 4.1 ? • Jetpack Compose

    ? • Kotlin 1.4 ? • Material Component 1.2 ? • Android 5? Multi Module!! 複数 Module での開発へ移行すること Android -> Module iOS -> Framework
  5. Multi Module の Pros/Cons Pros • High Cohesion and Low

    Couplingな開発を促進・強制できる • 変更された Module だけCompile するので開発速度が早くなる! (20分待たなくても! ◦ https://developer.android.com/studio/build/optimize-your-build#create_libraries Cons • Single Module 開発と異なり諸々考える必要が出てくる ◦ Test Coverage (Jacoco) ◦ DI(Dagger, Koin...), Resource, Navigation, Dynamic Feature Module… • 各モジュールの管理(Library References, Build Config, Build Variant...) 引用元 https://droidkaigi.github.io/codelab-2020/en/index.html#0 高凝集で低結合
  6. Multi Module 戦略は実際に採用されてるの? • 1-9個のモジュールが60% • 10 - 20 個が

    30% 10個以上で構成されてるアプリが 40% https://emmav.me/posts/2019-mar-1-android-modularisation/ 実は、2019年3月時点での調査結果
  7. よくある管理方法 Maven Repository 内にあるArtifact を指定す る文字列を直接各Module の build.gradle(.kts)に記入している。 直接文字列を記入する代わりに BuildSrc

    Module 内の定数を利用してArtifact を指定している https://github.com/DroidKaigi/conference-app-2020/blob/master/feature/floormap/build.gradle
  8. Gradle Plugin で各モジュールを管理しよう Library Reference だけじゃなくて、その他の宣言も共通管理したいよね。 .Gradle/.gradle.kts ファイルを直接読み込めばいいのでは Gradle Plugin

    を作成し、Apply するだけで使えるようにしたらより便利なのでは。 • Plugin にこれ系の宣言をおまとめできる • なるべく手作業減らしたい。
  9. Gradle Plugin とは Gradle(Android アプリをBuildしてくれるやつ) を拡張するためのもの Android App Template ですでに2つのプラグインが入っている。

    • Android Gradle Plugin • Kotlin Gradle Plugin
  10. 二行追加するだけでプラグインに全て移譲できる

  11. Internalで使うためだけのプラグインを作成 //TODO ソースコードのURLを貼る You can check the official Document!! •

    https://docs.gradle.org/nightly/userguide/designing_gradle_plugins.html • BaseExtension - Android Plugin 3.4.0-dev DSL Reference • https://docs.gradle.org/current/javadoc/org/gradle/api/Project.html#getExtensions--
  12. 実際に使ってみて学んだこと ※比較的小規模 Application/Library で処理を分岐することができる Firebase Distribution 等は Application Module だけで使いたいよね

    Library Reference は あえて 定数ではなく文字列を置いて管理した方が良さそう ライブラリにアップデートがあることに気づきやすい
  13. Conclusion Multi Module 化は考慮することがたくさん Library Reference の解決策が存在するけど、より改善できるのでは? Internal な Gradle

    Plugin はそこまで難しくない