Gradle 7.0之后的统一版本管理


本文由 简悦 SimpRead 转码,原文地址 developer.android.com,原文地址 blog.csdn.net

将 Gradle 配置文件迁移至 Gradle 版本目录。

该内容对您有帮助吗?

将 build 迁移到版本目录

借助 Gradle 版本目录,您能够以可扩容的方式添加和维护依赖项和插件。使用 Gradle 版本目录,您可以在拥有多个模块时更轻松地管理依赖项和插件。您不必对各个 build 文件中的依赖项名称和版本进行硬编码,也不必在每次需要升级依赖项时都更新每个条目,而是可以创建一个包含依赖项的中央版本目录,各种模块可在 Android Studio 协助下以类型安全的方式引用该目录。

本页介绍了有关将 Android 应用迁移到版本目录的基本信息。如需了解详情,请参阅 Gradle 文档。

创建版本目录文件

首先创建一个版本目录文件。在根项目的 gradle 文件夹中,创建一个名为 libs.versions.toml 的文件。Gradle 默认会在 libs.versions.toml 文件中查找目录,因此我们建议使用此默认名称。

注意:您可以更改目录文件名;但是,这需要更改 build 文件,因此我们不建议这样做。

libs.versions.toml 文件中,添加以下部分:

[versions]

[libraries]

[plugins]

这些部分的使用方式如下:

  • versions 代码块中,定义用于保存依赖项和插件版本的变量。您可以在后续代码块(versionsplugins 代码块)中使用这些变量。
  • libraries 代码块中,定义依赖项。
  • plugins 代码块中,定义插件。

迁移步骤

我们建议您按照所列顺序执行这些步骤。build 可以同时使用 build 脚本和目录中的依赖项和插件,因此请花些时间单独迁移依赖项和插件。

迁移过程如下:

  1. 将新条目添加到目录。
  2. 同步您的 Android 项目。
  3. 将以前的字符串声明替换为目录类型安全访问器。

迁移依赖项

libs.versions.toml 文件的 versionslibraries 部分,为每个依赖项添加一个条目。同步您的项目,然后将 build 文件中的声明替换为相应的目录名称。

以下代码段展示了移除依赖项之前的 build.gradle.kts 文件:

KotlinGroovy更多

dependencies {
    implementation("androidx.core:core-ktx:1.9.0")

}
dependencies {
    implementation 'androidx.core:core-ktx:1.9.0'

}

以下代码段展示了如何在版本目录文件中定义依赖项:

[versions]
ktx = "1.9.0"

[libraries]
androidx-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "ktx" }

在为目录中的依赖项代码块命名时建议使用 kebab case(例如 androidx-ktx),以便在 build 文件中获得更好的代码补全帮助

在需要此依赖项的每个模块的 build.gradle.kts 文件中,按照您在 TOML 文件中定义的名称定义依赖项。

KotlinGroovy更多

dependencies {
   implementation(libs.androidx.ktx)

}
dependencies {
   implementation libs.androidx.ktx

}

迁移插件

libs.versions.toml 文件的版本和插件部分,为每个插件添加一个条目。同步您的项目,然后将 build 文件中 plugins{} 代码块内的声明替换为相应的目录名称。

以下代码段展示了移除插件之前的 build.gradle.kts 文件:

KotlinGroovy更多

// Top-level `build.gradle.kts` file
plugins {
   id("com.android.application") version "7.4.1" apply false

}

// Module-level `build.gradle.kts` file
plugins {
   id("com.android.application")

}
// Top-level `build.gradle` file
plugins {
   id 'com.android.application' version '7.4.1' apply false

}

// Module-level `build.gradle` file
plugins {
   id 'com.android.application'

}

以下代码段展示了如何在版本目录文件中定义插件:

[versions]
androidGradlePlugin = "7.4.1"

[plugins]
android-application = { id = "com.android.application", version.ref = "androidGradlePlugin" }

与依赖项一样,在为 plugins 代码块目录条目设置格式时建议使用 kebab case(例如 android-application),以便在 build 文件中获得更好的代码补全帮助

以下代码展示了如何在顶级和模块级 build.gradle.kts 文件中定义 com.android.application 插件。对于来自版本目录文件的插件,请使用 alias;对于并非来自版本目录文件的插件(例如惯例插件),请使用 id

KotlinGroovy更多

// Top-level build.gradle.kts
plugins {
   alias(libs.plugins.android.application) apply false

}

// module build.gradle.kts
plugins {
   alias(libs.plugins.android.application)

}
// Top-level build.gradle
plugins {
   alias libs.plugins.android.application apply false

}

// module build.gradle
plugins {
   alias libs.plugins.android.application

}

注意:如果您使用的是低于 8.1 的 Gradle 版本,则需要在使用版本目录时为 plugins{} 代码块添加注解 (@Suppress("DSL_SCOPE_VIOLATION"))。有关详情,请参阅问题 22797

了解更多内容

如需了解用于配置版本目录的其他选项,请参阅以下资源:

已知问题

Gradle 版本目录仍处于积极开发阶段。如需详细了解哪些功能尚不受支持,请参阅已知问题和限制

该内容对您有帮助吗?

前言

假如你升级了 Android Gradle Plugin 为 7.0 之后的,你会发现之前用的是之前的 Groovy 或者 buildSrc 或者是 includeBuild 统一版本管理都会出现无法使用,因为 Gradle 7.0 之后推出了 Version Catalog 来实现统一版本管理

Gradle 官网文档

使用方法

1、先找到根目录下的 string.gradle,在里面添加下面代码:

enableFeaturePreview('VERSION_CATALOGS')
dependencyResolutionManagement {
    versionCatalogs {
        libs {
            from(files("libs.versions.toml"))
        }
    }
}
  • libs.versions.toml 为新建文件,用来抽离依赖来加载,以下为主要分类和示例代码

  • [versions] 部分用于声明可以被依赖项引用的版本

  • [libraries] 部分用于声明坐标的别名

  • [bundles] 部分用于声明依赖包

  • [plugins] 部分用于声明插件

[versions]
groovy = "3.0.5"
checkstyle = "8.37"
compilesdk = "30"
minsdk = "23"
targetsdk = "30"
buildtool = "30.0.3"
versioncode = "1"
versionname = "1.0"
espresso = "3.3.0"
retrofit = "2.9.0"
ext = "1.1.2"
constraintlayout = "2.0.4"
material = "1.3.0"
appcompat = "1.2.0"

[libraries]
appcompat = { module = "androidx.appcompat:appcompat", version.ref = "appcompat" }
material = { module = "com.google.android.material:material", version.ref = "material" }
constraintlayout = { module = "androidx.constraintlayout:constraintlayout", version.ref = "constraintlayout" }
junit = "junit:junit:4.+"
ext = { module = "androidx.test.ext:junit", version.ref = "ext" }
retrofit = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofit" }
espresso = { module = "androidx.test.espresso:espresso-core", version.ref = "espresso" }
fastjson = { group = "com.alibaba",name = "fastjson",version = { strictly = "[1.1.71.android, 4.0[", prefer = "3.9" }}

[bundles]
groovy = ["groovy-core", "groovy-json", "groovy-nio"]

[plugins]
jmh = { id = "me.champeau.jmh", version = "0.6.5"}

2、在项目目录 build.gradle 中调用 string.gradle 中的 libs, 示例如下:

android {
    compileSdk libs.versions.compilesdk.get().toInteger()
    buildToolsVersion libs.versions.buildtool.get()
    ......
}
......
dependencies {
    implementation(libs.fastjson)
    implementation(libs.appcompat)
    implementation(libs.material)
    implementation(libs.constraintlayout)
    implementation(libs.retrofit)
    testImplementation(libs.junit)
    androidTestImplementation(libs.ext)
    androidTestImplementation(libs.espresso)
}

到这里就介绍完 Version Catalog 的简单用法了,最后吐槽一下:

这个统一版本管理还没实现跳转的索引,期待能更新下索引,想了解更多的请移步到官网文档,谢谢!

声明:HEUE NOTE|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA 4.0协议进行授权

转载:转载请注明原文链接 - Gradle 7.0之后的统一版本管理