仓库地址: https://github.com/lzyprime/android_demos
之前想复用data层, ui层分别用compose和传统view分别实现。所以通过gradle moudle组织工程:
core: 通用部分, 包括data层,viewModel,共用资源文件等view: view实现compose: compose实现但是实际体验之后,发现还是有很多弊端:
初衷本来只是隔离ui层实现和部分资源文件,所以改为通过sourceSet实现:
val useCompose by project.extra(false)
android {
sourceSets {
getByName("main") {
if (useCompose) {
kotlin.srcDir("src/ui/compose")
res.srcDir("src/ui/compose/res")
} else {
res.srcDir("src/ui/view/res")
kotlin.srcDir("src/ui/view")
}
}
}
}
实现 配置,源码,资源文件 多版本控制
sourceSet 是 gradle 本身就提供的接口,用来组织项目源码。 gradle sourceSets
// build.gradle
plugins {
id 'java'
}
sourceSets {
main {
java {
exclude 'some/unwanted/package/**'
}
}
}
android gradle plugin 自己也有一个sourceSet, 目的很简单,就是先塞一些默认行为:android sourceSet 默认源码集。 kts版本的api相比groovy要少一部分,没有exclude 等操作
src/main/ 此源代码集包含所有 变体 共用的代码和资源。src// 创建此源代码集可加入特定 buildType 专用的代码和资源。 比如常用的 debug,release。在 android.buildTypes 中配置src// 创建此源代码集可加入特定产品变种专用的代码和资源。在 android.productFlavors 配置// build.gradle.kts
android {
...
sourceSets {
// NamedDomainObjectContainer
getByName