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

5分で分かるビルドロジック共通化の今

mkeeda
April 20, 2023

 5分で分かるビルドロジック共通化の今

mkeeda

April 20, 2023
Tweet

More Decks by mkeeda

Other Decks in Programming

Transcript

  1. 5


    Meetup
    2
    023
    .
    0
    4
    .
    20

    mkeeda

    View Slide

  2. About me
    • mkeeda (޲Ҫా Ұฏ)
    • Twitter: @mr_mkeeda
    • Github: @mkeeda
    • Android Engineer at Cybozu, Inc
    • ޷͖ͳؖࠃυϥϚ:

    βɾάϩʔϦʔʙً͔͖͠෮़ʙ
    2

    View Slide

  3. 3
    Gradle




    View Slide

  4. 4
    Guide to Android app modularization | Android Developers


    https://developer.android.com/topic/modularization

    View Slide

  5. 5
    sample-app
    feature-a
    feature-b
    build.gradle
    build.gradle
    plugins {
    id 'com.android.library'
    id 'org.jetbrains.kotlin.android'
    }
    android {
    compileSdk 33
    defaultConfig {
    minSdk 26
    targetSdk 33
    // ...
    }
    compileOptions {
    sourceCompatibility JavaVersion.VERSION_11
    targetCompatibility JavaVersion.VERSION_11
    }
    }
    dependencies {
    //...
    }
    build.gradle


    API level
    JDK version
    app
    build.gradle

    View Slide

  6. Convention Plugins
    Gradle Plugin system


    Binary plugin


    interface Plugin


    plugins { id ‘…’ }


    Script plugin


    Script


    apply from: ‘other.gradle’
    6

    View Slide

  7. buildSrc Plugin
    7
    sample-app
    feature-a
    feature-b
    build.gradle
    build.gradle
    buildSrc
    src/main/kotlin
    MyPlugin.kt


    Plugin


    Plugin


    classpath

    View Slide

  8. buildSrc
    buildSrc


    buildSrc



    buildSrc


    8

    View Slide

  9. sample-app project
    Composite build (Included build)
    9
    :app
    other project
    :shared
    includeBuild(‘shared’)
    shared.jar
    sample-app.apk
    gradle :shared:jar
    gradle :app:assemble
    shared.jar


    :shared:jar


    View Slide

  10. buildSrc Composite build
    10
    sample-app
    build.gradle
    build.gradle
    build-logic ( )
    src/main/kotlin
    MyPlugin.kt
    feature-a
    feature-b
    sample-app
    feature-a
    feature-b
    build.gradle
    build.gradle
    buildSrc
    src/main/kotlin
    MyPlugin.kt

    View Slide

  11. Gradle
    8
    .
    0
    buildSrc
    Gradle
    8
    .
    0
    buildSrc Composite build




    buildSrc


    Some changes to make buildSrc more like an included build

    https://github.com/gradle/gradle/pull/
    22
    5 40

    buildSrc


    https://github.com/gradle/gradle/issues/
    6045
    #issuecomment-
    7177527 60
    11

    View Slide

  12. Convention Plugin + Composite build


    buildSrc


    Plugin buildSrc
    12

    View Slide

  13. Sharing Build Logic between Subprojects

    https://docs.gradle.org/current/userguide/sharing_build_logic_between_subprojects.html


    Using Gradle Plugins

    https://docs.gradle.org/current/userguide/plugins.html


    Structuring Large Projects

    https://docs.gradle.org/current/userguide/structuring_software_products.html


    Herding Elephants | Square Corner Blog

    https://developer.squareup.com/blog/herding-elephants/


    Composing builds

    https://docs.gradle.org/current/userguide/composite_builds.html
    13

    View Slide