简单介绍:热修复是在近几年非常火爆的,不管是阿里,腾讯都有自己的热修复架构,当上线一个版本后发现版本有BUG,这时候如果修改掉BUG再打版本再上线,还要让用户重新下载安装,这样的用户体验是很不好的,所以也就产生了热修复,修改BUG后使用热修复,在用户察觉不到的情况下修复BUG,也就不需要用户再下载,覆盖安装,大大提升了用户体验。在最后附上DEMO
这里主要是介绍阿里使用的AndFix热修复,虽然简单,也算是做个笔记。
如果项目中没有热修复依赖项,就必须先下载一个依赖项:
CSDN下载链接:下载链接 需要积分 无法设置0积分
百度网盘:下载链接 提取码:ddw5
这里以一个简单实例介绍:
1、实例目录
2、在我们主界面中写一个热修前的版本,修改前的版本
**
* by https://blog.csdn.net/generallizhong
*/
public class MainActivity extends Activity {
TextView tv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tv);
Toast();
}
@Override
protected void onDestroy() {
super.onDestroy();
android.os.Process.killProcess(android.os.Process.myPid());
}
//需要打包两个apk,一个是修复前的apk也就是上线有bug的,另一个是修复后的apk
private void Toast() {
tv.setText("热修前");
Toast.makeText(this, "热修复前的程序", Toast.LENGTH_SHORT).show();
}
}
3、这里是修改BUG后的版本,也就是热修复的版本
/**
* by https://blog.csdn.net/generallizhong
*/
public class MainActivity extends Activity {
TextView tv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tv);
Toast();
}
@Override
protected void onDestroy() {
super.onDestroy();
android.os.Process.killProcess(android.os.Process.myPid());
}
//需要打包两个apk,一个是修复前的apk也就是上线有bug的,另一个是修复后的apk
private void Toast() {
tv.setText("热修后");
Toast.makeText(this, "热修复后的程序", Toast.LENGTH_SHORT).show();
}
}
两个版本中:修改前的名为1.apk,修改后的版本为2.apk
这里将1.apk版本运行一次,也就是有BUG版本执行一次
3、这一步是最重要的了,这里我介绍两种方法
第一种就是用到apkpatch-1.0.3 ,这个在项目里面有,也可以网上自行下载一个
在apkpatch-1.0.3中把你生成的1.apk 和2.apk复制到apkpatch-1.0.3文件中,把你的签名文件:**.keystore也复制到apkpatch-1.0.3文件中
然后就要用到CDM命令了
上面输入的命令行:
apkpatch -f 2.apk -t 1.apk -o output1 -k andfix.jks -p 123456 -a key0-e 123456
命令行意思:
apkpatch -f apk为1.apk,新的apk为2.apk, -o表示补丁的输出目录,-k表示keystore, -p表示keystore的密码,-a表示alias, -e表示entry password。
编译成功后会出现这样一个文件
看到这个后是不是感觉超级麻烦,命令中一不小心还弄错了,没得关系,还有一种办法给整合好了直接用,方便得很
第二种就是直接通过软件生成
CSDN下载地址:下载
百度网盘下载地址:下载 提取码:4vxp
是不是感觉很方便
生成后可改名为out.apatch,也可以不改
4、把我们生成的out.apatch复制到我们SD卡的根目录下
将有BUG版本程序进程关闭后再打开,就会发现已经替换为2.apk的修改后版本了。这里成功图就不放上来了,有兴趣的话可以自己试试看。
这里是手动模拟完成,正常使用需将文件上传到服务器,然后通过下载方式用代码将out.apatch文件放到SD卡根目录下
DEMO附上:
CSDN 下载地址:下载
百度网盘下载地址:下载 提取码:73vv
Andfix并不能修复所有情况下出现的bug
局限性:无法添加新类和新的字