gradle android 配置 build 变体

λ:

仓库地址: https://github.com/lzyprime/android_demos

之前想复用data层, ui层分别用compose和传统view分别实现。所以通过gradle moudle组织工程:

  • core: 通用部分, 包括data层,viewModel,共用资源文件等
  • view: view实现
  • compose: compose实现

但是实际体验之后,发现还是有很多弊端:

  • Hilt依赖注入跨moudle的问题
  • Application, Manifest文件维护两份(view, compose),但大部分逻辑相同
  • gralde 依赖声明,module 存在相同依赖,管理繁琐

初衷本来只是隔离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")
            }
        }
    }
}

android 配置 build 变体

  • buildTypes
  • dependencies
  • productFlavors
  • sourceSets

实现 配置,源码,资源文件 多版本控制

sourceSet 源码集

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>/ 创建此源代码集可加入特定 buildType 专用的代码和资源。 比如常用的 debugrelease。在 android.buildTypes 中配置
  • src/<productFlavor>/ 创建此源代码集可加入特定产品变种专用的代码和资源。在 android.productFlavors 配置
// build.gradle.kts
android {
   
    ...
    sourceSets {
    // NamedDomainObjectContainer<out AndroidSourceSet>
        getByName
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值