转载请说明,本文来自: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包、资源文件的时候,又应该怎么样呢有缘见下次分析

Android 多渠道 打包 —— walle 和 gradle 对比 (一)相关推荐

  1. android多渠道打包签名配置,Gradle For Android(二) 多渠道打包与签名配置

    <Gradle For Android(二) 多渠道打包与签名配置> 转载请注明来自 傻小孩b(gold.xitu.io/user/57e089-喜欢的能够关注我,不按期总结文章!您的支持 ...

  2. android 渠道打包工具,Walle —— Android多渠道打包神器

    图片只为致敬斯坦·李 Walle为了android多渠道打包而生的工具,废话不多说直接上用法 配置build.gradle 在项目的build.gradle文件中添加walle插件依赖 depende ...

  3. 几个常见的Android多渠道打包工具介绍

    Android项目开发完,多途径打包是必不可少的环节.其原理在于,通过在Android安卓包中增加不同的标识,区别各个途径下载来源,用于计算App在不同使用市场或途径合作中的各项数据. 工欲善其事,必 ...

  4. android 渠道方案,Android多渠道打包时获取当前渠道的方法

    作为Androidapp,发布多个分发平台是常规操作.然后,有时由于个渠道面对的用户不同,或平台审核标准不同,需要在各渠道使用不同的业务逻辑,这就需要根据渠道使用选择差异化代码. 这里把简单的代码记一 ...

  5. android app 马甲包,关于Android多渠道打包和马甲包问题

    多渠道打包 最近项目用到多渠道打包,虽然网上又很多资料, 但是我在实际使用的过程中还是遇到了些问题, 在这里记录下,希望能帮助到你! 首先配置你的渠道信息 : 配置渠道信息 这个时候渠道使用的签名配置 ...

  6. Android多渠道打包配置

    Android多渠道打包配置 之前为了在同一台手机能同时安装测试包和生产包,采用配置buildType的方式来实现,相比于flavor,感觉是挺轻量又恰到好处的配置,具体见通过配置applicatio ...

  7. Android 多渠道打包配置,亲测,全集

    Android 多渠道打包配置 前言 为统计渠道数据和利用渠道进行操作,需进行渠道打包.本文目旨在熟悉原生gradle多渠道打包的方式,了解android基本的gradle构建配置,熟悉代码构建目录, ...

  8. android 多渠道资源,Android多渠道打包

    Android多渠道打包 概述 每当发新版本时,Android客户端会被分发到各个应用市场,比如豌豆荚,360手机助手等.为了统计这些市场的效果(活跃数,下单数等),需要有一种方法来唯一标识它们.客户 ...

  9. android 打包assets,Android多渠道打包(Assets处理)

    最近在项目中遇到apk定制化打包需求,所以就研究多渠道打包. build.gradle 中部分配置代码如下 defaultConfig{ applicationId "com.hz.epol ...

最新文章

  1. 吴恩达新书《Machine Learning Yearning》完整中文版 PDF 下载!
  2. C++中接口与实现分离的技术
  3. 最优化——线性规划总结1(线性规划标准型,规范型,顶点)
  4. Docker 内程序时间设置,很重要
  5. 信息学奥赛一本通(1164:digit函数)
  6. java http 包_java http请求
  7. [转载]Java并发编程:深入剖析ThreadLocal
  8. 【华为云技术分享】打卡APIG服务专享版,打造全栈API治理方案
  9. 9.23 最后45天
  10. struts2 中 constant标签
  11. sklearn之PCA(主成分分析)
  12. windows7 上搭建NFS服务器--haneWIN
  13. 程序员的macOS系列:精选Mac App
  14. [uniapp] 小程序禁止分享到朋友圈,但是不禁止转发给好友
  15. 第7章 区块链开发平台:超级账本
  16. 高配置服务器组装电脑,小白DIY装机需睁大眼睛!点评几款网购组装电脑主机配置单...
  17. 程序人生 - 王者荣耀隐身设置,不让好友看到在线状态
  18. 关键点检测之直接回归(逐行手撕Pytorch)
  19. 个人用户永久免费,可自动升级版Excel插件,使用VSTO开发,Excel催化剂功能第13波-一键生成带图片自由报表...
  20. 读取excel表格内容,并写入到word文档中

热门文章

  1. Java选择题日常记录——Day1—Day15
  2. linux 运行apj,Linux中设置服务自启动的三种方式
  3. (一)编译Ardupilot得到apj固件-bug汇总-2021-07
  4. 成为生意人的7种能力(摘于一个成功人士的述说)
  5. 前端C3属性模仿支付宝咻一咻
  6. 如何用Robomaster C610/820R电调组成伺服电机控制系统(附STM32F407源码实现及分析)
  7. 利用函数“逆序字符串”的三种解法
  8. 基于惯性传感器的上肢康复训练评估
  9. 硬件基础之STM32最小系统
  10. win7此更新不适用计算机,更新win7提示“此更新不适用于您的计算机”