APP热修复的概念:app
APP修复是针对修复app中的bug场景来定义的。当咱们已上线的app出现bug的时候,咱们想在用户不知情的状况下修复这个bug,那么就会用到热修复。框架
APP热修复的实现原理:ide
首先,生成新版本的apk与旧版本的apk的差别补丁包文件;测试
其次,使用热修复框架的Api在Application中去尝试加载指定路径的补丁差别包;gradle
最后,只须要将补丁差别包宝贝到对应路径,代开有bug的App,在Applcation建立的时候就会将补丁包文件加载到内存中而且替换对应的方法。this
经常使用的热修复框架---阿里的AndFixspa
使用步骤:code
首先,在gradle文件中依赖AndFix类库,而且在Application的onCreate方法中编写加载patch文件的代码:blog
//经反复测试,0.5的版本不如0.4的版本稳定,所以咱们用稳定的版本 //compile 'com.alipay.euler:andfix:0.5.0@aar' compile 'com.alipay.euler:andfix:0.5.0@aar'
添加加载patch文件的代码:ip
public class MyApp extends Application { @Override public void onCreate() { super.onCreate(); PatchManager patchManager = new PatchManager(this); String appVersion = "1.0";//当前app的版本号 patchManager.init(appVersion); //开始加载patch文件 patchManager.loadPatch(); File patchFile = new File(Environment.getExternalStorageDirectory(),"out.apatch"); try { if(patchFile.exists()){ //指定patch文件的路径 patchManager.addPatch(patchFile.getAbsolutePath()); } } catch (IOException e) { e.printStackTrace(); } } }
咱们将2个apk文件和签名文件一同复制到AndFix-master\tools\apkpatch-1.0.3目录下,使用apkpatch命令产生出patch文件,命令以下:
apkpatch -f fix.apk -t bug.apk -o bug_fix -k test.jks -p 111111 -a test -e 111111
将patch文件放到指定的路径下,运行带有bug的应用,从新启动application,就会自动覆盖原来的带有bug的代码。
注:没必要担忧patch文件会被用户误删,由于patch文件已经复制到了应用的包下。
热修复只是用于bug层级的修复,阿里的AndFix只是用于方法的修复,不能对类和Android四大组件进行修复。并且热修复具备不稳定性,并且没法适配全部的手机。