Как применить явный режим 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()
}