博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android热修复AndFix
阅读量:4580 次
发布时间:2019-06-09

本文共 1353 字,大约阅读时间需要 4 分钟。

  • 热修复主要用来修复代码、修复bug、添加独立的功能他的原理主要是操作PathClassLoader、DexClassLoader。

  • PathClassLoader是类加载器,DexClassLoader可以从.jar和.apk类型的文件内部加载classes.dex文件就好了。他们都是classloder的子类。

  • classloder是什么呢?与普通程序不同的是,程序(class文件)并不是本地的可执行程序。当运行Java程序时,首先运行(Java虚拟机),然后再把Java class文件加载到JVM里头运行,负责加载Java class的这部分就叫做Class Loader。

  • 一个ClassLoader可以包含多个dex文件,每个dex文件是一个Element(元素),多个dex文件排列成一个有序的数组dexElements,当找类的时候,会按顺序遍历dex文件,然后从当前遍历的dex文件中找类,如果找类则返回,如果找不到从下一个dex文件继续查找。

  • 那么这样的话,就可以在这个dexElements中去做一些事情,比如,在这个数组的第一个元素放置我们的patch.jar,里面包含修复过的类,这样的话,当遍历findClass的时候,我们修复的类就会被查找到,从而替代有bug的类。

  • 原理简单说就是当打开的时候使用ClassLoader动态加载,然后使用反射机制来调用插件中的类和方法,一般都会搭配一套插件框架来配合使用。

 

AndFix

原理:

方法的替换,把有bug的方法替换成补丁文件中的方法。 

  

优点:

重大bug,需要紧急修复
可以下次迭代修复的bug
影响用户体验的行为

无需重启  

缺点:

 

  • 无法添加新类(内部类也不行)和新的字段、新的方法?自己试了方法可以
  • 资源文件无法替换   试了下换原有的图片可以,但是新增的不行
  • 不能修改xml布局文件   不能
  • 加固后的包补丁无法使用,如果要加固,需要加固前的包来生成补丁,不过这样生成的补丁也很容易破解
  • 不能对同一个方法修复两次,否则App根本跑不起来
  • 对加载过的补丁文件要做名字修改 如果名字重叠 就不会再次加载

 

 

补丁加载的时机:

可以放在自定义Application的onCreate方法中,也可以放在button的点击事件中,也可以放在监听网络变化的广播中。

 

操作:

通过命令生成补丁

 -a,--alias <alias>     keystore entry alias.

 -e,--epassword <***>   keystore entry password.

 -f,--from <loc>        new Apk file path.

 -k,--keystore <loc>    keystore path.

 -n,--name <name>       patch name.

 -o,--out <dir>         output dir.

 -p,--kpassword <***>   keystore password.

 -t,--to <loc>          old Apk file path.

 

阿里百川

主要好处是可以对补丁很好的管理,例如停止发布、继续发布、发布回滚等等

 

 

转载于:https://www.cnblogs.com/sixrain/p/5992056.html

你可能感兴趣的文章
MySQL基础
查看>>
凹凸贴图与法线贴图
查看>>
sqlserver跨服务器数据库sql语句
查看>>
设计模式-结构型模式,外观模式(6)
查看>>
Trie模版
查看>>
2018HDU多校训练-3-Problem F. Grab The Tree
查看>>
2016012032四则运算网页版结对项目报告
查看>>
淘宝专业版改基础版方法
查看>>
[转]ARM Pipeline
查看>>
[转]Blocking Code Injection on iOS and OS X
查看>>
自动化测试
查看>>
vue $options 获取自定义属性
查看>>
Vue避免 v-if 和 v-for 用在一起
查看>>
TraceSource记录程序日志
查看>>
【Source教程】GCFScape下载安装与使用
查看>>
数据结构 单链表反转 回顾练习
查看>>
C++ string int 转换 split
查看>>
两个集合相减怎么算_你家使用的防火窗(耐火窗)质量合格吗?怎么判断好坏呢?...
查看>>
python整数作为条件_Python整数类型(int)详解
查看>>
pta简单实现x的n次方_c语言第二次作业pta..docx
查看>>