Android Gradle之版本控制(三)

840 阅读1分钟

Gradle版本控制

在上一篇文章中(Android Gradle之详解),使用了本地插件作为项目版本管理工具,所以本篇就主要介绍下本地插件(版本管理插件)的创建与使用

版本统一管理插件plugin_version

通过插件统一管理版本。该插件与app模块平级,该目录下代码最终都会转为gradle插件内容,目录结构如下

plugin_version.png

插件创建

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)
    ...
}