首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Bugly 多渠道热更新解决方案

Bugly 多渠道热更新解决方案

作者头像
腾讯Bugly
发布于 2018-03-23 08:38:11
发布于 2018-03-23 08:38:11
1.6K00
代码可运行
举报
文章被收录于专栏:腾讯Bugly的专栏腾讯Bugly的专栏
运行总次数:0
代码可运行

Gradle使用productFlavors打渠道包的痛

有很多同学可能会采用配置productFlavors来打渠道包,主要是它是原生支持,方便开发者输出不同定制版本的apk,举个例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
android {
    ...

    defaultConfig {
        minSdkVersion 8
        versionCode 10
    }

    productFlavors {
        flavor1 {
            packageName "com.example.flavor1"
            versionCode 20
        }

        flavor2 {
            packageName "com.example.flavor2"
            minSdkVersion 14
        }
    }
}

这样就可以输出两个定制的apk,不同包名,版本号也不同。 但是,如果用它来打渠道包是一个非常低效的做法,因为它每一次都会走编译流程,你想一下如果每打一个渠道包就要走一下编译流程,100个渠道包那得多慢。

那如果你能忍受这么低效打渠道包的方式,那回到本文焦点,我先问个问题:“如果你要针对多渠道进行打补丁,你应该怎么做?”

你可能会回答,那就针对不同的渠道包进行打补丁。没错,这个确实行得通,Bugly也是支持以这种方式进行打补丁,tinker-support插件会为不同渠道包插入不同的TINKER_ID, 唯一标识当前版本的渠道包,我们可以看下gradle打多渠道补丁的配置:

上面的示例只是配置了两个渠道,如果你配置超过5个的话,那么就意味着你要一个补丁,一个补丁上传到Bugly补丁管理后台,况且我们也只允许同时下发5个版本的补丁。这里提一下为什么要上传所有渠道的补丁,因为通过productFlavors配置,会修改buildConfig类中的FLAVOR字段,这会导致生成的不同渠道包的dex是不一样的,所以只能针对具体渠道进行打补丁。这就非常的尴尬了,那怎么办呢?有没有版本通过一个补丁就能够修复所有渠道,答案是:有的,但前提是你要保证所有渠道包代码是一致的。

通过多渠道打包框架快速打多渠道包

这里推荐使用walle来打多渠道包,新一代多渠道打包神器。

通过walle或者类似的打包工具就不会改变dex的结构,只是修改APK Signature Block来添加自定义的渠道信息来生成渠道包。

配置示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 多渠道使用walle示例(注:多渠道使用)

apply from: 'multiple-channel.gradle'

创建multiple-channel.gradle,内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apply plugin: 'walle'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")
}

创建channel配置:

命令行打多渠道包:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./gradlew clean assembleReleaseChannels

输出结果如下:

ok,到此已经实现快速打多渠道包了。

如何获取渠道信息?

如果你想获取渠道信息进行一些统计的分析,可以按照以下方式(具体参考walle):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dependencies {
    compile 'com.meituan.android.walle:library:1.1.3'
}

在代码中获取渠道信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
String channel = WalleChannelReader.getChannel(this.getApplicationContext());

如果你已经集成了Bugly的异常上报,你就可以通过以下方式来塞入渠道信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
String channel = WalleChannelReader.getChannel(getApplication());
Bugly.setAppChannel(getApplication(), channel);

// 这里实现SDK初始化,appId替换成你的在Bugly平台申请的appId
Bugly.init(getApplication(), "YOUR_APP_ID", true);

这样我们就可以按渠道维度来统计你们app的Crash数据了。

一个补丁修复所有渠道

重头戏,总是留在最后。 在打渠道包的过程,因为会走编译流程,热更新插件也会在bakApk生成对应的基线版本,这个跟普通打包就没有差别了:

只需要上传补丁包到补丁管理后台,然后下发即可。

笔者随便挑了三个渠道分别安装到不同设备,均成功打上补丁:

ok,基本上我们的需求就已经实现啦,妈妈再也不用担心我加班加点上传补丁包了。

总结

Bugly目前同时支持两种方式进行渠道包的热更新:

  • productFlavors方式打多渠道包
  • 快速打渠道包工具(Gradle)

笔者是推荐使用第二种方式,不仅能够快速打包,也能够轻松实现一个补丁修复所有渠道。

如果大家对以上有什么疑问的话,可以在下面留言,我们共同探讨下。


如果您觉得我们的内容还不错,就请转发到朋友圈,和小伙伴一起分享吧~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-05-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯Bugly 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【Android】Walle多渠道打包&Tinker热修复
Walle 介绍 Walle(瓦力):Android Signature V2 Scheme签名下的新一代渠道包打包神器。 瓦力通过在Apk中的APK Signature Block区块添加自定义的渠道信息来生成渠道包,从而提高了渠道包生成效率,可以作为单机工具来使用,也可以部署在HTTP服务器上来实时处理渠道包Apk的升级网络请求。 ——来自 Walle 使用 使用Walle生成多渠道的速度是很快的,原来的项目打一个包就需要两分钟多,每次发布打7个包需要十几分钟。用了Walle后,7个包只要两分钟左右
Gavin-ZYX
2018/05/18
1.5K0
章鱼抓娃娃添加Bugly-Tinker热更新支持
Bugly热更新采用Tinker开源方案,官方文档如下: Bugly Android热更新使用指南 Bugly Android热更新详解
冰之角
2019/03/06
9000
【详细】Android热更新Bugly集成配置
上一篇文章说道tinker的热更新,可是少了点补丁包的管理,这一篇文章介绍的bugly就是增强版的,更加方便你集成tinker和包括了补丁包的后台管理。 为什么使用 Bugly 热更新?
ppjun
2018/09/05
1.1K1
【详细】Android热更新Bugly集成配置
Android热更新之微信Tinker集成(接入Bugly热更新)
最近公司项目中需要集成热更新功能,由于刚开始接入的时候踩了很多坑,所以现在记录一下集成的过程.
SoullessCoder
2019/08/07
2.1K0
Android热更新之微信Tinker集成(接入Bugly热更新)
Bugly热更新SDK你需要知道的一些事
Bugly出热更新SDK了? 没错,Bugly也出热更新SDK啦,2016.11.25号,我们Bugly也上线了Android版的热更新SDK,大家都知道这一年来热更新被无数次提起,各大厂自主研发的热更新方案层出不穷,下面就列举一些大家比较熟悉的一些热更新方案: 微信开源:Tinker 大众点评:Nuwa 阿里巴巴:Dexposed 阿里巴巴:AndFix 美团:Robust 各个方案的优劣性笔者就不在这里做过多讨论了,总的一句话没有最好的,只有最适合自己的。 我们Bugly也是出于高可用性的考虑,Tink
巫山老妖
2018/07/20
1.6K0
studio多渠道打包
由于国内Android市场众多渠道,为了统计每个渠道的下载及其它数据统计,就需要我们针对每个渠道单独打包,如果让你打几十个市场的包岂不烦死了,不过有了Gradle,这事就简单了。 友盟多渠道打包 废话不多说,以友盟统计为例,在AndroidManifest.xml里面会有这么一段: <meta-data android:name="UMENG_CHANNEL" android:value="Channel_ID" /> 里面的 Channel_ID 就是渠道标示。我们的目标就是在编译的时
xiangzhihong
2018/01/30
7850
Tinker-使用教程与原理分析(上)
前面我们讲解了AndFix的使用,这篇我们来讲解下微信的Tinker热修复,相比AndFix,Tinker的功能更加全面,更主要的是他支持gradle。他不仅做到了热修复更实现了“热更新”。既然他这么强大,下面我们就来了解他是如何使用的。
g小志
2018/09/11
1.9K0
Tinker-使用教程与原理分析(上)
Android 热更新 Tinker 集成配置【详细】
Tinker 是微信官方的 Android 热补丁解决方案,它支持动态下发代码、So 库以及资源,让应用能够在不需要重新安装的情况下实现更新。
ppjun
2018/09/05
1.7K0
Android 热更新 Tinker 集成配置【详细】
Android架构之路--热更新Tinker(上)
当前市面的热补丁方案有很多,其中比较出名的有阿里的 AndFix、美团的 Robust 以及 QZone 的超级补丁方案。但它们都存在无法解决的问题,这也是正是最后使用 Tinker 的原因。先看一张图对比:
conanma
2021/09/04
1.9K0
Android架构之路--热更新Tinker(下)
tinker官方文档推荐用walle或者packer-ng-plugin来辅助打渠道包。估计有不少同学用过,今天我想推荐另外一款多渠道打包的插件ApkMultiChannelPlugin,它作为Android Studio插件进行多渠道打包。 安装步骤:打开 Android Studio: 打开 Setting/Preferences -> Plugins -> Browse repositories 然后搜索 ApkMultiChannel 安装重启。 有不了解的同学,可以直接看它的文档。
conanma
2021/09/04
5230
【Android】热修复——Tinker(入门)
前言 不知你是否遇到这样的情况?千辛万苦上开发了一个版本,好不容易上线了,突然发现了一个严重bug需要进行紧急修复,怎么办?难道又要重新打包App、测试,发布新个版本?就为了修改一两行的代码? 莫慌,这种问题其实可以分分钟解决。如果你学会了这项黑科技——热修复。 在用户使用App的时候,不知不觉,这个Bug就被修复了。 莫慌 热修复:热修复(也称热补丁、热修复补丁,英语:hotfix)是一种包含信息的独立的累积更新包,通常表现为一个或多个文件。这被用来解决软件产品的问题(例如一个程序错误)。——维基
Gavin-ZYX
2018/05/18
3.4K3
微信热修复tinker初探
前言 Tinker简介 Tinker是微信官方的Android热补丁解决方案,它支持动态下发代码、So库以及资源,让应用能够在不需要重新安装的情况下实现更新。当然,你也可以使用Tinker来更新你的插件。 Tinker已知问题 1) Tinker不支持修改AndroidManifest.xml,Tinker不支持新增四大组件; 2) 由于Google Play的开发者条款限制,不建议在GP渠道动态更新代码 3) 在Android N上,补丁对应用启动时间有轻微的影响; 4) 不支持部分三
用户1665735
2018/06/20
2.1K1
AndroidStudio3.0多渠道打包:我用一行命令打出N个包
csdn: http://blog.csdn.net/k_bb_666
蜻蜓队长
2018/08/03
4210
AndroidStudio3.0多渠道打包:我用一行命令打出N个包
AndroidStudio多渠道打包
假如AndroidManifest.xml的 meta-data>CHANNEL 是渠道的标准
Javen
2018/08/21
9790
AndroidStudio多渠道打包
Gradle多渠道打包
国内Android应用市场品种太多,血统不纯,每次上线App都打包打到手软,上传上到吐血!好在我们有了Android studio和gradle,一条命令打包各种渠道版本App!
GitOPEN
2019/03/01
1.1K0
Android Studio 使用Gradle多渠道打包
我们都知道国内应用市场非常多,为了统计各个应用市场的app下载量和使用情况,我们需要多渠道的打包。如果一个一个的手动去打包岂不烦死了,要多麻烦就有多麻烦。这就要求我们学会使用Gradle进行多渠道打包。废话不多说了,直接进入正题吧! 第一步:配置AndroidManifest.xml 以友盟渠道为例,渠道信息一般都是写在 AndroidManifest.xml文件中,大约如下: <meta-data android:name="UMENG_CHANNEL" android:value="xiaomi" />
非著名程序员
2018/02/02
9950
Android 新一代多渠道打包神器
李涛
2017/04/21
6.5K2
Android 新一代多渠道打包神器
【Android】多渠道打包,其实可以更快
已不推荐本方法,多渠道打包请看【Android】Walle多渠道打包&Tinker热修复。 现状 多渠道打包,相信很同学都知道。在Android Studio中只要经过配置,就能打出对应市场的渠道包。打过包的同学可能都会有这样的感受:散热器疯狂地转、打包速度那叫一个慢。这时候除了无奈,还是无奈~~ 场景 (讲一个我现实中遇到的情况) 今天APP要发布,已经是晚上八点多。这时候功能已经测得差不多了,老大说可以打包了。美好的时光即将到来,打完包就可以回家了,这个点还能回家撸几把。想到这里就有点小激动 一共要
Gavin-ZYX
2018/05/18
1.2K0
相关推荐
【Android】Walle多渠道打包&Tinker热修复
更多 >
交个朋友
加入架构与运维工作实战群
高并发系统设计 运维自动化实践
加入架构与运维学习入门群
系统架构设计入门 运维体系构建指南
加入架构与运维趋势交流群
技术趋势前瞻 架构演进方向
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档