Android培训
美国上市Android培训机构

400-111-8989

热门课程

五分钟学会Android热修复,Android热修复学习

  • 时间:2017-05-26
  • 发布:Android培训
  • 来源:Android教程

五分钟学会Android热修复。近几年来 热修复炒的比较火热,因为它能及时修复应用上线后出现的bug。其实热修复不难,今天就带着看家来看下如何来耍一遍。
现在流行的热修复工具比较多,主要是腾讯和阿里的,
但是归根到底其实主要就是2种思想
1.简单说就是通过反射机制得到旧方法的指针 新方法指向目标方法,实现方法替换,在执行的时候修复后的方法了。阿里的AndFix 用的就是这种思想 如AndFix
2.这种通过将新dex插入到dex之前替换旧类实现。因为在Dalvik虚拟机加载类的过程中会顺序遍历所有的dex文件, 查找
每个dex文件中类。如果找到就返回,没有找到就找下一个,如果有相同多个dex文件中有相同的类,理论上会优先选择前面的。

该种方式 需要重启后才能修复 如Nuwa

两种方式思想上主要区别一个是方法替换,一个是类的替换

废话不多说先上实战 我这里使用阿里的AndFix

1.新建项目 导入依赖

2.新建一个MyApplication继承Application

就三步
public void onCreate() {
super.onCreate();
//1. 初始化
mPatchManager = new PatchManager(this);
mPatchManager.init("1.0"); // 版本号
// 2.加载 apatch
mPatchManager.loadPatch();
//apatch文件的目录
String patchFileString = Environment.getExternalStorageDirectory().getAbsolutePath() + APATCH_PATH;
File apatchPath = new File(patchFileString);
if (apatchPath.exists()) {
Log.i(TAG, "补丁文件存在");
try {
//3.添加apatch文件
mPatchManager.addPatch(patchFileString);
} catch (IOException e) {
Log.i(TAG, "打补丁出错了");
e.printStackTrace();
}
} else {
Log.i(TAG, "补丁文件不存在");

}
}

3.签名打版

有bug的时候的工程 签名打版

加载中... 1

修复bug后工程 再打版 和直接用上面的

4.制作补丁

然后要用到一个生成补丁的工具apkpatch

解压

\

_MACOSX是给OSX系统用的 .bat是给window系统用的

把之前生成的AndFixDemo.apk和newAndFixDemo.apk,还有打包所使用的keystore文件放到apkpatch-1.0.3目录下
打开cmd,进入到apkpatch-1.0.3目录下,输入如下指令

apkpatch.bat -f newAndFixDemo.apk -t AndFixDemo.apk -o hotcc -k hotkeystore -p 123456 -a hothot -e 123456


每个参数含义如下

-f 新版本的apk

-t 旧版本的apk
-o 输出apatch文件的文件夹,可以随意命名
-k 打包的keystore文件名
-p keystore的密码
-a keystore 用户别名
-e keystore 用户别名的密码

如果出现add modified …….就表示成功了hotcc目录就生成了文件

将.apatch后缀的那个文件改为Dennis.apatch(因为我们项目中设置是这个名字,保持一致)

5.实现效果

放到手机中安装好了AndFixDemo.apk,点击按钮会弹出 bug来啊

再把Dennis.apatch放到根目录下(项目中设置的是根目录 项目中根据实际情况放相应的路径)。

退出应用 进去点击 按钮会提示哈哈哈---- 其实这次才是真正的修复Bug了(因为修复放在Application中在 启动时会执行onCreate()所以要进,实际项目中 根据具体情况来放置)

上一篇:Android View坐标系彻底理解,Android View坐标系知识点
下一篇:关于Android适配,Android适配教程

Android Support Library 之 夜间模式开发教程

Android中基于回调的事件处理

Android系统事件的响应教程

如何利用Sanitizer解决Android开发中遇到的Bug?

选择城市和中心
贵州省

广西省

海南省

台湾