NDK39_热修复简介

NDK开发汇总

一 热修复

通常解决bug都是通过发布版本的形式达到的,在下一个版本发布之前,用户是用不出现bug之后的功能,给用户体验非常差, 而热修复可以避免频繁发布版本。

热修复技术指的是应用不需要发版,用户无需安装就可以更新应用的部分内容,主要用于线上版本的bug快速、无感修复

特点

  • 随时随地可以在后台修复bug
  • 减少公司在营运中的损失。因为一旦产品发布,出现奔溃的现象后,用户是用不了app的功能的
  • 避免频繁发布版本
  • 一次修复 只要手机不关机的情况,再无需修复
  • 可以在线更改某些功能

二 主流的热修复技术

  • thinker :微信
  • andfix:淘宝,性能优于thinker,但是太依赖底层
  • sophix(未开源):主要解决size的问题然后利用memcpy替换Method

在这里插入图片描述

三 andfix

  1. 发现bug 并修改bug,将修复的java文件 编译成class 然后打包成dex 放到服务器 供客户端下载
  2. 将修复的方法体 Method 从dex 文件取出,将会出现bug的方法 Method 也取出来
  3. 将取出的正确的 和 错误的method 一并传到底层做替换操作
  4. 底层替换 ( 指针替换)在这里插入图片描述

四 CLASS_ISPREVERIFIED问题

为什么微信热修复需要重启

  1. 在apk安装的时候,虚拟机会将dex优化成odex后才拿去执行。在这个过程中会对所有class一个校验。

  2. 校验方式:如果A类和B类在同一个dex中,那么A类就会被打上CLASS_ISPREVERIFIED标记

    A类 在开始分包的时候就引用了其他的dex java类 CLASS_ISPREVERIFIED标记

  3. 被打上这个标记的类不能引用其他dex中的类,否则就会报图中的错误

  4. 而普通分包方案则不会出现这个错误,
    因为引用和被引用的两个类一开始就不在同一个dex中
    所以校验的时候并不会被打上CLASS_ISPREVERIFIED

怎么样避免打CLASS_ISPREVERIFIED标记?
解决: JNI实现新旧METHOD替换的同时,修改CLASS_ISPREVERIFIED标记

五 sophix

原理:测量一个方法 字节数

  • 每一个java方法的大小是固定的
  • 方法与方法之间是紧密联合的

六 class单独生成dex

1 获取class文件

切换Project视图,Android Studio Build之后,所有的class文件都在 app\build\intermediates\classes 目录下

2 找到dx.bat

找到sdk安装目录,进入build-tools文件夹,任选一个版本,可以看到dx.bat

3 命令行打包生成dex

cmd进入dx.bat所在路径(也可以给dx.bat配置环境变量),输入命令:dx --dex --no-strict --output [生成的dex文件] [class文件]

例如:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值