美团walle多渠道打包

前言

美团的walle打包方案是基于Android Signature V2 Schme 签名下的新一代渠道包打包神器,他通过在ApkSignNature Block 区块添加自定义的渠道信息来生成渠道包,从而提高了渠道包的生成效率。也就是说只需要编译打包一次,然后每个渠道复制一次,再往里面添加渠道信息。这样大大提高了打包的速率。
如果有想了此工具原理的同学,可以参考 新一代开源Android渠道包生成工具Walle

美团walle打包的方式

1.通过gradle进行集成(本文着重介绍)
2.通过命令行使用(命令行wiki

基于gradle 集成的方式

配置build.gradle
在位于项目的根目录 build.gradle 文件中添加Walle Gradle插件的依赖, 如下:

buildscript {
    dependencies {
        classpath 'com.meituan.android.walle:plugin:1.1.7'
    }
}

并在当前App的 build.gradle 文件中apply这个插件,并添加上用于读取渠道号的AAR

apply plugin: 'walle'

dependencies {
    compile 'com.meituan.android.walle:library:1.1.7'
}

配置插件

walle {
    // 指定渠道包的输出路径
    apkOutputFolder = new File("${project.buildDir}/outputs/channels");
    // 定制渠道包的APK的文件名称
    apkFileNameFormat = '${appName}-${packageName}-${channel}-${buildType}-v${versionName}-${versionCode}-${buildTime}.apk';
    // 渠道配置文件
    channelFile = new File("${project.getProjectDir()}/channel")
}

配置项具体解释:

apkOutputFolder:指定渠道包的输出路径, 默认值为new File("${project.buildDir}/outputs/apk")
channelFile:包含渠道配置信息的文件路径。 
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如下:image.png

生成/获取渠道信息

  • 获取渠道包
String channel = WalleChannelReader.getChannel(this.getApplicationContext());
  • 生成渠道包
    生成渠道包的方式是和assemble${variantName}Channels指令结合,渠道包的生成目录默认存放在 build/outputs/apk/,也可以通过walle闭包中的apkOutputFolder参数来指定输出目录
    用法示例:
    生成渠道包 ./gradlew clean assembleReleaseChannels
    支持 productFlavors ./gradlew clean assembleMeituanReleaseChannels
  • AS右侧点开Gradle工具栏,如下图所示,双击运行Task任务
    image.png
    生成的APK渠道包,可以根据Walle配置文件路径查找
    image.png

配合友盟统计的使用

友盟统计之前的多渠道统计方式是在AndroidManifast.xml文件中配合Gradle脚本productFlavors实现的多渠道信息集成的。如果使用walle,productFlavors不存在了,就算没有删除通过原有的获取渠道信息的方式获取到的渠道信息也不对了,所以需要动态去获取

  String channel = WalleChannelReader.getChannel(applicationContext);
  UMConfigure.init(mContext, Constants.UMENG_KEY, channel, UMConfigure.DEVICE_TYPE_PHONE, "");
参考文献:Android Signature V2 Scheme签名下的新一代渠道包打包神器
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小妖sc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值