首页投稿(暂停使用,暂停投稿)移动开发

微信热补丁实现--Bspatch实现

2016-07-19  本文已影响561人  王岩_shang

前言

前不久看了一篇博文,讲述微信热补丁的,瞬间就被吸引了,于是决定花点时间研究下,挺不错的一篇文章,推荐大家去看一下,链接会附在本文末尾。

原理

我们首先来做一个假定:old.apk 为版本比较旧的apk(存在bug的版本),new.apk为新版的(修复bug的版本);假定他们发生bug的层面均和代码有关(暂时不考虑资源层面的替换)。
我们获取到两个apk中的classes.dex文件,分别命名为old.dex和new.dex,最终的目的是希望new.dex能够取代old.dex运行在old.apk的程序中。为此我们做了下面几步操作:

  1. 通过使用bsdiff工具,获取old.dex与new.dex的差量classes.patch(电脑端进行)。
  2. 在手机端获取到安装程序old.apk,解压缩获取到classes.dex,即old.dex。
  3. 在手机端通过bspatch工具(内部的.so)将old.dex和classes.patch 合成为new.dex。
  4. 在application的attachBaseContext中,构造一个DexclassLoader,将new.dex插入到BaseClassLoader的dexElements之前,使new.dex提前加载,来达到热补丁的效果。

实现过程中遇到的问题

不足及问题

github 链接

参考链接

上一篇 下一篇

猜你喜欢

热点阅读