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