热修复一般用于版本发布之后无需版本更新而实现代码逻辑修复,AndFix作为阿里的Android热修复开源框架具有立即生效 但同时其资源文件不可作为修复对象,官方地址
使用方法非常简单
- Initialize PatchManager
patchManager = new PatchManager(context);
patchManager.init(appversion);//current version
- Load patch
patchManager.loadPatch();
- Add patch
//path of the patch file that was downloaded
patchManager.addPatch(path);
- 推荐做法
override fun onCreate() {
super.onCreate()
Log.i("111", "onCreate: ")
//初始化
val patchManager = PatchManager(this)
patchManager.init("1.0");//current version
//加载
patchManager.loadPatch()
//Add Patch
var pathFile=File(Environment.getExternalStorageDirectory(),"fixbug.apatch")
if(pathFile.exists()){
Log.i("111", "onCreate: "+pathFile.absolutePath)
patchManager.addPatch(pathFile.absolutePath)
}
}
}
AndFix提供了用于产生补丁的工具,如下
产生补丁示例
apkpatch -f fix.apk -t bug.apk -o out -k dong.keystore -p android -a android -e android
各参数解释如下
这样就可以实现更新啦,我们去试一下,报了这样一个错误
ZipFile() java.util.zip.ZipException: File too short to be a zip file: 0
bd了一番无果,最终在stack overflow中找到解决办法,其实是权限没开。仔细一想,新建Demo真的把这茬给忘了,加上权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
重新打补丁,果然如此,成功实现,此篇文章只是先开个头,后面使用过程中若碰到其它问题,会在这里继续做个总结