Android实现热修复之Andfix

一、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);
        当一个新的补丁文件下载时,它将立即生效。最好放在你补丁文件下载完成的时候,还有每次补丁的名字不能一样,不然只有第一次的补丁才能加载,只有每次名字不同的时候才能加载,看源码后就可以发现。

三、生成补丁

        生成补丁的工具 下载地址
        下载下来打开后你会发现是这样的
         Android实现热修复之Andfix_第1张图片
          其中.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版,生成补丁一直不成功,报错如下图:
    Android实现热修复之Andfix_第2张图片
            后面才发现是这个问题导致的,都打成release就不会有这个问题了,也是醉的不行。
           Andfix还是有很多不足的地方,不支持修改布局文件,也不支持增加class文件,就连方法类增加一个匿名内部类也不行,无法添加成员变量。
           所以,热修复框架能给我们在关键的时候带来很多方便,但是我们还是上线的时候多测试,保证少出bug,热修复只是一个补救措施,尤其在敏捷开发的时候还是有很大帮助的 。
           本文到此就结束了,希望本文能给大家在集成andfix到项目的时候带来一点帮助。

你可能感兴趣的:(AndFix,Android热修复,热修复问题解决)