Я пишу собственный плагин 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")
, но ничто не дает мне доступа к нему.
вопросы:
- это правильный подход?
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
}