Android多渠道打包神器ProductFlavor詳解

一.什麼是多渠道打包

  在不同的應用市場可能有不同的統計需求,需要為每個應用市場發佈一個安裝包,這裡就引出瞭Android的多渠道打包。在安裝包中添加不同的標識,以此區分各個渠道,方便統計app在市場的各種下載量、用戶數等關鍵數據。

多渠道打包的原理就是為我們每個平臺或者市場發佈的apk指定一個唯一的標識符。通過這個標識符就可以知道被下載的apk是在哪個平臺市場下載的。

1.多版本

基於buildTypes

(1) debug:調試版本,無混淆

(2) release:發佈版本,有混淆、壓縮

2.多環境

基於productFlavors

(1)develop:開發環境,開發和自測時使用

(2)check:測試環境,克隆一份生產環境的配置,在這裡測試通過後,再發佈到生產環境。之所以沒命名為test是因為在gradle編譯時:ProductFlavornamescannotstartwith'test'

(3)product:生產環境,正式提供服務的。

3.多渠道

基於Android新的應用簽名方案APKSignatureSchemev2中的APKSigningBlock區塊

我這裡使用的是美團封裝的Walle庫。使用Walle庫請確保你的AndroidGradle插件版本在2.2.0以上。

為什麼不直接使用productFlavors來打包多渠道?因為productFlavors打多渠道包太慢瞭,打30個包差不多十幾分鐘,無法忍受!

為什麼不使用美團之前基於META-INF進行渠道標識的方案?因為Android7.0之後的這種黑科技已經失效瞭!

二.多渠道打包的方式(ProductFlavor&&多渠道打包插件)

1.ProductFlavor

Android基於 Gradle開發的一個插件裡面的產品配置構建“變種”制作渠道包。

Gradle開發的插件是哪裡來的???

1.首先項目有兩層build.gradle文件:

  • build.gradle(本項目名稱) 最外層的build.gradle文件
  • build.gradle(:app) app目錄下build.gradle文件

在頂層build.gradle文件中添加依賴

使用Gradle插件:

上面是導入多個插件使用plugins;

plugins {
    id 'com.android.application'
}

導入單個可以使用

apply plugin:'com.android.application'

就這樣我們就可以在 app目錄下build.gradle文件中的android節點使用ProductFlavor。

1.1 如何是使用ProductFlavor

    flavorDimensions "default"
    //方式1:(適用於多數據)
    //讀取channel.txt渠道文件 創建flavor
    file('channel.txt').readLines().each {
        channel->
            productFlavors.create(channel,{
                dimension "default"
                //替換AndroidManifest中的值
                manifestPlaceholders=[channel1:channel]
            })
    }
    //方式2:(比較常用:適用於少量)
    productFlavors{
            ywj{
            }
            wyw{
            }
        }

訪問的文件如圖所示:

他會生成多少個“變種”呢???

是根據你的productFlavors中的個數與buildTypes中的類型個數(一般是release+debug)

我這裡沒有寫debug但是下面生成瞭對應的“變種”:註意 buildType 類型的debug是默認的,不寫也會默認存在。

這個按字母排序的。

1.2 如何是使用ProductFlavor加載apk包

使用Gradle工具欄下的Tasks中的build中的工具加載

點擊assembleRelesase試試水,看看發生瞭什麼?

1.3 該如何獲取不同渠道包的信息

</activity>
        <meta-data android:name="CHANNEL_VALUE" android:value="${channel1}"/>
    </application>
</manifest>

再不同的apk包中可以訪問不同的信息。關於怎麼訪問AndroidManifest.xml裡的數據會在以後進行學習!!!

1.4 使用ProductFlavor加載apk包的優缺點

優點:官方,可配置性高

缺點:每個渠道包需要執行完整的構建流程,非常的慢!!!

2.多渠道打包插件

這個方法很好的彌補瞭上一個打包方式的缺點。此時要多加一個依賴。底下目前展示的第二個依賴不可用,不過不要緊。你可以使用美團(walle)、騰訊(VasDolly)…等的多渠道打包插件

//引入插件
apply plugin: 'com.enjoy.channel'
channel{
    //基準包
    baseApk "${buildDir}/outputs/apk/release/app-release.apk"
    //輸出目錄
    outDir "${buildDir}/outputs/channel"
    //渠道信息
    channelFile "${projectDir}/channel.txt"
}

如圖所示:根據上面設置的路徑輸出。並且生成一個基準包後,輸出不同渠道包的速度變快瞭許多。當你再在channel.txt文件中再多加些數據,一樣也會很快的輸出。

到此這篇關於Android多渠道打包神器ProductFlavor詳解的文章就介紹到這瞭,更多相關Android ProductFlavor內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: