0

我喜欢将显式 API 模式应用于此 Android 项目 中的所有模块,但模块除外app。通过将以下配置添加到每个模块的build.gradle文件中,这可以正常工作。

// build.gradle of a module

kotlin {    
    explicitApi() 
}

但是,我喜欢避免重复声明。因此,我的目标是在项目根目录中的build.gradle文件中对其进行配置。我尝试了以下方法:

// build.gradle in project root

allprojects {
    apply plugin: "kotlin"
    kotlin {
        if (project.name != "app") {
            explicitApi()
        }
    }
}

这与模块中的插件定义冲突:

原因:org.gradle.api.internal.plugins.PluginApplicationException:无法应用插件“kotlin-android”。
原因:java.lang.IllegalArgumentException:无法添加名称为“kotlin”的扩展,因为已经使用该名称注册了一个扩展。
原因:com.android.build.gradle.internal.BadPluginException:“java”插件已应用,但与 Android 插件不兼容。

有关的

4

1 回答 1

4

build.gradle在子项目应用 Android 插件之前将 Kotlin 插件应用于子项目,这不起作用 - 它需要反过来。

尝试将操作推迟到评估项目之后,例如

gradle.afterProject { project ->
    if (project.name == "app") return
    project.extensions.findByName("kotlin")?.explicitApi()
}
于 2020-10-21T12:19:10.537 回答