Android Studio 使用Gradle多渠道打包

Android Studio 使用Gradle多渠道打包

我們都知道國內應用市場非常多,為了統計各個應用市場的app下載量和使用情況,我們需要多渠道的打包。如果一個一個的手動去打包豈不煩死了,要多麻煩就有多麻煩。這就要求我們學會使用Gradle進行多渠道打包。廢話不多說了,直接進入正題吧!

第一步:配置AndroidManifest.xml

以友盟渠道為例,渠道信息一般都是寫在 AndroidManifest.xml文件中,大約如下:

<code>/<code>

如果不使用多渠道打包方法,那就需要我們手動一個一個去修改value中的值,xiaomi,360,qq,wandoujia等等。使用多渠道打包的方式,就需要把上面的value配置成下面的方式:

<code>/<code>

其中${UMENG_CHANNEL_VALUE}中的值就是你在gradle中自定義配置的值。

第二步: 在build.gradle設置productFlavors

<code>productFlavors {
    wandoujia {
         manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
    }

    xiaomi{
         manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
    }

    qq {

         manifestPlaceholders = [UMENG_CHANNEL_VALUE: "qq"]
    }

    _360 {
         manifestPlaceholders = [UMENG_CHANNEL_VALUE: "360"]
    }

}/<code>

其中[UMENG_CHANNEL_VALUE: “wandoujia”]就是對應${UMENG_CHANNEL_VALUE}的值。我們可以發現,按照上面的方式寫,比較繁瑣,其實還有更簡潔的方式去寫,方法如下:

<code>android { 
   productFlavors {
       wandoujia{}
       xiaomi{}
       qq{}
       _360 {}
   }

   productFlavors.all {
       flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
       }
}/<code>

其中name的值對相對應各個productFlavors的選項值,這樣就達到自動替換渠道值的目的了。這樣生成apk時,選擇相應的Flavors來生成指定渠道的包就可以了,而且生成的apk會自動幫你加上相應渠道的後綴,非常方便和直觀。大家可以自己反編譯驗證。

第三步:一次生成所有渠道包

我們可以使用CMD命令,進入到項目所在的目錄,直接輸入命令:

<code>gradle assembleRelease/<code>

就開始打包了,如果渠道很多的話,時間可能會很長。

或者,當然Android Studio中的下方底欄中有個命令行工具Terminal,你也可以直接打開,輸入上面的命令:

<code>gradle assembleRelease/<code>

用CMD進入到項目所在目錄執行,或者用AS中自帶的命令行工具Terminal其實性質都是一樣的。

注意:如果沒有對gradle配置的話,可能輸入上面的命令,會提示“不是內部或者外部命令”,不要著急,我們只需要找到gradle的目錄,把它配置到電腦中的環境變量中去即可。

配置方式如下:

先找到gralde的根目錄,在系統變量裡添加兩個環境變量:

變量名為:GRADLE_HOME,變量值就為gradle的根目錄;

所以變量值為:D:\\android\\android-studio-ide-143.2739321-windows\\android-studio\\gradle\\gradle-2.10

還有一個在系統變量裡PATH裡面添加gradle的bin目錄

我的就是D:\\android\\android-studio-ide-143.2739321-windows\\android-studio\\gradle\\gradle-2.10\\bin

這樣就配置完了,不信趕緊去試試,執行以下這個命令:gradle assembleRelease。是不是可以了。

第四步:如果要帶簽名的話,就得在build.gradle進行相關簽名的配置

<code>//簽名
signingConfigs{
    release {
         storeFile file("keystore路徑")
         storePassword "***"
         keyAlias "***"
         keyPassword "***"
    }
}

buildTypes {
       release {
           runProguard false
           proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
           signingConfig signingConfigs.release
       }
   }/<code>

第五步:修改導出包的apk名稱

我們打包有非常多的渠道包,所以我們可以根據渠道自定義apk的名稱,方便運營人員看嘛,知道哪個apk對應的哪個渠道嘛。

<code>android {

   applicationVariants.all { variant ->

       variant.outputs.each { output ->

           output.outputFile = new File(

                   output.outputFile.parent,

                   "xxxx(apk的名字)-${variant.buildType.name}-${defaultConfig.versionName}-${variant.productFlavors[0].name}.apk".toLowerCase())

       }

   }

}/<code>

最後打包完成之後,apk文件就會生成在項目的build\\outputs\\apk下。


文章不易,如果大家喜歡這篇文章,或者對你有幫助希望大家多多,點贊,轉發,關注 哦。文章會持續更新的。絕對乾貨!!!



分享到:


相關文章: