多渠道先要分析需求,然后按功能划分成几个维度.举个例子,我们要打的包特供"好女人"和"坏男人",我们的需求就可以分成两个维度,"性别"和"品性"
先定义这两个维度
android{ defaultConfig { flavorDimensions "性别","品性" } }
然后我们配置productFlavors,
android{ productFlavors{ 好 { dimension '品性' } 坏{ dimension '品性' } 男人{ dimension '性别' } 女人{ dimension '性别' } } }
由于我们只需要好女人和坏男人两个版本,所以需要把好男人和坏女人过滤掉
android{ defaultConfig{ flavorDimensions "品性","性别" } productFlavors{ 好 { dimension '品性' } 坏{ dimension '品性' } 男人{ dimension '性别' } 女人{ dimension '性别' } } variantFilter{ def names = it.flavors*.name if(names.contains("男人") && names.contains("好")){ setIgnore(true) } if(names.contains("女人") && names.contains("坏")){ setIgnore(true) } } }
然后,我们坏男人专用版本只供测试,不对外分部,也就是说不需要release版本
android{ defaultConfig{ flavorDimensions "品性","性别" } productFlavors{ 好 { dimension '品性' } 坏{ dimension '品性' } 男人{ dimension '性别' } 女人{ dimension '性别' } } variantFilter{ def names = it.flavors*.name if(names.contains("男人") && names.contains("好")){ setIgnore(true) } if(names.contains("女人") && names.contains("坏")){ setIgnore(true) } if(names.contains("男人")&&names.contains("坏") && it.buildType.name=='release'){ setIgnore(true) } } }
坏有部分特殊的代码,另外放置,女人也有部分代码和资源放置到其它目录
android{ defaultConfig{ flavorDimensions "品性","性别" } productFlavors{ 好 { dimension '品性' } 坏{ dimension '品性' } 男人{ dimension '性别' } 女人{ dimension '性别' } } variantFilter{ def names = it.flavors*.name if(names.contains("男人") && names.contains("好")){ setIgnore(true) } if(names.contains("女人") && names.contains("坏")){ setIgnore(true) } if(names.contains("男人")&&names.contains("坏") && it.buildType.name=='release'){ setIgnore(true) } } sourceSets{ main{...} 坏{...} 女人{...} } }