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

Gradle Plugin for Multi Module

Kuu
October 23, 2020

Gradle Plugin for Multi Module

Kuu

October 23, 2020
Tweet

More Decks by Kuu

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

  4. Android アプリ開発の最近の流行
    ● Android Studio 4.1 ?
    ● Jetpack Compose ?
    ● Kotlin 1.4 ?
    ● Material Component 1.2 ?
    ● Android 5?
    Multi Module!!
    複数 Module での開発へ移行すること
    Android -> Module
    iOS -> Framework

    View Slide

  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
    高凝集で低結合

    View Slide

  6. Multi Module 戦略は実際に採用されてるの?
    ● 1-9個のモジュールが60%
    ● 10 - 20 個が 30%
    10個以上で構成されてるアプリが
    40%
    https://emmav.me/posts/2019-mar-1-android-modularisation/
    実は、2019年3月時点での調査結果

    View Slide

  7. よくある管理方法
    Maven Repository 内にあるArtifact を指定す
    る文字列を直接各Module の
    build.gradle(.kts)に記入している。
    直接文字列を記入する代わりに
    BuildSrc Module
    内の定数を利用してArtifact を指定している
    https://github.com/DroidKaigi/conference-app-2020/blob/master/feature/floormap/build.gradle

    View Slide

  8. Gradle Plugin で各モジュールを管理しよう
    Library Reference だけじゃなくて、その他の宣言も共通管理したいよね。
    .Gradle/.gradle.kts ファイルを直接読み込めばいいのでは
    Gradle Plugin を作成し、Apply するだけで使えるようにしたらより便利なのでは。
    ● Plugin にこれ系の宣言をおまとめできる
    ● なるべく手作業減らしたい。

    View Slide

  9. Gradle Plugin とは
    Gradle(Android アプリをBuildしてくれるやつ) を拡張するためのもの
    Android App Template ですでに2つのプラグインが入っている。
    ● Android Gradle Plugin
    ● Kotlin Gradle Plugin

    View Slide

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

    View Slide

  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--

    View Slide

  12. 実際に使ってみて学んだこと ※比較的小規模
    Application/Library で処理を分岐することができる
    Firebase Distribution 等は Application Module だけで使いたいよね
    Library Reference は あえて 定数ではなく文字列を置いて管理した方が良さそう
    ライブラリにアップデートがあることに気づきやすい

    View Slide

  13. Conclusion
    Multi Module 化は考慮することがたくさん
    Library Reference の解決策が存在するけど、より改善できるのでは?
    Internal な Gradle Plugin はそこまで難しくない

    View Slide