我为 Android 创建了一个用 Kotlin 编写的自定义 gradle 插件。插件工作正常。我缺少的一件事是从我的应用程序 build.gradle (应用程序级别)内的类中获取参数。
所以我将 MyPlugin 应用于应用程序。
build.gradle(应用程序级别)
plugins{
id 'com.example.MyPlugin'
}
....
....
ArchiveConfig{
username 'James'
password '12345678'
debugApk false
}
MyPlugin 项目中的 MyPlugin.kt 内部
open class MyPlugin : Plugin<Project>{
val archiveConfig: ArchiveConfig = project.extensions.create("ArchiveConfig", ArchiveConfig())
override fun apply(p : Project) {
//some code
}
}
//I believe here I should somehow fetch that ArchiveConfig values from build.gradle which is inside
open class ArchiveConfig(var username: String? = null
var password: String? = null
vardebugApk: Boolean = false) : GroovyObjectSupport() {
//do something with data in plugin
}
如果我采用所描述的方法,我会收到错误
找不到参数的 ArchiveConfig() 方法[...]
先谢谢了!
根据 @tim_yates 及其扩展文档链接。
为了自定义自定义插件的行为,或者换句话说,如果我们想要从正在处理的应用程序中的 build.gradle 发送一些参数到自定义插件,然后在自定义插件中使用这些参数,我们必须使用 扩展对象 .
使用示例是:
应用程序build.gradle(应用程序级别)
//here we apply our plugin
plugins{
id 'com.example.MyPlugin'
}
....
....
//groovy class whose parameters we want to "send" to CustomPlugin for it to do some work
ArchiveConfig{
username 'James'
password '12345678'
}
CustomPlugin 项目中的 MyPlugin.kt 内部
open class MyPluginExtension{
var username : String = ""
var password : String = ""
}
class MyPlugin : Plugin<Project>{
override fun apply(p : Project) {
val extension = project.extensions.create<MyPluginExtension>("ArchiveConfig")
//do stuff with variables from ArchiveConfig
//you access them with following
val user = extension.username
val pw = extension.password
}
}
在你的 build.gradle.kts 中
project.extra.set("KEY_NAME", "VALUE")
在您的自定义 Gradle 插件中
override fun apply(project: Project) {
val value = project?.extra?.get("KEY_NAME").toString()
}