Android 使用gradle Kotlin DSL在settings.gradle.kts中设置gradle.ext

Android 使用gradle Kotlin DSL在settings.gradle.kts中设置gradle.ext,android,gradle,kotlin,groovy,Android,Gradle,Kotlin,Groovy,下面是来自的代码片段-它是用Groovy buildscript编写的 // settings.gradle gradle.ext.exoplayerRoot = 'path/to/exoplayer' gradle.ext.exoplayerModulePrefix = 'exoplayer-' apply from: new File(gradle.ext.exoplayerRoot, 'core_settings.gradle') 如何使用Kotlin DSL实现这一点 我找不到任何有用

下面是来自的代码片段-它是用Groovy buildscript编写的

// settings.gradle
gradle.ext.exoplayerRoot = 'path/to/exoplayer'
gradle.ext.exoplayerModulePrefix = 'exoplayer-'
apply from: new File(gradle.ext.exoplayerRoot, 'core_settings.gradle')
如何使用Kotlin DSL实现这一点


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

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

在Groovy中,有traits的动态实现——因此,即使类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的用户,我创建了一个为Kotlin DSL用户请求一些文档的程序。

有帮助吗@tim_yates我已经看过了,但它没有告诉我如何访问Gradle对象中的额外属性。我正在深入研究它。Groovy是否接受接口的动态实现?这可能是个问题。