Android 多渠道 打包 —— walle 和 gradle 对比 (一)


转载请说明,本文来自:https://blog.csdn.net/shijianduan1/article/details/86681256


前言:

  • 在看学习资料的时候,看见美团的打包机制很厉害,而android 原生的虽然功能很强大,但是当渠道包多了之后,打包速度很慢。所以这里就手动学习验证下。

条件:

  • 新建项目,没有其他代码
  • 54个渠道,打包debug和release两个,一共108个apk

Gradle方式:

  • 耗时26m10s
    在这里插入图片描述

美团方式:

  • 和 greendao,Tinker 都有点类似,
  1. 项目根目录下build.gradle 添加依赖库
    dependencies {
       classpath 'com.android.tools.build:gradle:3.3.0'
       //美团 瓦利打包
       classpath 'com.meituan.android.walle:plugin:1.1.6'
   }
  1. 在app目录下,新建walle_channel.gradle文件(根据GitHub文档直接拷贝)
//美团瓦利打包
apply plugin: 'walle'

walle {
  /*//可用的变量
  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 名
  */

  // 指定渠道包的输出路径
  apkOutputFolder = new File("${project.buildDir}/outputs/channels");
  // 定制渠道包的APK的文件名称
  apkFileNameFormat = '${appName}-${packageName}-${channel}-${buildType}-v${versionName}-${versionCode}-${buildTime}.apk';
  // 渠道配置文件
  channelFile = new File("${project.getProjectDir()}/channel")
}
  1. 在app目录下,新建 channel 文件(创建的时候没有后缀名,就字体加粗的这个。这个文件是要打包的哪些渠道)
meituan # 美团
samsungapps #三星
hiapk
anzhi
xiaomi # 小米
91com
gfan
appchina
nduoa
3gcn
mumayi
10086com
wostore
189store
lenovomm
hicloud
meizu
wandou
# Google Play
# googleplay
# 百度
baidu
#
# 360
360cn
#
# 应用宝
myapp
  1. 在app目录的build.gradle下添加
apply from: 'walle_channel.gradle'
dependencies {
  implementation 'com.meituan.android.walle:library:1.1.6'
}
  1. 代码里读取

    String channel = WalleChannelReader.getChannel(this.getApplicationContext());

  2. 最后 执行:最后 执行:
    可能会在build的时候,遇见的V2打包的问题。见:Android - 美团 walle报错:Plugin requires ‘APK Signature Scheme v2 Enabled’ for smart1Release.

  • 简易方法:通常是全部渠道生成使用。 在右侧gradle, app - tasks - package, 选择需要的选项。 在这里插入图片描述
  • 命令方法:
    多渠道:

./gradlew clean assembleReleaseChannels -PchannelList=meituan,dianping

额外信息:

./gradlew clean assembleReleaseChannels -PchannelList=meituan -PextraInfo=buildtime:20161212,hash:xxxxxxx
注意: 这里的extraInfo以key:value形式提供,多个以,分隔

附加:
渠道信息的读写,需要额外依赖两个类。

  1. 读取:

    依赖:

    dependencies {
     	implementation 'com.meituan.android.walle:payload_reader:1.1.6'
     }
    
    • ChannelReader:读取Walle内置id对应的信息,一般用来存放渠道和额外信息。
    • PayloadReader: 读取自定义id对应的信息。
  2. 写入:
    依赖:

    dependencies {
     	implementation 'com.meituan.android.walle:payload_writer:1.1.6'
     }
    
    • ChannelWriter:向Walle内置id对应区域写入/移除信息,一般存放渠道和额外信息。额外信息key相同时覆盖写入。
    • PayloadWriter: 自定义id写入,id相同时覆盖。 注意:请确保Android未使用此id
  3. 非Android系统,使用上述:需要添加依赖:(减少Android方法数)

compile ‘org.json:json:20080701’


总结:

     如果你注意到上述截图的话,可以发现,我使用walle 打包 54个版本,仅12s;
 而 gradle原生项目打包108个apk 则是 26min。
	结果很明显,walle打包速度很快。

	但是,这仅仅是渠道打包,仅修改了一个变量值(渠道名),那么当涉及到 代码、引用jar包、资源文件的时候,又应该怎么样呢
	有缘见下次分析
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值