Android Gradle Composing builds 管理三方依赖

3,547 阅读2分钟

Android Gradle Composing builds 管理三方依赖

最近在搞个自己的学习的Compose项目,于是也想尝试尝试新的依赖管理方式,也就是今天的主题 Gradle Composite。 之前一直在 buildSrc管理依赖,使用非常方便,但是问题是我就修改一个版本号,你就给我全量更新,这可真的是让人头疼啊,于是Gradle Composing builds它来了。

先放出demo地址,方便大家学习。

github.com/leown/Compo…

Gradle Composing builds 是啥?

摘自 Gradle 文档:复合构建只是包含其他构建的构建. 在许多方面,复合构建类似于 Gradle 多项目构建,不同之处在于,它包括完整的 builds ,而不是包含单个 projects

  • 组合通常独立开发的构建,例如,在应用程序使用的库中尝试错误修复时
  • 将大型的多项目构建分解为更小,更孤立的块,可以根据需要独立或一起工作

Gradle Composing builds 怎么用

我也参考了一些网上的文章,大多数都是依赖于build-toos 4.0.0+,本篇文章会以最新版本build-toos 7.1.2去配置。

  1. 创建plugin module,名称随意,这里我们命名为 plugin-version

    在这里插入图片描述

  2. 删除无用文件

    在这里插入图片描述

  3. 修改 plugin-version module 中的 build.gradle.kts 文件

    build.gradle.kts

    plugins {
        id("java-gradle-plugin")
        id("org.jetbrains.kotlin.jvm") version "1.6.10"
    }
    
    repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
    }
    
    java {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }
    
    dependencies {
        //添加Gradle相关的API,否则无法自定义Plugin和Task
        implementation(gradleApi())
        implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10")
    }
    
    gradlePlugin {
        plugins {
            create("version") {
                //添加插件
                id = "com.ileo.plugin.version"
                //在根目录创建类 VersionPlugin 继承 Plugin<Project>
                implementationClass = "com.ileo.plugin.version.VersionPlugin"
            }
    
        }
    }
    
    
  4. 在plugin-version module中创建VersionPlugin类,继承Plugin(这里可以写一些逻辑处理,比如根据环境配置对应的key,大家可以自行研究一下哈)

    VersionPlugin.kt

    package com.ileo.plugin.version
    
    import org.gradle.api.Plugin
    import org.gradle.api.Project
    
    
    class VersionPlugin : Plugin<Project> {
        override fun apply(target: Project) {
    
        }
    }
    
  5. 在plugin-version module中创建依赖包和版本号的 kt 文件(和buildSrc一样),可以声明多个kt文件

    Libs.kt

    package com.ileo.plugin.version
    
    /**
     * @author: ning.wang
     * @date: 2022-04-01 6:57 下午
     * @desc: 依赖包和版本号
     */
    object Libs {
        private const val activityVersion = "1.4.0"
        private const val fragmentVersion = "1.4.1"
        private const val recyclerviewVersion = "1.2.1"
        private const val appcompatVersion = "1.4.1"
        private const val constraintlayoutVersion = "2.0.4"
        private const val coreKtxVersion = "1.7.0"
        private const val testExtVersion = "1.1.2"
        private const val testEspressoVersion = "3.3.0"
        private const val junitVersion = "4.12"
    
        const val activity = "androidx.activity:activity-ktx:$activityVersion"
        const val fragment = "androidx.fragment:fragment-ktx:$fragmentVersion"
        const val recyclerview = "androidx.recyclerview:recyclerview:$recyclerviewVersion"
        const val appcompat = "androidx.appcompat:appcompat:$appcompatVersion"
        const val constraintlayout = "androidx.constraintlayout:constraintlayout:$constraintlayoutVersion"
        const val coreKtx = "androidx.core:core-ktx:$coreKtxVersion"
        const val testExt = "androidx.test.ext:junit:$testExtVersion"
        const val testEspresso = "androidx.test.espresso:espresso-core:$testEspressoVersion"
        const val junit = "junit:junit:$junitVersion"
    
    }
    
  6. 在项目 settings.gradle 文件内添加 includeBuild("versionPlugin") (重点\color{red}{重点}

    settings.gradle

    pluginManagement {
        repositories {
            gradlePluginPortal()
            google()
            mavenCentral()
        }
    }
    dependencyResolutionManagement {
        repositories {
            google()
            mavenCentral()
        }
    }
    rootProject.name = "ComposingBuildsDemo"
    include(":app")
    includeBuild("plugin-version")
    
    
  7. 在app或module的 build.gradle.kts 中使用 plugin-version

    // 1. 导入plugin-version 依赖类
    import com.ileo.plugin.version.*
    plugins {
        id("com.android.application")
        id("org.jetbrains.kotlin.android")
        // 2. 导入 plugin-version 插件
        id("com.ileo.version")
    }
    
    android {
        compileSdk = AndroidConfig.compileSdkVersion
    
        defaultConfig {
            applicationId = AndroidConfig.applicationId
            minSdk = AndroidConfig.minSdkVersion
            targetSdk = AndroidConfig.targetSdkVersion
            versionCode = AndroidConfig.versionCode
            versionName = AndroidConfig.versionName
    
            testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
        }
    
        buildTypes {
            getByName("release") {
                isMinifyEnabled = false
                proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
            }
        }
        compileOptions {
            sourceCompatibility = JavaVersion.VERSION_1_8
            targetCompatibility = JavaVersion.VERSION_1_8
        }
        kotlinOptions {
            jvmTarget = "1.8"
        }
    }
    
    dependencies {
    
        // 使用plugin-version中声明的 Libs.kt 的三方库
        implementation(Libs.coreKtx)
        implementation(Libs.appcompat)
        testImplementation(Libs.junit)
        androidTestImplementation(Libs.testExt)
        androidTestImplementation(Libs.testEspresso)
    }
    

到此已经配置完成,大家快去玩耍起来吧!!!