private static void patchDexFile(ZipFile baseApk, ZipFile patchPkg, ZipEntry oldDexEntry, ZipEntry patchFileEntry,ShareDexDiffPatchInfo patchInfo,File patchedDexFile) throws IOException {InputStream oldDexStream = null;InputStream patchFileStream = null;oldDexStream = new BufferedInputStream(baseApk.getInputStream(oldDexEntry));patchFileStream = (patchFileEntry != null ? new BufferedInputStream(patchPkg.getInputStream(patchFileEntry)) : null);new DexPatchApplier(oldDexStream, patchFileStream).executeAndSaveTo(patchedDexFile);}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
通过拿到其内部文件的,其实就是读取本地apk对应的dex文件,以及patch中对应dex文件,对二者的通过方法进行合并至,即patch的目标私有目录 。
至于合并算法,这里其实才是比较核心的地方,这个算法跟dex文件格式紧密关联,如果有机会,然后我又能看懂的话,后面会单独写篇博客介绍 。此外已经有篇博客进行了介绍:
感兴趣的可以阅读下 。
好了,到此我们就大致了解了热修复的原理~~
测试demo地址:
【热修复 tinker接入及源码分析】当然这里只分析了代码了热修复,后续考虑分析资源以及So的热修、核心的diff算法、以及插件等相关知识~
- HA Keepalived案例一:Keepalived双机热备精讲
- 2023年小暑热吗
- 十 LiveVideoStackCon讲师热身分享 —— “新潮”AI硬
- CSZ CMS 1.2.7 用户私信XSS漏洞复现+审计+修复建议
- Ubuntu 18.04.5 LTS 引导修复
- NOIP2017列队
- 【Python爬虫】CSDN热榜文章热门词汇分析
- 韩国进口方便面煮面三养火鸡面热干拌面要怎么吃
- amd积热是什么意思
- ipc开头的热点是啥