Android 中 app module和lib module同时多productFlavors的配置和使用

本文环境基于:

studio版本:3.2.1和gradle-4.10.2-all

截止目前,网上的方法都是基于旧版本的studio,在这里记录一下最新环境的配置。

查阅了很多网站和资料,都是旧的方法,一直没搞好,前前后后耗时将近了两个星期。主要还是太low,一开始没太看懂官方的文档:添加编译依赖项|Android Developers

github还有个很新的demo:multi-flavor-lib-demo

注:本文的app module是指module为apply plugin: 'com.android.application'的应用module,非库module.

 

demo包含主要的两个app和enginelib module。

1.第一步,既然是多产品,那就定义多个product,在这,app module中定义productA、productB、productC三个产品。见app的build.gradle:

productFlavors {
        productA {
            applicationIdSuffix ".a"
            dimension 'app'

        }
        productB {
            applicationIdSuffix ".b"
            dimension 'app'

        }
        productC {
            applicationIdSuffix ".c"
            dimension 'app'

        }
}

注:由于新版本studio多产品需要指定flavorDimensions,别忘了在defaultConfig{}标签添加。

2.第二步,lib module也要多产品,那同样的也给它定义上,如engineA、engineB。见enginelib的build.gradle:

productFlavors {
        engineA {
            dimension 'sdk'//定义维度,方便在app module指定属性
        }
        engineB {
            dimension 'sdk'
        }
}

注:别忘了添加flavorDimensions。

到此,两个module的多productFlavors已经定义好了,先sync一下,发现没什么问题。接着继续,既然lib module是lib,那肯定要用来依赖的。

3.第三步,把lib module依赖到app module,添加依赖。见app的build.gradle:

implementation project(path: ':enginelib')

再次点击sync,发觉有报错并不能成功。接下来需要加一个属性定义才行(真料在此),见下一步。

4.第四步,添加missingDimensionStrategy,至于它的作用见名知意哈,可以自己查阅官方文档。

defaultConfig {
    ...

    //使用missingDimensionStrategy指定lib module中的两个flavor,"sdk"为lib module中定义的dimension
    //不然,app module将无法sync成功和找到lib module中的类
    missingDimensionStrategy "sdk", "engineA", "engineB"
}

大概意思是:告诉编译插件缺少“sdk”维度的engine

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值