android - 如何在 Kotlin Gradle DSL 中为多个模块重用部分 Android 配置?
问题描述
我有一个多模块 Android 项目和 Kotlin Gradle DSL。有一些配置必须在每个模块中重复,我想重用代码。我想重用例如这段代码:
android {
sourceSets {
getByName("main").java.srcDirs("src/main/kotlin")
getByName("test").java.srcDirs("src/test/kotlin")
}
}
Kotlin DSL 示例中记录了两种方法:
apply(from = "foo.gradle.kts")
和扩展功能是buildSrc
这样的:
fun Project.kotlinProject() {
dependencies {
"compile"(kotlin("stdlib"))
}
}
但是这两种方法都只适用于顶级配置,我无法访问 Android 插件的东西。我收到类似的错误Unresolved reference: BaseExtension
解决方案
最后我受到了SUPERCILEX 代码的启发:
allprojects {
val parent = (group as String).split(".").getOrNull(1)
when {
name == "app" -> {
apply(plugin = "com.android.application")
configureAndroidModule()
}
parent == "common-android" -> {
apply(plugin = "com.android.library")
configureAndroidModule()
}
}
}
fun Project.configureAndroidModule() {
configure<BaseExtension> {
sourceSets {
getByName("main").java.srcDirs("src/main/kotlin")
getByName("test").java.srcDirs("src/test/kotlin")
}
}
}
推荐阅读
- ruby-on-rails-5 - Rails 向验证错误消息添加第二个字段名称
- c# - DataGridView 尝试将我的 SQLIte DateTimes 转换为 Image
- reactjs - 在redux store redux中清除搜索过滤器功能后如何返回原始状态
- c++ - 遍历unordered_map cpp的问题
- go - 为什么 Go 浮点数不能溢出而整数可以?
- ios - 为什么在IOS图像蒙版中蒙版图像像素RGB值显示原始图像RGB值?
- azure-application-insights - 什么 SSL 版本用于将数据从桌面应用程序记录到 Application Insights?
- java - 如何在 JAVA 中下载后获取 .zip 文件的动态名称
- html - 用画布创建图案
- html - 如何检查哪个 span 标签当前处于活动状态