一、Android热修复框架
Android热修复框架出现可以说是对移动程序员的福音,每次更新上线bug不能修改,重新打包APK,发到各渠道和应用市场换包费时费力,可以说是费时费力还不讨好。不过热修复的出现,这些问题似乎有了一个比较好的解决方案。
最先看到的是QQ空间的热补丁文章,文章地址是:
安卓App热补丁动态修复技术介绍
,
项目地址是
Github地址
,
有兴趣的可以了解哈。后面再github上陆续看到了:
https://github.com/jasonross/Nuwa,
大众点评工程师实现的一个方案
https://github.com/alibaba/AndFix,
这就是本篇文章的主要讲解的一个热修复,因为阿里推出的这个热修复在github上挺受欢迎的,star最多的一个,但是本文章主要讲解集成到项目中遇到的问题以及用法,不会去分析其中的原理,想更多了解热修复原理可以参考鸿洋的文章
Android 热补丁动态修复框架小结
。
二、Android热修复框架的使用
Andfix支持Android2.3到6.0,并且支持arm与x86架构的设备,不需要重启即可应用补丁,安全性也不错。
首先,集成Andfix在as添依赖
dependencies {
compile 'com.alipay.euler:andfix:0.3.1@aar'
}
然后在Application中初始化
patchManager = new PatchManager(context);
patchManager.init(appversion);//current version
加载补丁
patchManager.loadPatch();
这个最好放在初始化的时候
最后添加
patchManager.addPatch(path);
当一个新的补丁文件下载时,它将立即生效。最好放在你补丁文件下载完成的时候,还有每次补丁的名字不能一样,不然只有第一次的补丁才能加载,只有每次名字不同的时候才能加载,看源码后就可以发现。
三、生成补丁
生成补丁的工具
:
下载地址
下载下来打开后你会发现是这样的
:
其中.bat是windows用的,.sh是给苹果用的
./apkpatch.sh -f new.apk -t old.apk -o output1 -k debug.keystore -p android -a androiddebugkey -e android
-f <new.apk> :新版本
-t <old.apk> : 旧版本
-o <output> : 输出目录
-k <keystore>: 打包所用的keystore
-p <password>: keystore的密码
-a <alias>: keystore 用户别名
-e <alias password>: keystore 用户别名密码
生成补丁文件到对应的目录,发现.apatch就是我们的补丁文件,我们将它放到对应的文件下即可替换,项目中就要去判断是否需要下载补丁,需要则下载到手机的SD卡里,然后加载,加载完删除即可。
四、集成到项目遇到的问题
许多人或许会遇到,自己写个demo没问题,但是集成到项目中就会遇到问题,直接项目报错,如下如所示
java.lang.UnsatisfiedLinkError: Native method not found: com.alipay.euler.andfix.AndFix.setup:(ZI)Z
为什么会出现这个情况呢,cpu指令集是arm64-v8a或者其它的,andfix少了这个so文件,目前好像只支持X86和armeabi结构的,这个时候大家就需要重新编译so文件了。项目中如果有其它的.so文件,你这时候去加载依赖库,而andfix没有,就会报错,所以我们需要加入编译后的so文件到项目后就没有问题了,下面给出别人编译的所有so文件:
https://github.com/LuoboDcom/AndFix-so-
,
下载过后集成到项目应该就不会有问题了。
自己在生成补丁文件的时候,打了一个debug版,打了一个release版,生成补丁一直不成功,报错如下图:
后面才发现是这个问题导致的,都打成release就不会有这个问题了,也是醉的不行。
Andfix还是有很多不足的地方,不支持修改布局文件,也不支持增加class文件,就连方法类增加一个匿名内部类也不行,无法添加成员变量。
所以,热修复框架能给我们在关键的时候带来很多方便,但是我们还是上线的时候多测试,保证少出bug,热修复只是一个补救措施,尤其在敏捷开发的时候还是有很大帮助的 。
本文到此就结束了,希望本文能给大家在集成andfix到项目的时候带来一点帮助。