Gradle 子项目条件插件配置 gradle kotlin dsl

Gradle subproject conditional plugin configuration with gradle kotlin dsl

如果存在某个插件,这就是我之前在 gradle 中配置子项目的方式:

subprojects {
    repositories {
        jcenter()
        google()
    }
    plugins.withType(com.android.build.gradle.LibraryPlugin) {
        android {
            compileSdkVersion 29
            ...
        }
    }
}

现在我不再使用 groovy 了。我怎样才能用 gradle kotlin DSL 实现同样的事情?

这里最大的问题似乎是找到访问 android 扩展程序的方法,我似乎无法使用 androidextensions.findByType(com.android.build.gradle.LibraryExtension::class.java).[=15= 访问它]

我通过创建 precompiled script plugin 解决了这个问题,我将其应用于所有子项目。

buildSrc/build.gradle.kts

plugins {
    `kotlin-dsl`
}

dependencies {
    implementation("com.android.tools.build:gradle:4.1.2")
}

buildSrc/src/main/kotlin/android-libary.gradle.kts

plugins {
    id("com.android.library")
}

android {
    compileSdkVersion(29)
    ...
}

subProject/build.gradle.kts

plugins {
    `android-library`
}