Android 多渠道 打包 —— walle 和 gradle 对比 (一)
转载请说明,本文来自:https://blog.csdn.net/shijianduan1/article/details/86681256
前言:
- 在看学习资料的时候,看见美团的打包机制很厉害,而android 原生的虽然功能很强大,但是当渠道包多了之后,打包速度很慢。所以这里就手动学习验证下。
条件:
- 新建项目,没有其他代码
- 54个渠道,打包debug和release两个,一共108个apk
Gradle方式:
- 耗时26m10s
美团方式:
- 和 greendao,Tinker 都有点类似,
- 项目根目录下build.gradle 添加依赖库
dependencies {classpath 'com.android.tools.build:gradle:3.3.0'//美团 瓦利打包classpath 'com.meituan.android.walle:plugin:1.1.6'}
- 在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")
}
- 在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
- 在app目录的build.gradle下添加
apply from: 'walle_channel.gradle'
dependencies {implementation 'com.meituan.android.walle:library:1.1.6'
}
代码里读取
String channel = WalleChannelReader.getChannel(this.getApplicationContext());
最后 执行:最后 执行:
可能会在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形式提供,多个以,分隔
附加:
渠道信息的读写,需要额外依赖两个类。
读取:
依赖:
dependencies {implementation 'com.meituan.android.walle:payload_reader:1.1.6'}
- ChannelReader:读取Walle内置id对应的信息,一般用来存放渠道和额外信息。
- PayloadReader: 读取自定义id对应的信息。
写入:
依赖:dependencies {implementation 'com.meituan.android.walle:payload_writer:1.1.6'}
- ChannelWriter:向Walle内置id对应区域写入/移除信息,一般存放渠道和额外信息。额外信息key相同时覆盖写入。
- PayloadWriter: 自定义id写入,id相同时覆盖。 注意:请确保Android未使用此id
非Android系统,使用上述:需要添加依赖:(减少Android方法数)
compile ‘org.json:json:20080701’
总结:
如果你注意到上述截图的话,可以发现,我使用walle 打包 54个版本,仅12s;而 gradle原生项目打包108个apk 则是 26min。结果很明显,walle打包速度很快。但是,这仅仅是渠道打包,仅修改了一个变量值(渠道名),那么当涉及到 代码、引用jar包、资源文件的时候,又应该怎么样呢有缘见下次分析
Android 多渠道 打包 —— walle 和 gradle 对比 (一)相关推荐
- android多渠道打包签名配置,Gradle For Android(二) 多渠道打包与签名配置
<Gradle For Android(二) 多渠道打包与签名配置> 转载请注明来自 傻小孩b(gold.xitu.io/user/57e089-喜欢的能够关注我,不按期总结文章!您的支持 ...
- android 渠道打包工具,Walle —— Android多渠道打包神器
图片只为致敬斯坦·李 Walle为了android多渠道打包而生的工具,废话不多说直接上用法 配置build.gradle 在项目的build.gradle文件中添加walle插件依赖 depende ...
- 几个常见的Android多渠道打包工具介绍
Android项目开发完,多途径打包是必不可少的环节.其原理在于,通过在Android安卓包中增加不同的标识,区别各个途径下载来源,用于计算App在不同使用市场或途径合作中的各项数据. 工欲善其事,必 ...
- android 渠道方案,Android多渠道打包时获取当前渠道的方法
作为Androidapp,发布多个分发平台是常规操作.然后,有时由于个渠道面对的用户不同,或平台审核标准不同,需要在各渠道使用不同的业务逻辑,这就需要根据渠道使用选择差异化代码. 这里把简单的代码记一 ...
- android app 马甲包,关于Android多渠道打包和马甲包问题
多渠道打包 最近项目用到多渠道打包,虽然网上又很多资料, 但是我在实际使用的过程中还是遇到了些问题, 在这里记录下,希望能帮助到你! 首先配置你的渠道信息 : 配置渠道信息 这个时候渠道使用的签名配置 ...
- Android多渠道打包配置
Android多渠道打包配置 之前为了在同一台手机能同时安装测试包和生产包,采用配置buildType的方式来实现,相比于flavor,感觉是挺轻量又恰到好处的配置,具体见通过配置applicatio ...
- Android 多渠道打包配置,亲测,全集
Android 多渠道打包配置 前言 为统计渠道数据和利用渠道进行操作,需进行渠道打包.本文目旨在熟悉原生gradle多渠道打包的方式,了解android基本的gradle构建配置,熟悉代码构建目录, ...
- android 多渠道资源,Android多渠道打包
Android多渠道打包 概述 每当发新版本时,Android客户端会被分发到各个应用市场,比如豌豆荚,360手机助手等.为了统计这些市场的效果(活跃数,下单数等),需要有一种方法来唯一标识它们.客户 ...
- android 打包assets,Android多渠道打包(Assets处理)
最近在项目中遇到apk定制化打包需求,所以就研究多渠道打包. build.gradle 中部分配置代码如下 defaultConfig{ applicationId "com.hz.epol ...
最新文章
- 吴恩达新书《Machine Learning Yearning》完整中文版 PDF 下载!
- C++中接口与实现分离的技术
- 最优化——线性规划总结1(线性规划标准型,规范型,顶点)
- Docker 内程序时间设置,很重要
- 信息学奥赛一本通(1164:digit函数)
- java http 包_java http请求
- [转载]Java并发编程:深入剖析ThreadLocal
- 【华为云技术分享】打卡APIG服务专享版,打造全栈API治理方案
- 9.23 最后45天
- struts2 中 constant标签
- sklearn之PCA(主成分分析)
- windows7 上搭建NFS服务器--haneWIN
- 程序员的macOS系列:精选Mac App
- [uniapp] 小程序禁止分享到朋友圈,但是不禁止转发给好友
- 第7章 区块链开发平台:超级账本
- 高配置服务器组装电脑,小白DIY装机需睁大眼睛!点评几款网购组装电脑主机配置单...
- 程序人生 - 王者荣耀隐身设置,不让好友看到在线状态
- 关键点检测之直接回归(逐行手撕Pytorch)
- 个人用户永久免费,可自动升级版Excel插件,使用VSTO开发,Excel催化剂功能第13波-一键生成带图片自由报表...
- 读取excel表格内容,并写入到word文档中
热门文章
- Java选择题日常记录——Day1—Day15
- linux 运行apj,Linux中设置服务自启动的三种方式
- (一)编译Ardupilot得到apj固件-bug汇总-2021-07
- 成为生意人的7种能力(摘于一个成功人士的述说)
- 前端C3属性模仿支付宝咻一咻
- 如何用Robomaster C610/820R电调组成伺服电机控制系统(附STM32F407源码实现及分析)
- 利用函数“逆序字符串”的三种解法
- 基于惯性传感器的上肢康复训练评估
- 硬件基础之STM32最小系统
- win7此更新不适用计算机,更新win7提示“此更新不适用于您的计算机”