使用Gradle Kotlin DSL在{settings.gradle.kts}中设置gradle.ext

时间:2019-08-22 07:08:22

标签: android gradle kotlin groovy

这里是google/exoplayer的代码段-用Groovy构建脚本编写。

// settings.gradle
gradle.ext.exoplayerRoot = 'path/to/exoplayer'
gradle.ext.exoplayerModulePrefix = 'exoplayer-'
apply from: new File(gradle.ext.exoplayerRoot, 'core_settings.gradle')

如何使用Kotlin DSL实现此目的?

我找不到任何有用的资源或文档。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

挖掘了一段时间后找到了解决方案。

在Groovy中,特征的动态实现-因此,即使类A没有在类定义中实现接口B,它也可能在以后的版本中实现。

我没有看到Gradle内部结构,因此无法正确解释,但似乎可以正常工作。希望这会有所帮助。

if (gradle is ExtensionAware) {
    val extension = gradle as ExtensionAware
    extension.extra["exoplayerRoot"] = "path/to/exoplayer"
    extension.extra["exoplayerModulePrefix"] = "exoplayer-"
    apply(from = File(extension.extra["exoplayerRoot"].toString(), "core_settings.gradle"))
}

对于使用ExoPlayer的用户,我创建了issue来为Kotlin DSL用户请求一些文档。