热修复Tinker 原理解析之so更新

本文深入分析了Tinker的SO热更新原理,通过System.load直接加载新SO实现更新。流程包括补丁生成、合成及加载。Tinker在多ABI环境下不直接修改lib路径以避免兼容性问题,建议开发者使用TinkerInstaller加载库文件。虽然不完全无感,但能有效处理SO更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:之前已经在文章中对Tinker的Dex热更新、资源热更新的源码做了分析,今天接着开始对Tinker的so热更新做源码的分析,废话不多说直接出发。

Android tinker接入使用

tinker之dex更新详解

tinker之资源更新详解

开始先回顾一下Android里面关于so的加载的两种方式:

  • System.loadLibrary: 这种方式传入的是so的名字,会直接从系统的目录去加载so文件,系统的路径包括/data/data/${package_name}/lib、/system/lib、/vender/lib等这类路径。
  • System.load:这种方式传入的是so的绝对路径,直接从这个路径加载so文件。

相对于Dex和资源的更新,so文件的更新简单很多,Tinker的so文件热更新的原理就是通过方式二,直接加载新的so实现的。

so文件的热更新流程同dex、资源文件一样,包含补丁生成,补丁合成,补丁加载三个部分。

生成补丁时比较新旧so文件使用BSdiff算法生成补丁包,然后在下发补丁成功后根据BSpatch算法将补丁包和旧的library合成新的library,

并将更新后的Library库文件保存在tinker下面的目录下,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值