前言:之前已经在文章中对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下面的目录下,这个目录就是/data/data/${package_name}/tinker/lib。然后在加载的时候直接通过System.load加载该目录下面的so文件。

友情提示:Tinker中so的热更新对用户并不是无感的,需要用户自发的去加载自己需要的库文件。

下面是tinker的wiki里关于这方面的描述:

Tinker并没有直接将补丁的lib路径添加到DexPathList中,理论上这样可以做到程序完全没有感知的对Library文件作补丁。这里主要是因为在多abi的情况下,某些机器获取的并不准确。

所以想要加载最新的库,需要自己使用TinkerInstaller.load*Library去加载库文件,它会自动尝试先去Tinker中的库文件加载,加载不成功会调用System.loadLibrary调用系统的库文件。

//load lib/armeabi library
TinkerInstaller.loadArmLibrary(getApplicationContext(), "stlport_shared");
//load lib/armeabi-v7a library
TinkerInstaller.loadArmV7Library(getApplicationContext(), "stlport_shared");

另外,对于第三方库文件的加载,Tinker无法干预其加载时机,但是只要在我们的代码提前加载第三方的库文件即可。若想对第三方代码的库文件更新,可先使用TinkerInstaller.load*Library对第三方库做提前的加载!

当前使用方式似乎并不能做到开发者透明,这是因为Tinker想尽量少的去hook系统框架减少兼容性的问题。

到此为止,tinker的源码解析系列结束。本系列从dex,资源文件和so的补丁生成,补丁合成和补丁加载角度出发,做了一个简要的流程分析。如果想要更加深入详细的讲解请查看更多的文档。

see you

热修复Tinker 原理解析之so更新相关推荐

  1. Android热修复Tinker原理分析

    目录 1.tinker的class文件修复 2.tinker的资源文件修复 3.几种热修复方案对比 1.tinker的class文件修复 1.1.先说dex文件的加载和类的查找过程 1.1.1.dex ...

  2. 深入解析阿里Android热修复技术原理

    前言:本文框架 什么是热修复? 热修复框架分类 技术原理及特点 Tinker框架解析 各框架对比图 总结 通过阅读本文,你会对热修复技术有更深的认知,本文会列出各类框架的优缺点以及技术原理,文章末尾简 ...

  3. Android 热修复 Tinker Gradle Plugin解析

    本文已在我的公众号hongyangAndroid原创首发. 转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/72667669 本文 ...

  4. 微信热修复 Tinker 和 flavor 更新

    好久都没有写博客了,最近看了看关于热更新的内容.主要有阿里的,腾讯的,而实验的则是使用的是微信的热修复 Tinker ,以及在使用了 flavor 后的 热修复. 本文的内容是基于 AS3.0.1,注 ...

  5. Android热修复技术原理详解(最新最全版本)

    本文框架 什么是热修复? 热修复框架分类 技术原理及特点 Tinker框架解析 各框架对比图 总结   通过阅读本文,你会对热修复技术有更深的认知,本文会列出各类框架的优缺点以及技术原理,文章末尾简单 ...

  6. Android 热修复Tinker接入实战

    1 热修复原理 热修复的原理一句话总结就是:就是dex的动态替换. 首先,我们知道PC上的JVM是直接解析class字节码的,而android上的JVM是解析dex文件的,因此Android程序要运行 ...

  7. 热修复——深入浅出原理与实现

    一.简述 热修复无疑是这2年较火的新技术,是作为安卓工程师必学的技能之一.在热修复出现之前,一个已经上线的app中如果出现了bug,即使是一个非常小的bug,不及时更新的话有可能存在风险,若要及时更新 ...

  8. Android 热修复 Tinker接入及源码浅析

    本文已在我的公众号hongyangAndroid首发. 转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/54882693 本文出自 ...

  9. 深入探索android热修复技术原理_打卡活动:技术书籍书单

    不知不觉,码个蛋打卡活动都已经60多天了,好多小伙伴都已经可以领取第一波奖励:技术书籍了,上周好多小伙伴私信码仔,问都有哪些技术书籍,码仔今天就给大家列了个书单供大家选择: 01 Android软件安 ...

最新文章

  1. AI框架精要:设计思想
  2. JavaScript EventLoop
  3. Java中的享元设计模式,涨姿势了!
  4. Linux 需要的常用操作,你只差这篇文章
  5. __declspec(selectany)的作用
  6. oracle exacc,【学习笔记】Oracle 11GR2新特性Adaptive Cursor Sharing(ACS)
  7. 「原创」从马云、马化腾、李彦宏的对话,看出三人智慧差在哪里?
  8. IDEA自定义快捷键
  9. python读取文本数据--完善中
  10. java ArrayList 排序
  11. 手机浏览器一键跳转微信加好友的方法
  12. html5获取经纬度失败,h5获取经纬度有问题
  13. Graphics画图自定义画笔
  14. 连续8个季度增长超100% 阿里云成长为“亚洲巨象”
  15. (HTTP 503) (Request-ID: req-4f56de6f-d29c-4c44-aed3-e6ef8253384a)
  16. 前端table打印被截断,如何给每一页都增加表头
  17. 2019小米java开发
  18. 富兰克林的风筝实验中的秘密
  19. ctab法提取dna流程图_(完整版)CTAB法提取DNA原理及步骤、制胶、电泳
  20. 错过两个时代的IBM,能否用区块链抢占下个时代

热门文章

  1. 【java】家庭收支管理系统
  2. 【Github】玩转Github系列之三——史上最全Github加速手段
  3. Kotlin - DSL
  4. NestJS 7.x 折腾记: (6) 异常过滤器,取其精华去其糟粕!比如响应异常数据的包装~
  5. 代理服务器和客户端配置
  6. android模拟器限制网速
  7. Android4.0新的SDK新特性 (转)
  8. Liferay的AUI框架如何学习
  9. python递归绘制简单分形树
  10. c语言管道通信实例,C语言辅导:VC命名管道通信的实现