如何将显式 API 模式应用于除 app 模块之外的所有模块?

How to apply explicit API mode to all modules except the app module?

我喜欢将 explicit API mode to all modules in this Android project except 应用到 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()
        }
    }
}

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

Caused by: org.gradle.api.internal.plugins.PluginApplicationException: Failed to apply plugin 'kotlin-android'.
Caused by: java.lang.IllegalArgumentException: Cannot add extension with name 'kotlin', as there is an extension already registered with that name.
Caused by: com.android.build.gradle.internal.BadPluginException: The 'java' plugin has been applied, but it is not compatible with the Android plugins.

相关

您的 build.gradle 在子项目应用 Android 插件之前将 Kotlin 插件应用到子项目,这是行不通的 - 它需要反过来。

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

gradle.afterProject { project ->
    if (project.name == "app") return
    project.extensions.findByName("kotlin")?.explicitApi()
}