- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Android 热修复方案分析
绝大部分的APP项目其实都需要一个动态化方案,来应对线上紧急bug修复发新版本的高成本.之前有利用加壳,分拆两个dex结合DexClassLoader实现了一套全量更新的热更方案.实现原理在这篇博客中有分解.因为这套方案是在Java端实现,并且是全量更新所以兼容性较好,成功率较高.但是在线上跑了几个月之后就碰到了瓶颈,因为随着业务的增长分拆过之后的dex文件方法数也超过65535个,更换拆包方案的话维护成本太高.同时由于没有做差异diff,就带来了patch包过大,冗余多等缺点.正好微信的动态化方案Tinker也开源了,就趁这个机会先把市面上主流的热更方案汇总分析下,再选一个方向深入研究一个尽量兼并兼容性扩展性及时性的方案.
Github 相关数据分析
先统计下github上几个star比较多的开源热更方案,数据为2016年11月3号采集的,仅供参考.从非技术的角度来分析下表的数据,根据开源时间到最近commit时间、commit数量、issues的关闭率和Release版本数都可以看出这几个项目目前的维护情况.还有Wiki相关文档的支持.怎么看Tinker现在都是一副很生猛的架势.而阿里百川的商业化Hotfix现在还在公测,方式用的是Andfix,把热更做成一个商业化的功能,就不清楚Andfix以后在github上的维护情况了,但是同时也证明了Andfix的价值.而Dexposed一直没有兼容ART,这里就先不详细分析了.
实现原理
Andfix
Andfix实现热更的核心方法是在JNI中动态hook替换目标方法,来达到即时修复bug的目的.而替换的方法则是由源apk文件和修改过的apk文件的dex做diff,反编译补丁包工具apkpatch可以看到两个dex遍历做diff的过程.
public DiffInfo diff(File newFile, File oldFile) throws IOException {
DexBackedDexFile newDexFile = DexFileFactory.loadDexFile(newFile, 19, true);
DexBackedDexFile oldDexFile = DexFileFactory.loadDexFile(oldFile, 19, true);
DiffInfo info = DiffInfo.getInstance();
boolean contains = false;
for(Iterator iterator = newDexFile.getClasses().iterator(); iterator.hasNext();)
{
DexBackedClassDef newClazz = (DexBackedClassDef)iterator.next();
Set oldclasses = oldDexFile.getClasses();
for(Iterator iterator1 = oldclasses.iterator(); iterator1.hasNext();)
{
DexBackedClassDef oldClazz = (DexBackedClassDef)iterator1.next();
if(newClazz.equals(oldClazz))
{
compareField(newClazz, oldClazz, info);
compareMethod(newClazz, oldClazz, info);
contains = true;
break;
}
}
if(!contains)
info.addAddedClasses(newClazz);
}
return info;
}
遍历出修改过的方法加上一个MethodReplace的注解(包含要替换的目标类和目标方法),生成一个diff dex,再签上名更名为.apatch的补丁包通过更新的方式分发的
您可能关注的文档
- 919CBT开业网络策划细案.ppt
- 29.父亲和鸟(示范课).ppt
- 985重点大学PLC课件——5 状态转移图及步进指令.ppt
- 4008业务培训(Y).ppt
- 29聚丙烯包装线大修作业规程(10份).doc
- 4606四段工作面开采方案.doc
- 6200工作面地表移动观测站设计.docx
- 86541_中央空调采购及安装工程招 标 文 件.doc
- 29课《父亲和鸟》最新课件.ppt
- A challenge of deep-mine High temperature conditions深井开采挑战——高温.pptx
- 2026年中级注册安全工程师之安全生产管理考试题库500道【研优卷】.docx
- 2026年公用设备工程师之专业案例(暖通空调专业)考试题库300道及参考答案(巩固).docx
- 2026年保密员考试题库100道带答案(新).docx
- 2026年公用设备工程师之专业案例(暖通空调专业)考试题库300道(各地真题).docx
- 2025年教师转岗考试公共基础知识题库200道含答案ab卷.docx
- 2026年一级注册建筑师之建筑设计考试题库500道含完整答案【必刷】.docx
- 2026年保安员考试题库500道含答案(达标题).docx
- 2026年中级注册安全工程师之安全实务化工安全考试题库300道一套.docx
- 2026年保安员考试题库500道附参考答案(基础题).docx
- 2026年一级注册建筑师之建筑设计考试题库500道附完整答案【历年真题】.docx
最近下载
- 商务与经济统计答案.pdf
- 2025-2026学年河南省南阳三中七年级(上)月考英语试卷(10月份)(含答案).docx VIP
- 新概念三册Lesson59备课笔记.ppt VIP
- 2025年辅警招聘考试简答题题库(含答案+解析).docx VIP
- 2025-2026学年河南省南阳三中八年级(上)10月月考数学试卷(含答案).pdf VIP
- 化学检验员(中级)模拟练习题(含参考答案).docx VIP
- 209074_12J201平屋面建筑构造_部分1.pdf VIP
- 面向政府、集团客户的项目营销.pptx VIP
- 2025版CSCO尿路上皮癌诊疗指南.docx VIP
- 2026中国人民银行直属事业单位招聘60人参考题库及答案解析(夺冠系列).docx VIP
原创力文档


文档评论(0)