本文由 简悦 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
代码块中,定义用于保存依赖项和插件版本的变量。您可以在后续代码块(versions
和plugins
代码块)中使用这些变量。 - 在
libraries
代码块中,定义依赖项。 - 在
plugins
代码块中,定义插件。
迁移步骤
我们建议您按照所列顺序执行这些步骤。build 可以同时使用 build 脚本和目录中的依赖项和插件,因此请花些时间单独迁移依赖项和插件。
迁移过程如下:
- 将新条目添加到目录。
- 同步您的 Android 项目。
- 将以前的字符串声明替换为目录类型安全访问器。
迁移依赖项
在 libs.versions.toml
文件的 versions
和 libraries
部分,为每个依赖项添加一个条目。同步您的项目,然后将 build 文件中的声明替换为相应的目录名称。
以下代码段展示了移除依赖项之前的 build.gradle.kts
文件:
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 文件中定义的名称定义依赖项。
dependencies {
implementation(libs.androidx.ktx)
}
dependencies {
implementation libs.androidx.ktx
}
迁移插件
在 libs.versions.toml
文件的版本和插件部分,为每个插件添加一个条目。同步您的项目,然后将 build 文件中 plugins{}
代码块内的声明替换为相应的目录名称。
以下代码段展示了移除插件之前的 build.gradle.kts
文件:
// 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
。
// 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。
了解更多内容
如需了解用于配置版本目录的其他选项,请参阅以下资源:
- 版本目录 TOML 文件格式记录了用于配置目录文件的其他选项。
- Now in Android 是我们采用版本目录的示例应用。
已知问题
Gradle 版本目录仍处于积极开发阶段。如需详细了解哪些功能尚不受支持,请参阅已知问题和限制。
该内容对您有帮助吗?
前言
假如你升级了 Android Gradle Plugin 为 7.0 之后的,你会发现之前用的是之前的 Groovy 或者 buildSrc 或者是 includeBuild 统一版本管理都会出现无法使用,因为 Gradle 7.0 之后推出了 Version Catalog 来实现统一版本管理
使用方法
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 的简单用法了,最后吐槽一下:
这个统一版本管理还没实现跳转的索引,期待能更新下索引,想了解更多的请移步到官网文档,谢谢!
Comments | NOTHING