Access gradle Android плагин внутри пользовательского плагина, написанный на Kotlin - PullRequest
0 голосов
/ 20 марта 2020

Я пишу собственный плагин 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.
Просто введите project.android в Kotlin не работает, насколько я понимаю, мне нужно написать что-то похожее на приведенное ниже:

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. это правильный подход?

case:
(да) 2. Как мне импортировать и использовать его?
(нет) 2. Каков правильный подход?

tl; др:

как писать project.android.applicationVariants.all { variant -> внутри плагина Gradle Kotlin

edit:

@ tim_yates ответ работал отлично. Кому интересно, вот окончательный код.

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
}

1 Ответ

1 голос
/ 20 марта 2020

Вам понадобится что-то вроде этого:

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

И вам понадобится зависимость com.android.tools.build:gradle, как вы говорите.

Почему она не распознается, я ' я не уверен ... Вы пишете отдельный плагин? Если да, то, что у вас работает ... Если это встроенный плагин в папке buildSr c, то вам нужно добавить lib в buildSr c build

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...