赞
踩
最近在搞个自己的学习的Compose项目,于是也想尝试尝试新的依赖管理方式,也就是今天的主题 Gradle Composite。
之前一直在 buildSrc管理依赖,使用非常方便,但是问题是我就修改一个版本号,你就给我全量更新,这可真的是让人头疼啊,于是Gradle Composing builds它来了。
先放出demo地址,方便大家学习。
https://github.com/leown/ComposingBuildsDemo
摘自 Gradle 文档:复合构建只是包含其他构建的构建. 在许多方面,复合构建类似于 Gradle 多项目构建,不同之处在于,它包括完整的 builds ,而不是包含单个 projects
我也参考了一些网上的文章,大多数都是依赖于build-toos 4.0.0+,本篇文章会以最新版本build-toos 7.1.2去配置。
创建plugin module,名称随意,这里我们命名为 plugin-version
删除无用文件
修改 plugin-version 中的 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" } } }
在plugin-version module中创建VersionPlugin类,继承Plugin(这里可以写一些逻辑处理,比如根据环境配置对应的key)
package com.ileo.plugin.version
import org.gradle.api.Plugin
import org.gradle.api.Project
class VersionPlugin : Plugin<Project> {
override fun apply(target: Project) {
}
}
在plugin-version module中创建依赖包和版本号的 kt 文件(和buildSrc一样),可以声明多个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" }
在项目 settings.gradle.kts 文件内添加 includeBuild(“plugin-version”) ( 重点 \color{red}{重点} 重点)
pluginManagement { repositories { gradlePluginPortal() google() mavenCentral() } } dependencyResolutionManagement { repositories { google() mavenCentral() } } rootProject.name = "ComposingBuildsDemo" include(":app") includeBuild("plugin-version")
在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) }
到此已经配置完成,大家快去玩耍起来吧!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。