一、什么是多渠道
我理解的是:APP发布到不同的应用平台,监测用户是从哪个平台安装的。
二、为什么要多渠道打包
1. 统计用户安装APP来源知道多渠道的意义就不难理解多渠道打包主要是为了我们统计分析用的。所以,这样就很清楚了我最初的想法不是不行,而是不好,对今后的产品分析没有任何帮助。
2.批量修改生成的apk文件名根据运营给的命名规则,如果是一个个的右键-重命名,那15个还好,要真是有1000个,运营同事一定会拿刀找我的...而多渠道打包所有的都自动生成。
3.可更改包名如果有生成不同包名的需求,通过gradle就可以解决。
4.生成不同应用名称或图标有的时候你会在不同平台看到XX-小米版,XX-魅族版等等,或者beta版的图标和正式的不一样,其实代码还是那个代码,无非做点小小的改动,具体实现我们后面会说。
这是我所了解到的,可能还有很多我不知道的用途,欢迎大家在下面留言。
三、如何多渠道打包
多渠道打包网上大概有两种,一个是通过gradle,另一个是美团介绍的只打一个包,然后解压替换文件,两者比较美团的方法要更快,但是今天我们先不做介绍,如果想了解请看《Android多渠道打包飞一般的感觉》。。
1. 在AndroidManifest.xml中添加占位符一般都是像友盟,腾讯统计分析SDK中使用的方案,网上友盟的较多,我实际用的是腾讯分析所以就拿腾讯的来说(其实都一样)。首先,在AndroidManifest.xml的application标签里添加一个meta-data标签定义MTA_CHANNEL占位符,腾讯分析SDK会读取里面的value值传到后台,便于我们日后分析。
我理解的是:APP发布到不同的应用平台,监测用户是从哪个平台安装的。
二、为什么要多渠道打包
1. 统计用户安装APP来源知道多渠道的意义就不难理解多渠道打包主要是为了我们统计分析用的。所以,这样就很清楚了我最初的想法不是不行,而是不好,对今后的产品分析没有任何帮助。
2.批量修改生成的apk文件名根据运营给的命名规则,如果是一个个的右键-重命名,那15个还好,要真是有1000个,运营同事一定会拿刀找我的...而多渠道打包所有的都自动生成。
3.可更改包名如果有生成不同包名的需求,通过gradle就可以解决。
4.生成不同应用名称或图标有的时候你会在不同平台看到XX-小米版,XX-魅族版等等,或者beta版的图标和正式的不一样,其实代码还是那个代码,无非做点小小的改动,具体实现我们后面会说。
这是我所了解到的,可能还有很多我不知道的用途,欢迎大家在下面留言。
三、如何多渠道打包
多渠道打包网上大概有两种,一个是通过gradle,另一个是美团介绍的只打一个包,然后解压替换文件,两者比较美团的方法要更快,但是今天我们先不做介绍,如果想了解请看《Android多渠道打包飞一般的感觉》。。
1. 在AndroidManifest.xml中添加占位符一般都是像友盟,腾讯统计分析SDK中使用的方案,网上友盟的较多,我实际用的是腾讯分析所以就拿腾讯的来说(其实都一样)。首先,在AndroidManifest.xml的application标签里添加一个meta-data标签定义MTA_CHANNEL占位符,腾讯分析SDK会读取里面的value值传到后台,便于我们日后分析。
2. 修改
app
下的
build.gradle
文件,在
android
闭包中添加
productFlavors
属性配置占位符
<meta-data
android:name="MTA_CHANNEL"
android:value="${MTA_CHANNEL_VALUE}" />
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "com.aimerd.channel"
minSdkVersion 11
targetSdkVersion 21
versionCode 1
versionName "1.0.0"
multiDexEnabled true
}
buildTypes {
release {
// 不显示Log
buildConfigField "boolean", "LOG_DEBUG", "false"
//启用混淆代码的功能
minifyEnabled true
//压缩对齐生成的apk包
zipAlignEnabled true
//指定混淆规则,需要压缩优化的混淆要把proguard-android.txt换成proguard-android.txt
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//移除无用的资源文件
shrinkResources true
//启用multidex的支持
multiDexEnabled true
}
}
productFlavors
baidu {
manifestPlaceholders = [MTA_CHANNEL_VALUE: "baidu"]
}
_91 {
manifestPlaceholders = [MTA_CHANNEL_VALUE: "91"]
}
wandoujia {
manifestPlaceholders = [MTA_CHANNEL_VALUE: "wandoujia"]
}
xiaomi {
manifestPlaceholders = [MTA_CHANNEL_VALUE: "xiaomi"]
}
}
applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (variant.buildType.name.equals('release')) {
//生成apk名字的格式:Channel1.0.0_2016-06-22_baidu.apk
//可自定义自己想要生成的格式
def fileName = "Channel${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk"
output.outputFile = new File(outputFile.parent, fileName)
}
}
}
def releaseTime() {
return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.3'
compile 'com.android.support:multidex:1.0.1'
}