我正在尝试遵循 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 中?
那里有 Groovy 到 Kotlin 迁移指南。
以下是适用于您的代码片段的三个规则:
报价。 Kotlin 对字符串使用双引号,而 Groovy 可以使用单引号或双引号。
大括号。 Groovy 可以调用任何不带大括号的单参数函数;这样的函数调用在 Kotlin 中确实存在,但仅限于适当定义的函数,并且这样的函数在 Gradle 脚本中并不常见1.
任务名称变量。在 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
就是这样一个函数。