android 渠道包 作用,谈谈我的Android多渠道打包方式

谈谈我的Android多渠道打包方式

概述

每当发新版本时,Android客户端会被分发到各个应用市场,比如应用宝,360手机助手,小米应用市场等。为了统计这些市场的效果(活跃数,下单数等),需要有一种方法来唯一标识它们。

给每一个应用市场设置一个channel ID,用来区分不同的应用市场;客户端访问API时会在请求参数中带上渠道号和设备信息,以便后台接下来计算不同渠道的效果。

根据渠道列表,在每次发版时,都会打包相对应的渠道包发布到对应的应用市场,下面是我项目中使用到的方式和一些工具。

gradle自带的productFlavor方式

在AndroidManifest.xml的< application >节点中添加如下< meta-data >元素,用来定义渠道的来源:

android:value="${CHANNEL_VALUE}" />

在app对应的build.gradle中配置productFlavor:

android {

defaultConfig {

manifestPlaceholders = [CHANNEL_VALUE: "x2"]

}

productFlavors {

x2 {}

x3 {}

x4 {}

x5 {}

x6 {}

x7 {}

x7 {}

x8 {}

x9 {}

x10 {}

}

productFlavors.all {

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

}

}

输出的APK文件名格式(可选项):

android.applicationVariants.all { variant ->

variant.outputs.each { output ->

def outputFile = output.outputFile

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

File outputDirectory = new File(outputFile.parent);

def fileName

if (variant.buildType.name == "release") {

fileName = "lrzm${variant.productFlavors[0].name}.apk"

} else {

fileName = "lrzm${variant.productFlavors[0].name}_beta.apk"

}

output.outputFile = new File(outputDirectory, fileName)

}

}

}

app下build.gradle配置截图:

22f9db075ed14373d881be7d89aa98e2.png

配置就完成了,遍历渠道列表,逐个替换并打包:

2189c8b53cafe29db3df366ad31b2659.png

程序启动时读取渠道号:

private String getChannel(Context context) {

try {

PackageManager pm = context.getPackageManager();

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

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

} catch (PackageManager.NameNotFoundException ignored) {

}

return "";

}

Packer-Ng

新一代多渠道打包神器,github 地址

简直就是神器,作者说 【100个渠道包只需10秒】。其实真的有这么快!

修改项目根目录的 build.gradle :

buildscript {

repositories {

mavenCentral()

}

dependencies{

classpath 'com.mcxiaoke.gradle:packer:1.0.+'

}

}

修改Android项目的 build.gradle :

apply plugin: 'packer'

创建多渠道文件markets.txt

7ee3456a0b4bb1aaef4fedc8fc90c2bf.png

渠道打包的命令行参数格式示例(在项目根目录执行):

./gradlew -Pmarket=markets.txt clean archiveApkRelease

bcd2987590ae0183ba17ba2733c82b9f.png

其他配置可参考github上的使用说明。

最后打包运行:

00227fc32be31597db9fc8537cb48b92.png

速度就比打包单个apk慢一点点,看下结果:

f03aa4d31f58e6458c13e03684fabc1d.png

输出的名字有进行了配置,所以apk的名字很长。

archiveNameFormat = ‘${appPkg}-${flavorName}-${buildType}-v${versionName}-${versionCode}-${fileMD5}’

其他工具

360加固保

腾讯云·乐固

在使用这两个工具加固应用,他们都有多渠道打包这个辅助功能,貌似360加固保多渠道支持的多一些。

总结

对于多渠道打包,如果能直接修改apk的渠道号,而不需要再重新签名能节省不少打包的时间。幸运的是我们找到了这种方法。直接解压apk,解压后的根目录会有一个META-INF目录,如下图所示:

apk_packaging2.jpg

如果在META-INF目录内添加空文件,可以不用重新签名应用。因此,通过为不同渠道的应用添加不同的空文件,可以唯一标识一个渠道。

也看来很多相关的文章,目前推荐还是Packer-Ng方式,节省不少的时间,可以玩玩!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值