美文网首页
在Android中将Gradle Groovy DSL迁移到 G

在Android中将Gradle Groovy DSL迁移到 G

作者: 蜗牛是不是牛 | 来源:发表于2022-07-14 22:27 被阅读0次

前言

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

相关文章

网友评论

      本文标题:在Android中将Gradle Groovy DSL迁移到 G

      本文链接:https://www.haomeiwen.com/subject/sepfirtx.html