一、简介

为了统计不同渠道上的下载数量及用户活动情况,方便后台做运营统计。我们需要在安装包中添加不同的标识(渠道信息 Channel)。多渠道的实现方式多种多样,此篇只实现友盟多渠道打包的方法。友盟多渠道打包方法试用于少量的渠道,如果要打包十几个或上百个的渠道就要花费大量的时间,影响效率。

二、基本配置

(1)基于项目集成友盟统计的基础上,我们只需要在AndroidManifest.xml 文件中修改渠道信息:

(2)在module的build.gradle的android{}中添加如下内容:

android {

...

...

// 多渠道打包

productFlavors {

wandoujia {

}

xiaomi {

}

}

productFlavors.all { flavor ->

flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]

}

// 修改命名规则3.0之前可以使用

applicationVariants.all { variant ->

variant.outputs.each { output ->

def outputFile = output.outputFile

if (outputFile != null && outputFile.name.endsWith('.apk')) {

def fileName = outputFile.name.replace(".apk","-${defaultConfig.versionName}.apk")

output.outputFile = new File(outputFile.parent, fileName)

}

}

}

三、AS升到3.0后遇到的错

(1)AS升到3.0后 output.outputFile变成了只读模式,不能再往里面写东西了。这时我们需要修改命名规则

bb09d8e18782

image.png

//修改后的命名规则

applicationVariants.all { variant ->

variant.outputs.all {

def formattedDate = new Date().format('yyyy_MM_dd')

outputFileName = rootProject.getName()+"-"+variant.flavorName+"-"+buildType.name+"-"+formattedDate+"-v"+defaultConfig.versionName+"-"+ defaultConfig.versionCode+ ".apk";

}

}

(2)Android Plugin3.0的依赖机制:在使用library时会自动匹配variant(debug, release),就是说app的debug会自动匹配library的debug。同样如果使用flavor的时候,比如app的redDebug同样会自动匹配library的readDebug。虽然有这样的优势,但是在使用flavor时,必须定义flavor dimension,否则会提示错误(不知道是哪位大神说的感觉蛮有道理的 借用一下,反正我是菜鸟,不是很懂。)。所以需要在以下加上这句话

bb09d8e18782

image.png

//在下面添加 flavorDimensions "versionCode" 即可

defaultConfig {

applicationId "*********"

minSdkVersion 18

targetSdkVersion 28

versionCode 1

versionName "1.0"

flavorDimensions "versionCode"

testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

}

四、源码地址

五、内容推荐:

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐