背景是什么?
lib A 和 lib A’ 拥有大部分相同的代码,小部分的产品特性差异,但是lib A是用在App 1 中,而lib A’是用在App 2上,如果分开维护两份代码拷贝,工作量将极为巨大。
如何代码复用
借助gradle提供的productFlavor来实现代码和资源的合并。基础知识可以参照之前写的一篇文档Gradle For Android Product flavors章节。
有Product flavors的知识基础,我们可以将source set拆分成如下:
- main: 主要是各个产品特性所共有的资源和代码,当然和productFlavor重复了也不可怕,会被productFlavor的所覆盖。
- productFlavorA: 包含属于其中一个App的具体产品特性资源及代码。其他的如 productFlavorB,productFlavorC…都是类似的。
gradle脚本配置
android {
productFlavors {
productFlavorA {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
minSdkVersion 18
targetSdkVersion 23
versionCode 500
versionName "5.0.0"
}
}
productFlavorB {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
minSdkVersion 19
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
}
}
....
}
需要publishNonDefault,defaultPublishConfig配置?
参考之前写的wiki gradle管理发布
如果在不同的productFlavor中需要依赖不同的SDK呢?
productFlavor + compile 再跟上所依赖的库
参考之前写的wikiGradle For Android 的“依赖的概念”