Android Gradle Composing builds 管理三方依赖
最近在搞个自己的学习的Compose项目,于是也想尝试尝试新的依赖管理方式,也就是今天的主题 Gradle Composite。 之前一直在 buildSrc管理依赖,使用非常方便,但是问题是我就修改一个版本号,你就给我全量更新,这可真的是让人头疼啊,于是Gradle Composing builds它来了。
先放出demo地址,方便大家学习。
Gradle Composing builds 是啥?
摘自 Gradle 文档:复合构建只是包含其他构建的构建. 在许多方面,复合构建类似于 Gradle 多项目构建,不同之处在于,它包括完整的 builds ,而不是包含单个 projects
- 组合通常独立开发的构建,例如,在应用程序使用的库中尝试错误修复时
- 将大型的多项目构建分解为更小,更孤立的块,可以根据需要独立或一起工作
Gradle Composing builds 怎么用
我也参考了一些网上的文章,大多数都是依赖于build-toos 4.0.0+,本篇文章会以最新版本build-toos 7.1.2去配置。
-
创建plugin module,名称随意,这里我们命名为 plugin-version
-
删除无用文件
-
修改 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" } } } -
在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) { } } -
在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" } -
在项目 settings.gradle 文件内添加 includeBuild("versionPlugin") ()
settings.gradle
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) }
到此已经配置完成,大家快去玩耍起来吧!!!