转载请标明出处,维权必究: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: “渠道号”, ] }
哪里有不对的地方欢迎指出。
如果有疑问,或许这两篇可以帮到你: