如何将一些旧的 gradle 代码转换为新的 Kotlin 脚本 gradle (.kts)

问题描述 投票:0回答:1

我正在尝试遵循 this 在 Android 中使用 pocketsphinx-android 的稀疏且模糊的教程。我在“包括资源文件”部分遇到问题。它希望我将以下内容放入我的

app/build.gradle
..

ant.importBuild 'assets.xml'
preBuild.dependsOn(list, checksum)
clean.dependsOn(clean_assets)

..但它不起作用,因为我很确定它不是我的 gradle app/build.gradle.kts 需要的 Kotlin 脚本。

到目前为止,我已经让我的应用程序同步和构建(没有这个 gradle 代码),但运行时它抱怨它无法访问

assets.lst
所以我认为这是我的最后一个障碍。

有人可以帮我翻译这段代码吗?或者有没有办法将旧的 gradle 代码包含在新的 gradle 中?

android gradle kotlin-script
1个回答
0
投票

那里有 Groovy 到 Kotlin 迁移指南

以下是适用于您的代码片段的三个规则:

  1. 报价。 Kotlin 对字符串使用双引号,而 Groovy 可以使用单引号或双引号。

  2. 大括号。 Groovy 可以调用任何不带大括号的单参数函数;这样的函数调用在 Kotlin 中确实存在,但仅限于适当定义的函数,并且这样的函数在 Gradle 脚本中并不常见1.

  3. 任务名称变量。在 Groovy 中,您可以引用已在构建脚本根目录中通过其名称定义的任务。在 Kotlin 中,类似的语法是可能的,但仅限于

    tasks
    块内,并且仅当在已应用于
    plugins
    块中的插件中定义此类任务时。

    即便如此,Kotlin 访问器也会为您提供

    TaskProvider
    而不是
    Task
    ,这意味着您必须对它们调用
    configure
    来配置它们。不过,这样的
    TaskProvider
    对象作为
    dependsOn
    的参数是有效的。

应用这些规则使你的三行变成:

tasks {
    ant.configure { importBuild("assets.xml") }
    preBuild.configure { dependsOn(list, checksum) }
    clean.configure { dependsOn(clean_assets) }
}

假设上述所有任务都在插件中定义;否则你将不得不使用例如

named("clean_assets")
来访问它们。


1 我能想到的一个例子是指定插件的版本,例如

plugins {
    kotlin("jvm") version "1.9.23"
}

这里

version
就是这样一个函数。

© www.soinside.com 2019 - 2024. All rights reserved.