古之立大事者,不惟有超世之才,亦必有坚忍不拔之志。这篇文章主要讲述探索安卓热修复框架AndFix的奥秘相关的知识,希望能为你提供帮助。
虽然阿里的AndFix框架已经出来很长时间了,但是还不了解它的同学依然挺多,接下来就跟着我一起来到AndFix的世界里一起看看,如何达到不用重新安装app就可以修复bug。
1.什么是AndFix?
AndFix是阿里巴巴出的一个专门针对android的热修复框架
,那什么是热修复呢?就是不需要重新安装APK而达到修复bugs的目的。
看看阿里巴巴官方对AndFix的描述:
英文好的可以看官网说明文档(有翻译不妥欢迎指出)
1.AndFix是一个Android库,它是在线解决bugs,而不是重新安装app的一种解决方案。
2.AndFix是Android hot-fix
的缩写
3.AndFix 支持Android的2.3-7.0的版本,支持ARM和X86的处理器,支持Dalvik与ART的运行时,支持32位和64位。
4.AndFix的补丁文件的格式是.apatch
,它是由您自己的服务器分发到客户端解决您的应用程序的错误。
2.AndFix的原理
AndFix的实现原理是方法体的替换
文章图片
3.修复过程
文章图片
4.获取AndFix库
直接将AndFix AAR添加到您的项目作为编译库。
对于Maven的依赖:
< dependency>
< groupId> com.alipay.euler< /groupId>
< artifactId> andfix< /artifactId>
< version> 0.5.0< /version>
< type> aar< /type>
< /dependency>
对gradle的依赖:
dependencies {
compile ‘com.alipay.euler:andfix:0.3.1@aar‘
}
5.如何使用AndFix
1.初始化PatchManager
patchManager = new PatchManager(context);
patchManager.init(appversion); //current version
2.加载补丁
patchManager.loadPatch();
你应该尽可能早地加载补丁,通常在你的应用程序初始化阶段加载补丁,例如:在Application.onCreate()
中加载补丁
3.添加补丁
patchManager.addPatch(path); //path of the patch file that was downloaded
当一个新的补丁文件已经下载,,通过调用了addPatch()方法就会立即生效。
6.补丁制作工具
1.下载补丁制作工具
AndFix 给我们提供了一个制作补丁的工具apkpatch
【探索安卓热修复框架AndFix的奥秘】2.使用补丁工具
1.准备两个android apk文件 , 一个是在线的apk文件,另一个是修复bug后的apk文件(两个apk的版本号一样)
2.通过这两个apk文件生成一个补丁文件.apatch
//在补丁的工具文件夹中,打开控制台,并在控制台输入:
apkpatch -f < new> -t < old> -o < output> -k < keystore> -p < > -a < alias> -e < >
//参数说明:
-a,--alias < alias> keystore entry alias.
-e,--epassword < > keystore entry password.
-f,--from < loc> new Apk file path.
-k,--keystore < loc> keystore path.
-n,--name < name> patch name.
-o,--out < dir> output dir.
-p,--kpassword < > keystore password.
-t,--to < loc> old Apk file path.
3.在控制台中执行上面命令后,在指定的< output> 文件夹中后会生成,如下文件:
smali
app-release1-44c095be1acbdd01beed3afd478182f0.apatch
diff.dex
其中app-release1-44c095be1acbdd01beed3afd478182f0.apatch
就是补丁文件。
除了AndFix,还有很多其它非常好用的框架,还有很多东西需要大家自己探索。当然,如果你关注我们,你会收获更多。我们也愿意助你在学习道路上起航扬帆。
推荐阅读
- 十分钟教会你使用安卓热修复框架AndFix
- Appium元素选择
- 安卓课设报告
- 报错An error happened during template parsing (template: "class path resource [templates/hello1(代
- Android OKHttp 可能你从来没用过的拦截器 实用推荐
- CSAPP第七章概念
- 数据库操作(Python如何更新MySQL())
- Python如何读取mysql(答案都在这里了)
- Python MySQL如何进行事务操作()