如何将 build.gradle(app) 中的 groovy 类的参数获取到自定义 gradle 插件

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

我为 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() 方法[...]

先谢谢了!

android kotlin gradle groovy
2个回答
0
投票

根据 @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
    }
 }

0
投票

在你的 build.gradle.kts 中

project.extra.set("KEY_NAME", "VALUE")

在您的自定义 Gradle 插件中

override fun apply(project: Project) {
   val value = project?.extra?.get("KEY_NAME").toString()
}
© www.soinside.com 2019 - 2024. All rights reserved.