友盟 android渠道打包工具,多渠道打包的多种方案:友盟、Walle、VasDolly、三方工具...

前言

为什么要多渠道打包?

当前Android市场渠道多样化,不仅仅限制于小米、华为、百度等开发平台市场。像今日头条、百度广告等渠道也是有一种,并且需求量更大。所以有时需要百个以上的渠道包,这样打下去不知猴年马月能打完,鲁迅先生曾经说过:不会偷懒的程序员不是好的程序员。

3906acba482c

image

下面就说说几种多渠道打包的方式。

第一种:友盟多渠道打包

友盟做为三方平台中的佼佼者,有着很多的优秀的轮子。友盟统计能够检测出APK下载的渠道,并进行统计,根据优秀的渠道对其下一步的投资。

不多说,直接上代码:

1、首先是AndroidManifest中添加:

android:name="UMENG_CHANNEL"

android:value="${UMENG_CHANNEL_VALUE}"

2、其次在build.gradle中添加,baidu {}为指定渠道名称简写:

productFlavors {

baidu {}

xiaomi {}

qihu360 {}

yingyongbao {}

huawei {}

}

productFlavors.all {

flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]

}

3、在APK后面加上版本号方法:

Android Studio 2.3版本:

applicationVariants.all { variant ->

variant.outputs.each { output ->

def outputFile = output.outputFile

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

def fileName = "driver_${variant.productFlavors[0].name}_v${defaultConfig.versionName}.apk"

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

}

}

}

Android Studio 3.0版本:

flavorDimensions 'api' productFlavors {

... }

android.applicationVariants.all { variant ->

variant.outputs.all {

outputFileName = "driver_${variant.productFlavors[0].name}_v${variant.versionName}.apk"

}

}

4、下面我在第一次开启APP的介绍界面添加获取渠道号的方法,并且上传到参数。

private String getChannel() {

try {

PackageManager pm = getPackageManager();

ApplicationInfo appInfo = pm.getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);

return appInfo.metaData.getString("UMENG_CHANNEL");

} catch (PackageManager.NameNotFoundException ignored) {

}

return "";

}

5、打包上线:

3906acba482c

image

缺点:很明显,缺点就是既繁琐又恶心。

第二种:美团多渠道打包Walle

在Android 7.0推出了新的应用签名方案APK Signature Scheme v2后,之前快速生成渠道包的方式已经行不通了。于是推出了最新的渠道包工具Walle(文章地址)

新一代渠道包生成工具完全是基于ZIP文件格式和APK Signing Block存储格式而构建,基于文件的二进制流进行处理,有着良好的处理速度和兼容性,能够满足不同的语言编写的要求, 该工具主要有四部分组成:

1、用于写入ID-value信息的Java类库

2、Gradle构建插件用来和Android的打包流程进行结合

3、用于读取ID-value信息的Java类库

4、用于供com.android.application使用的读取渠道信息的AAR

这样,每打一个渠道包只需复制一个APK,然后在APK中添加一个ID-value即可,这种打包方式速度非常快,对一个30M大小的APK包只需要100多毫秒(包含文件复制时间)就能生成一个渠道包,而在运行时获取渠道信息只需要大约几毫秒的时间。

基本操作:

1、配置根build.gradle:

buildscript {

dependencies {

classpath 'com.meituan.android.walle:plugin:1.1.6'

}

}

2、配置App build.gradle:

applyplugin:'walle'

dependencies {

compile'com.meituan.android.walle:library:1.1.6'

}

3、配置插件

walle {

//指定渠道包的输出路径

apkOutputFolder=newFile("${project.buildDir}/outputs/channels");

//定制渠道包的APK的文件名称

apkFileNameFormat='${appName}-${packageName}-${channel}-${buildType}-v${versionName}-${versionCode}-${buildTime}.apk';

//渠道配置文件

channelFile=newFile("${project.getProjectDir()}/channel")}

配置项具体解释:

apkOutputFolder:指定渠道包的输出路径, 默认值为new File("${project.buildDir}/outputs/apk")

apkFileNameFormat:定制渠道包的APK的文件名称, 默认值为'${appName}-${buildType}-${channel}.apk'

可使用以下变量:

projectName - 项目名字

appName - App模块名字

packageName - applicationId (App包名packageName)

buildType - buildType (release/debug等)

channel - channel名称 (对应渠道打包中的渠道名字)

versionName - versionName (显示用的版本号)

versionCode - versionCode (内部版本号)

buildTime - buildTime (编译构建日期时间)

fileSHA1 - fileSHA1 (最终APK文件的SHA1哈希值)

flavorName - 编译构建 productFlavors 名

channelFile:包含渠道配置信息的文件路径。 具体内容格式详见:[渠道配置文件示例](https://github.com/Meituan-Dianping/walle/blob/master/app/channel),支持使用#号添加注释。

4、获取渠道信息:

Stringchannel=WalleChannelReader.getChannel(this.getApplicationContext());

5、生成渠道包:

在Terminal命令行中输入:

./gradlew clean assembleReleaseChannels

写的有些流水账了,最好的博文就是官方文档

第三种:腾讯开源的多渠道VasDolly

第四种:三方打包工具(推荐)

使用方法:

1、拷贝需要打包的APK到根目录

2、增加或者修改channel文件中的渠道列表

3、运行publish.exe文件

代码设置:

compile 'com.meituan.android.walle:library:1.0.5'

ChannelInfo channelInfo = WalleChannelReader.getChannelInfo(getApplicationContext());

String channelName = channelInfo.getChannel(); (渠道名称)

Map extraInfo = channelInfo.getExtraInfo(); (额外信息)

速度极快,简单方便,从此爱上打包

打包方法多种多样,也大同小异,重要的是明白其中的原理,对Android签名和ZIP文件的格式的深入了解,值得学习和反思。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值