Android开发:热修复 Tinker 原理分析,Android多态实现原理

本文介绍了Android热修复技术Tinker的实现原理,包括在BaseApplication中进行的初始化,分包配置,以及如何处理热修复的逻辑。通过创建FixDexUtils类,遍历并加载修复后的.dex文件,实现类加载器的替换,从而达到热修复的效果。虽然这种方式需要重启App才能完成修复,但详细阐述了整个过程。
摘要由CSDN通过智能技术生成

public class BaseApplication extends MultiDexApplication {

@Override

public void onCreate() {

super.onCreate();

}

@Override

protected void attachBaseContext(Context base) {

super.attachBaseContext(base);

//安装分包配置

MultiDex.install(this);

}

}

2、分包配置

分包就创建了一个SecondActivity类做模拟异常和修复异常的入口,和一个Calculate模拟异常,做了10/0的操作,修复后为10/1

注:获取修复后的classes2.dex文件可以通过直接buildapk直接解压获取,或者用build-tools下的dx.bat执行命令获取

简单贴下SecondActivity,点击fix按钮后的代码:

private void update() {

//将下载的修复包,复制到私有目录,解压从.dex文件中取到对应的.class文件

//从sd卡取修复包

File sourceFile = new File(Environment.getExternalStorageDirectory(), Constants.DEX_NAME);

//目标文件

File targetFile = new File(getDir(Constants.DEX_DIR, Context.MODE_PRIVATE).getAbsolutePath() + File.separator + Constants.DEX_NAME);

if (targetFile.exists()) {

targetFile.delete();

Log.e(“update”,“删除原有dex文件(已使用的)”);

}

//将SD卡中的修复包copy到私有目录

FileUtils.copyFile(sourceFile,targetFile);

Log.e(“update”,“copy完成”);

FixDexUtils.loadDexFile(this);

}

3、FixModule

新建一个Module处理热修复的相关逻辑

只有五个文件,核心文件代码在FixDexUtils,其它是工具类,还有个定义了几个常量 看下FixDexUtil

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值