前言
Gradle 是每个 Android 应用程序项目中存在的重要文件之一。我们使用build.gradle
文件来管理应用程序中所需的所有依赖项。但是 Gradle 文件中的所有代码都是用 Groovy 编程语言编写的,而如今,由于 Kotlin 简洁、空安全和可互操作的特性,我们使用 Kotlin 编写应用程序的代码。那么,如何在我们的 Android 应用项目中使用相同的 Kotlin 语言进行依赖管理呢?事情会容易得多,对吧?
因此,在本篇文章中,我们将学习如何借助 Kotlin DSL 将我们的 Android 应用程序项目从基于 Groovy 的 Gradle 系统迁移到基于 Kotlin 的 Gradle 系统。以下是我们将在此文章中学习的内容:
- 如何迁移到基于 Kotlin 的 Gradle?
- 如何拥有一个中央依赖管理系统?
- 迁移到基于 Kotlin 的 Gradle 有哪些优点和缺点?
所以,让我们迁移:)
如何迁移到基于 Kotlin 的 Gradle?
来自官方文档:
Gradle 的 Kotlin DSL 提供了传统 Groovy DSL 的替代语法,在受支持的 IDE 中具有增强的编辑体验,具有出色的内容辅助、重构、文档等。
因此,简而言之,我们可以在 Gradle 文件中利用 Kotlin 的功能和代码建议功能以及 IDE 的其他功能,就像任何其他普通的 Kotlin 文件一样。因此,让我们执行迁移的第一步。
用双引号替换单引号
因此,您需要做的第一件事是将现有build.gradle
文件中的所有单引号('')更改为双引号("")。这是因为 Groovy 字符串可以在单引号内也可以在双引号内,但在 Kotlin 中,字符串只允许使用双引号。例如:
// before
implementation 'com.mindorks.android:prdownloader:$prdownloader_version'
// after
implementation "com.mindorks.android:prdownloader:$prdownloader_version"
使用函数调用和 = 赋值运算符
在 Groovy 中,调用函数时不需要括号,但在 Kotlin 中,需要使用括号来调用函数。
此外,在 Groovy 中,当为变量赋值时,您可以跳过=
赋值运算符的使用,但在 Kotlin 中,=
赋值运算符是必须的。
因此,我们的下一步是使用括号替换所有函数调用,并使用=
运算符替换所有直接赋值。但是在 Gradle 文件中,很难区分函数调用和赋值。因此,如果您不确定这两个,那么您可以在这里做的是在所有地方使用函数调用,如果出现错误,则只需将其替换为=
赋值运算符。因此,这里有几个使用函数调用和 = 赋值运算符的示例。
// example of function call
implementation("com.mindorks.android:prdownloader:$prdownloader_version")
// example of = assignment
defaultConfig {
versionName = 3
}
更改文件名
现在,我们完成了基本设置。是时候更改文件名了,因为我们将使用 Kotlin DSL。因此,将所有.gradle
文件命名为.gradle.kts
文件。例如,build.gradle
将成为build.gradle.kts
.
使用插件
要在 Gradle 文件中使用插件,请使用以下命令:
plugins {
id("com.google.gms.google-services")
}
或者,如果您使用的是 legacyapply( )
功能,那么您可以遵循以下方法:
apply(plugin = "com.google.gms.google-services")
使用 URL
在 Gradle 文件中,您可以像这样使用 URL:
// before
maven { url 'https://jitpack.io' }
// after
maven("https://jitpack.io")
使用任务
现在,要注册您的任务,您需要执行以下操作:
// before
task clean(type: Delete) {
delete rootProject.buildDir
}
// after
tasks.register("clean", Delete::class) {
delete(rootProject.buildDir)
}
使用布尔变量
要使用布尔变量,您需要使用“ is ”作为变量的前缀。但在所有编程语言中,使用“ is ”作为布尔变量的前缀始终是一个好习惯。
// before
debuggable false
// after
isDebuggable = false
为 buildTypes 使用 getByName
要使用各种构建类型,您需要使用以下getByName
功能:
// before
buildTypes {
debug {
// ...
}
release {
// ...
}
}
// after
buildTypes {
getByName("debug") {
// ...
}
getByName("release") {
// ...
}
}
使用 mapOf 映射
要映射变量,您需要使用该mapOf()
函数。例如,要将本地.jar
文件依赖项添加到build.gradle.kts
文件中,您需要使用:
// before
implementation fileTree(dir: 'libs', include: ['*.jar'])
// after
implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar"))))
使用项目级 Gradle 文件(根项目)中的变量
为了更好的依赖管理,很多开发者倾向于将所有依赖的版本放在根级build.gradle
文件中,并在应用级build.gradle
文件中使用。所以,我们可以像下面这样使用它:
// in root-level build.gradle file
val prdownloaderVersion by rootProject.extra("0.6.0")
// in app-level build.gradle file
implementation("com.mindorks.android:prdownloader:${rootProject.extra.get("prdownloaderVersion")}")
从所有依赖项中排除库
要从 Kotlin DSL 文件中的所有依赖项中排除某些库build.gradle
,请使用以下命令:
configurations {
all {
exclude(group = "com.google.guava", module = "listenablefuture")
}
}
这些步骤可用于从基于 Groovy 的 Gradle 文件迁移到基于 Kotlin 的 Gradle 文件。
现在,您管理代码将变得非常容易,因为现在您必须获得自动建议、代码导航以及显然 Kotlin 语言的所有令人敬畏的功能。
但是,如果您有一个针对整个应用程序的中央依赖管理系统,事情会容易得多。所以,让我们学习如何制作一个。
如何拥有一个中央依赖管理系统?
每当我们运行任何 Gradle 文件时,它都会检查buildSrc
并在此基础上编译代码。所以,我们可以利用这个特性/过程,让我们的依赖文件用 Kotlin 语言编写。
因此,在项目视图中,buildSrc
在您的根目录中创建一个名为的新目录,并在该buildSrc
目录中创建一个文件名build.gradle.kts
并添加以下代码:
repositories {
jcenter()
}
plugins {
`kotlin-dsl`
}
repositories { }
您可以根据项目的需要删除该部分。现在,同步项目。
现在,在buildSrc
目录中,通过输入名称来创建嵌套目录src/main/java
。您也可以一一创建这些目录。在 buildSrc/src/main/java 中,创建一个名为Dependencies.kt
.
在这个Dependencies.kt
文件中,我们将为不同的目的创建对象,比如我们可以为所有版本创建一个对象,也可以为所有依赖项创建一个对象,等等。
例如:
object Versions {
const val recyclerViewVersion = "1.1.0"
const val materialLibraryVersion = "1.2.1"
}
object Dependencies {
const val recyclerView = "androidx.recyclerview:recyclerview:${Versions.recyclerViewVersion}"
const val materialDesign = "com.google.android.material:material:${Versions.materialLibraryVersion}"
}
同样,您也可以拥有其他对象,例如默认配置的一个对象,依此类推。
现在,要在您的应用程序级build.gradle
文件中使用这些依赖项,您需要做的就是通过它的名称来调用它。例如,这里是应用级build.gradle
文件的代码:
dependencies {
implementation(Dependencies.materialDesign)
implementation(Dependencies.recyclerView)
}
通过这种方式,您可以将所有依赖项及其版本保存在一个地方,并且此代码非常易于阅读和维护。
我们已经看到了如何从 Groovy Gradle 迁移到 Kotlin Gradle,但是这个过程也有一些缺点。让我们来了解一下。
迁移到基于 Kotlin 的 Gradle 有哪些优点和缺点?
到目前为止,我们已经看到了在 Gradle 文件中使用 Kotlin DSL 的优势。所以,让我们总结一下:
- 由于您使用的是 Kotlin,因此 IDE 将为您的 Gradle 文件提供自动建议功能,这也是迄今为止所缺少的。
- 在 Kotlin DSL 中,文件之间的代码导航变得很容易。
- 您可以在 Gradle 文件中利用 Kotlin 的所有功能。
但是,也有一些缺点。这里有一些:
- 在某些情况下,Kotlin DSL 可能比 Groovy 慢。例如,在首次使用、干净的结账或临时 CI 代理的情况下,它可能会变慢。
- 如果您正在从 Groovy 迁移到 DSL,那么事情对您来说可能看起来困难而冗长,但值得去做。
- 另一个缺点或者你可以说在 Gradle 中使用 Kotlin DSL 的先决条件是你必须使用 Java 8 或更高版本运行你的 Gradle。
因此,这些是在 Gradle 文件中使用 Kotlin DSL 的一些优点和缺点,很明显,优点远远超过缺点。
我们非常确定您会在 Gradle 文件中使用并喜欢 Kotlin DSL。
作者:Admin MindOrks
链接:Migrate to Gradle Kotlin DSL
网友评论