Как применить явный режим API ко всем модулям, кроме модуля приложения?

Я хотел бы применить режим явного 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.

Связанный

1 ответ

Решение

Твой build.gradle применяет плагин Kotlin к подпроектам до того, как они применит плагин Android, что не работает - должно быть наоборот.

Попробуйте отложить действие до тех пор, пока проект не будет оценен, например

gradle.afterProject { project ->
    if (project.name == "app") return
    project.extensions.findByName("kotlin")?.explicitApi()
}
Другие вопросы по тегам