本文环境基于:
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