更新说明
昨天晚上整理了一下关于ProductFlavors的使用,因为自己项目只用到了主模块的分区,关于依赖的分区,也根据网上的博客进行了整理,自己也没有进行详细的测试。今天在运行demo的过程中,发现项目并没有进行相应的分区打包,相应的方法根本没有效果,对此进行一下道歉,误导大家接受错误的结论。今天去查阅了官网文档,进行整理并打包测试,总结的成功部分的结论。
主模块分区
依赖分区
上一篇介绍了主模块产品分区的用法,但是我们实际开发过程中,总是会出现模块化,组件化的状况。我们需要做到组件也支持分区功能。
我们进入到lib的gradle文件,进行配置:
android {
defaultConfig {
flavorDimensions 'lib'
}
productFlavors{
a {
dimension 'lib'
}
b {
dimension 'lib'
}
}
}
这个lib可能需要支持不同的依赖,我们就不能再像之前:
implementation 'com.android.support:appcompat-v7:28.0.0'
而是需要根据不同的产品,引用不同的包:
aImplementation 'com.android.support:appcompat-v7:28.0.0'
bImplementation 'com.android.support:appcompat-v7:28.0.0'
至此lib的配置就完成了,真相就是如此简单。
app分区配置
我们在 app 模块引用组合,将之前的
implementation project(path: ':base_library')
替换为下方的代码
aImplementation project(path: ':base_library')
bImplementation project(path: ':base_library')
之后会发现项目报错:
ERROR: Unable to resolve dependency for ':app@ADebug/compileClasspath': Could not resolve project :base_library.
这是因为项目不能知道你想要引用的是哪个风味的维度,我们需要配置一下组合:
a {
manifestPlaceholders = ["APP_NAME": "A"]
applicationIdSuffix ".a"
dimension 'app'
missingDimensionStrategy "lib", "a"
}
b {
manifestPlaceholders = ["APP_NAME": "B"]
applicationIdSuffix ".b"
dimension 'app'
missingDimensionStrategy "lib", "b"
}
在 a 产品下使用 missingDimensionStrategy "lib", "a" ,在 b 产品下使用 missingDimensionStrategy "lib", "b"。
在我们们切换 app 产品的时候,就可以看到,lib 的产品会同步变动了。
总结
好多方案,还是需要实践之后才能发现真相。
纸上得来终觉浅,绝知此事要躬行。