Gradle版本控制
在上一篇文章中(Android Gradle之详解),使用了本地插件作为项目版本管理工具,所以本篇就主要介绍下本地插件(版本管理插件)的创建与使用
版本统一管理插件plugin_version
通过插件统一管理版本。该插件与app模块平级,该目录下代码最终都会转为gradle插件内容,目录结构如下
插件创建
1. 创建build.gradle.kts文件
// 标识该module为插件module
plugins {
id("java-gradle-plugin")
id("org.jetbrains.kotlin.jvm") version "1.9.22"
}
repositories {
google()
mavenCentral()
gradlePluginPortal()
}
java {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
dependencies {
// 添加Gradle相关的API,否则无法自定义Plugin和Task
implementation(gradleApi())
implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.20")
}
gradlePlugin {
plugins {
create("version") {
// 定义插件id
id = "com.dcxing.plugin.version"
// 在如下包路径创建类 VersionPlugin 继承 Plugin<Project>
implementationClass = "com.dcxing.plugin.version.VersionPlugin"
}
}
}
2. 创建build.gradle.kts中引用的VersionPlugin.kt文件
class VersionPlugin: Plugin<Project> {
override fun apply(target: Project) {
// TODO:可以空实现
}
}
3. 创建版本控制类(依赖类及版本号类)
# 版本信息(AndroidConfig.kt)
object AndroidConfig {
const val applicationId = "com.dcxing.x"
const val compileSdkVersion = 34
const val buildToolsVersion = ""
const val minSdkVersion = 26
const val targetSdkVersion = 34
const val versionCode = 1000000
const val versionName = "1.0.0.0"
const val namespace_common = "com.dcxing.common"
...
}
# 依赖库(Lib.kt)
object Lib {
// androidx
const val core_ktx = "androidx.core:core-ktx:1.13.1"
const val appcompat = "androidx.appcompat:appcompat:1.7.0"
...
/** ---------- third ---------- **/
const val okhttp3 = "com.squareup.okhttp3:okhttp:4.12.0"
const val okhttp3_logging_interceptor = "com.squareup.okhttp3:logging-interceptor:4.2.0"
...
}
插件使用
1. setting.gradle.kt配置
# setting.gradle.kt
// 引入插件
includeBuild("plugin_version")
pluginManagement {
...
}
dependencyResolutionManagement {
...
}
rootProject.name = "X"
include(":app")
...
2. build.gradle.kts配置
# build.gradle.kts
// 1. 导入plugin_version依赖类
import com.dcxing.plugin.version.*
plugins {
id("com.android.library")
// 2. 导入plugin_version插件
id("com.dcxing.plugin.version")
...
}
android {
// 使用AndroidConfig
namespace = AndroidConfig.namespace_common
compileSdk = AndroidConfig.compileSdkVersion
defaultConfig {
minSdk = AndroidConfig.minSdkVersion
...
}
}
dependencies {
implementation(project(":base"))
// 使用Lib
implementation(Lib.core_ktx)
implementation(Lib.appcompat)
...
}