Tinker热修复原理适用范围和机型都是比较广的热修复
Tinker和andfix和sophix,Dexposed等的对比随处可见这里不再累述,
Tinker修复的原理是利用dex的加载机制如果读到某个类的文件,就不再继续寻找加载该文件的原理,把新的修复好的dex文件,加载带旧版本的dex文件之前,
demo中是先运行出一个有问题的APK,然后通过点击加载外置卡中的dex文件(模拟从网络中下载好的dex文件)来修复有问题的APK,
原Test文件如下:public class Test {
public void testFix(Context context){
int i =10;
int a =0;
Toast.makeText(context,"shit:"+i/a, Toast.LENGTH_SHORT).show();
}
把a修改为a=2;然后运行,运行的条件都是debug模式的,(也可以release模式)
在app/build/intermediates/classes/dev/debug/文件夹下,复制com文件,到某个文件夹下比如我的是(C:\Users\dell\Desktop\xx\),然后运行dx --dex --output C:\Users\dell\Desktop\xx\out1.dex C:\Users\dell\Desktop\xx\,会生成out1.dex(这里需要先配置dx环境,这里不再累述);
然后把out1.dex文件放到外置卡中,
然后再把a 改回a = 0运行;此时先点击test会出错,然后打开APP点击fix按钮,再点击test,发现修复成功;
代码见:https://github.com/townof1997/hotfix_tinker/
网友评论