productFlavors實踐

Gradle構建多維度,多版本apk的時候有多種方式,常見的是buildTypes分debug,release版本,另外就是productFlavor構建產(chǎn)品特性,結合flavorDimensions
1.這里注意flavorDimensions屬于分類,是區(qū)分分類的維度,比較拗口

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

full {
  dimension "mode"
  ...
}

參照官網(wǎng)的demo,這里的api維度,mode維度是分開來的也就是說productFlavors與flavorDimensions結合可產(chǎn)生flavorDimensions*productFlavors中變體
gradle3.1后配置productFlavors必須配置flavorDimensions屬性
如果只有一個dimension每個flavor可省略配置dimension

2.可通過gradle函數(shù)統(tǒng)一處理所有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分環(huán)境主要設置BuildConfig以及Manifest的引用
首先buildConfig的注入需要使用
buildConfig.put "type","name","value"
其次涉及manifest的注入
manifestPlaceholders=[key,value]或者
manifestPlaceholders.put(key,value)
注意這邊如果直接配置到flavor內(nèi)可能會報找不到該占位符,所以要在defaultConfig下配置一個默認屬性
5.最后就是怎么使用gradlew打包安裝,所有構建任務都能在as的右邊找到,關于gradlew的命令請參照我的另外一篇文章gradlew常見命令,使用命令行的話主要是為了構建cd環(huán)境,我這邊是用jenkins進行構建任務的,并上傳蒲公英的看,如果有需要的話可以聯(lián)系我咨詢解決方案。我這邊有些難點主要涉及復雜的網(wǎng)絡
以上配置請參照官網(wǎng)Android多渠道配置

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容