2024年Android最全Bugly Android热更新总结篇,安卓面试准备

最后

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

上面分享的百度、腾讯、网易、字节跳动、阿里等公司2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。

【Android思维脑图(技能树)】

知识不体系?这里还有整理出来的Android进阶学习的思维脑图,给大家参考一个方向。

【Android高级架构视频学习资源】

**Android部分精讲视频领取学习后更加是如虎添翼!**进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

有很多开发者问,Bugly跟Tinker有什么不同,它们之间有什么关系呢?这里正式把这个问题说清楚:

Tinker是一个开源框架,而Bugly热更新SDK是基于这套框架进行的能力封装,提供接口方便开发者能够快速实现热更新能力。而Tinker只是开源了客户端代码,并没有开源补丁管理后台,我们Bugly也提供了补丁管理后台,所以开发者只需要接入我们SDK就无需自己搭建补丁管理后台。所以说Bugly提供的是一整套热更新能力解决方案,而不仅仅是客户端的能力。

这里还需要提及一些技术实现,Tinker补丁的生成是通过Gradle插件来实现的,整个打补丁的过程对开发者来说是透明的,Bugly在Tinker插件基础上开发了TinkerSupport插件来生成符合我们平台规则的补丁,主要就是在TinkerPatch插件生成的补丁插入一个配置文件-YAPATCH.MF

这里写图片描述

如何在实际开发中使用热更新能力


很多开发者在使用热更新能力的时候,测试的时候还好,但一到正式使用但时候就有点蒙圈,这也是对热更新不够理解的一种表现,下面笔者针对一些需要开发者去理解的概念。

基线版本vs补丁版本

在使用插件打补丁的时候需要我们去指定基线版本,那么我们需要怎么去理解这个概念呢,简单来说就是你已经上线版本的apk,而这个apk能打补丁的前提是已经集成过热更新SDK。

无论使用什么热更新方案,都是基于某一个版本进行打补丁,而被打补丁的版本就是基线版本。

在使用tinker-support插件进行打补丁我们需要配置以下几个内容:

  • 基线版本Apk

  • 基线版本的mapping文件

  • 基线版本的R文件

最佳实践就是你通过持续集成系统发版前编译生成以上几个文件,然后对代码版本库进行打tag,如果线上版本出现问题就通过tag来拉取代码,将持续集成系统生成对基线版本对应的三个文件下载放到工程的某个目录,然后对插件进行参数配置,接着就是通过插件进行打补丁包,最后将补丁包上传到Bugly平台进行下发。

补丁版本就没啥好说的,就是针对基线版本修复问题到版本,它也是需要走编译打包流程的,因为基线版本需要跟补丁版本进行比较才能差分生成补丁包。

关于tinker-support打补丁配置如下图所示:

这里写图片描述

tinkerId到底有什么作用,每次打补丁都需要修改?

前面说到打补丁的时候会在补丁基础上插入一个配置文件— YAPATCH.MF,里面有两个配置参数:

From:表示你是基于某个基线版本打的补丁包

To: 表示的是你当前打补丁的版本

为什么要这么设计? 主要是因为每次编译会通过插件在AndroidManifest文件插入TINKER_ID的meta-data,用来唯一标识当前版本,所以你每次打包的时候都是需要修改tinkerId,我们在运行基线版本时会将tinkerId与当前版本号进行一个关联一起上报到我们后台,打补丁的时候插件会读取基线版本的tinkerId写到From字段,当前版本写到To字段,上传补丁到管理后台的时候前端会通过解析配置文件读取From字段,然后去后台匹配tinkerId对应的版本,这也是为什么如果你上传补丁From字段的tinkerId没有上报过联网就匹配不到具体版本。

为什么需要重启补丁才能够生效?

有很多同学对Tinker热更新方案为什么要重启两次才能够生效,这里需要大家先了解一下Tinker关于合成补丁的原理,Tinker采用的是ClassLoader方案,这种方案具有具有较高的稳定性和兼容性。我们先看下面这张图:

这里写图片描述

可以看到补丁包是基线版本和补丁版本差分的结果,但合成补丁包的时候跟Qzone方案是有区别的,tinker是采用全量合成dex来实现热更新,前者会将补丁包单独做成一个dex插入到dexElements最前面,而后者是全量合成dex插入到dexElements最前面。熟悉ClassLoader机制的同学应该知道,加载类的时候会去遍历dex文件,并且会优先加载排在前面的dex,应用启动的时候加载的就是已经修复问题的dex文件。这里有个潜规则就是:

如果已经被加载过的类,就不会重复被加载,这就解释了为什么要杀掉进程重启app才能够修复问题。

那为什么Bugly热更新有时候需要重启两次才能够生效呢,因为这里涉及到请求策略,下载补丁的过程,如果应用启动的时候没有检测到补丁存在就不会下载补丁,我们并不会实时去检测补丁的存在,所以只有重启的时候才会去检查补丁,检查到补丁就会下载并自动合成,合成补丁之后还需要再次重启才会生效,这也就是为什么需要重启两次。

渠道包怎么使用热更新?

多渠道热更新是一个坑,很多同学在接入Bugly热更新之后就会问,怎么支持到多渠道?这里有两种情况,一种是通过productFlavors来打渠道包,这种方式没有办法做到一个补丁修复所有渠道,因为它打出来的包dex的crc值都是不一致的,所以只能一个渠道一个补丁对应修复问题,但这个对于需要打很多渠道包的app开发者来说就是一个灾难,因为需要忍受漫长的打包过程还要逐个上传补丁包。这个肯定是不符合我们的需求的,所以我们推荐通过多渠道工具来打渠道包,具体参考笔者之前的一篇文章:Bugly多渠道热更新解决方案

这里要提一点,要基于tinker插件打出来的基准包来打渠道。

加固包怎么使用热更新?

加固可以说是一个巨坑,tinker 1.7.5版本及以前是支持回退QZone方案来支持加固,但因为市面上没有统一的加固方案会引入一些更加严重的问题,所以后面tinker官方将加固支持去掉了,但很多产品都接入了加固,如果用了加固就不能再使用热更新,所以后面Tinker重新对市面上的加固方案重新做了兼容,但需要在1.7.8版本以上才支持。

实际应用你需要做以下操作:

  1. 开启加固模式,将isProtectedApp设置为true
  1. 将打出来的基线版本上传到加固平台进行加固并重签名
  1. 打补丁是基于非加固的基线版本进行的

用一张图解释Bugly热更新


这里写图片描述

完整测试流程

  1. 打基准包安装并上报联网(注:填写唯一的tinkerId)

  2. 对基准包的bug修复(可以是Java代码变更,资源的变更)

  3. 修改基准包路径、修改补丁包tinkerId、mapping文件路径(如果开启了混淆需要配置)、resId文件路径

  4. 执行buildTinkerPatchRelease打Release版本补丁包

  5. 选择app/build/outputs/patch目录下的补丁包并上传(注:不要选择tinkerPatch目录下的补丁包,不然上传会有问题)

面试复习笔记:

这份资料我从春招开始,就会将各博客、论坛。网站上等优质的Android开发中高级面试题收集起来,然后全网寻找最优的解答方案。每一道面试题都是百分百的大厂面经真题+最优解答。包知识脉络 + 诸多细节。
节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

《960页Android开发笔记》

《1307页Android开发面试宝典》

包含了腾讯、百度、小米、阿里、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率。

《507页Android开发相关源码解析》

只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。

真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值