productFlavors实践

Gradle构建多维度,多版本apk的时候有多种方式,常见的是buildTypes分debug,release版本,另外就是productFlavor构建产品特性,结合flavorDimensions
1.这里注意flavorDimensions属于分类,是区分分类的维度,比较拗口

flavorDimensions "api", "mode"
productFlavors {
demo {
  // Assigns this product flavor to the "mode" flavor dimension.
  dimension "mode"
  ...
}

full {
  dimension "mode"
  ...
}

参照官网的demo,这里的api维度,mode维度是分开来的也就是说productFlavors与flavorDimensions结合可产生flavorDimensions*productFlavors中变体
gradle3.1后配置productFlavors必须配置flavorDimensions属性
如果只有一个dimension每个flavor可省略配置dimension

2.可通过gradle函数统一处理所有apk

variantFilter { variant ->
  def names = variant.flavors*.name
  // To check for a certain build type, use variant.buildType.name == "<buildType>"
  if (names.contains("minApi21") && names.contains("demo")) {
      // Gradle ignores any variants that satisfy the conditions above.
      setIgnore(true)
  }
}

3.如果配置在library项目上 要特别注意,以前的

  publishNonDefault true

该属性已废弃(我的gradle3.1.3)默认是会打各种渠道的依赖的
这里需要注意的是,为了保证分渠道引用的依赖也具有渠道属性,所有在该引用链上的项目都需要配置productFlavors保证整个引用的正常,否则sync会失败
4.最后这边提出分渠道的意义就是在于配置不同的配置项或者代码,本人没用到不同的代码 主要涉及一些基础配置项,例如baseurl分环境主要设置BuildConfig以及Manifest的引用
首先buildConfig的注入需要使用
buildConfig.put "type","name","value"
其次涉及manifest的注入
manifestPlaceholders=[key,value]或者
manifestPlaceholders.put(key,value)
注意这边如果直接配置到flavor内可能会报找不到该占位符,所以要在defaultConfig下配置一个默认属性
5.最后就是怎么使用gradlew打包安装,所有构建任务都能在as的右边找到,关于gradlew的命令请参照我的另外一篇文章gradlew常见命令,使用命令行的话主要是为了构建cd环境,我这边是用jenkins进行构建任务的,并上传蒲公英的看,如果有需要的话可以联系我咨询解决方案。我这边有些难点主要涉及复杂的网络
以上配置请参照官网Android多渠道配置