在Kotlin编写的自定义插件中访问gradle Android插件



我正在编写一个自定义的Gradle插件,它应该能够从Android插件访问配置参数。

我当然可以通过groovy插件(这是我当前的代码(做到这一点:

MyPlugin.groovy:
class MyPlugin implements Plugin<Project> {
void apply(Project project) {
project.android.applicationVariants.all { variant ->
variant.registerJavaGeneratingTask( // all the right parameters

我的问题是,我不希望这个插件在Groovy中,我希望它使用Kotlin
简单地在Kotlin中键入project.android是行不通的,据我所知,我需要写一些类似于下面的内容:

MyPlugin.kt
import com.android.build.gradle.AndroidBasePlugin
class MyPlugin : Plugin<Project> {
override fun apply(target: Project) {
val android = target.plugins.findPlugin(AndroidBasePlugin::class.java)
// and call android here

我的主要问题是导入import com.android.不存在
我试着在build.gradle.kts上添加了很多不同的依赖项,比如implementation("com.android.tools.build:gradle:3.6.1"),但没有什么能让我访问它。

问题:

  1. 这是正确的方法吗

情况:
(是(2。如何导入和使用它
(否(2。什么是正确的方法?

tl;dr:

如何在GradleKotlin插件中编写project.android.applicationVariants.all { variant ->

编辑:

@蒂姆的回答非常有效。对于感兴趣的人,以下是最终代码。

build.gradle.kts:

plugins {
`kotlin-dsl`
}
repositories {
mavenCentral()
jcenter()
google()
}
dependencies {
implementation("com.android.tools.build:gradle:3.6.1")
... my other dependencies
}

包名称/MyPlugin.kt:

import com.android.build.gradle.AppExtension
import com.android.build.gradle.api.ApplicationVariant
(...)
override fun apply(target: Project) {
val android = target.extensions.findByType(AppExtension::class.java)
android?.applicationVariants?.configureEach {
configureVariant(target, this)
}
private fun configureVariant(...) { // register my taks there
}

您需要的是这样的东西:

project.extensions.configure<AppExtension>("android") {
it.applicationVariants.all {
it.registerJavaGeneratingTask( // all the right parameters
}
}

正如您所说,您将需要com.android.tools.build:gradle依赖性。

为什么它没有被识别,我不确定。。。你在写一个独立的插件吗?如果是这样的话,你所做的工作。。。如果它是buildSrc文件夹中的内联插件,那么您需要将lib添加到buildSrc构建中

最新更新