android多渠道打包

轉載請標明出處,維權必究:http://www.javashuo.com/article/p-wetgbjbv-bs.html html

 

由於要統計各個市場的下載量和其餘數據,因此在打包的時候就須要針對每一個渠道單獨打包,因而,多渠道打包天然就出現了。android

否則一個一個打可真是要命。app

一、在AndroidManifest.xml文件的</application>標籤裏面設置:gradle

<meta-data
    android:name="APP_CHANNEL_VALUE"
    android:value="${APP_CHANNEL_VALUE}" />

 

二、app的build.gradle裏面設置(android {}裏面):ui

 

(1)、defaultConfig {}裏面加上:flavorDimensions "default"this

 

(2)、productFlavors裏面寫上渠道名與渠道號spa

productFlavors {
//渠道1。渠道名:v1,渠道號v1_100 v1 { manifestPlaceholders
= [ APP_CHANNEL_VALUE: "v1_100" ] }
//渠道2。渠道名:v2,渠道號:v2_100 v2 { manifestPlaceholders
= [ APP_CHANNEL_VALUE: "v2_100" ] } }

 

(3)、設置輸出的apk名稱(方便查看):debug

buildTypes {
     release {
         minifyEnabled false
         proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 
'proguard-rules.pro' applicationVariants.all { variant -> variant.outputs.all { output -> def outputFile = output.outputFile if (outputFile != null && outputFile.name.endsWith('.apk')) { def fileName = "novel_v${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk" outputFileName = fileName } } } } }

這個是apk的名稱:code

def fileName orm

= "novel_v${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk"

 

defaultConfig.versionName:版本號。

releaseTime():時間(具體方法接下來講)

variant.productFlavors[0].name:渠道名(這裏爲v1或者v2)

 

apk名稱爲novel_v  +  版本號   +   時間   +   渠道名

 

(4)、releaseTime()方法(寫在build.gradle的最外層)

def releaseTime() {
    return new Date().format("MMdd", TimeZone.getTimeZone("UTC"))
}

 

三、驗證:

(1)、代碼中獲取渠道號

private String getMetaChannel() {
     try {
         ApplicationInfo appInfo = getPackageManager()
.getApplicationInfo(this.getPackageName(), PackageManager.GET_META_DATA); String value = appInfo.metaData.getString("APP_CHANNEL_VALUE"); return value; } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } return ""; }

 

(2)、打debug包

而後運行,即可以打v1渠道的包,在看代碼中打印出來的渠道是否正確

 

如果全部的渠道都是相同的渠道號,能夠這樣:

productFlavors.all {
     flavor -> flavor.manifestPlaceholders = [
             APP_CHANNEL_VALUE: 「渠道號」,
     ]
 }

 

哪裏有不對的地方歡迎指出。

 

如果有疑問,或許這兩篇可以幫到你:

http://www.javashuo.com/article/p-glaqnkwl-ko.html

http://www.javashuo.com/article/p-novprlwt-cd.html

相關文章
相關標籤/搜索