AndFix 帮你解决集成热修复中的那些坑

这里说明一下本人用的是Android Studio,用gradle配置,关于maven的我就不在陈述了。

快速集成步骤
第一步 gradle里添加依赖库

在gradle 里

dependencies {

    compile 'com.alipay.euler:andfix:0.3.1@aar'

}
第二步 Application里添加初始化代码 appversion取系统的versionname即可
patchManager = new PatchManager (context);
patchManager.init (AppParameterUtil.getAppVersionName (context));
patchManager.loadPatch ();
第三步 就是要add修复包,path就是本地的下载好的一个.apatch一个文件。
patchManager.addPatch (path);
第四步 生成apatch命令

apkpatch -f <new> -t <old> -o <output> -k <keystore> -p <***> -a <alias> -e <***>

参照官方文档都有详细说明,不再陈述。

只需要简单的四步即可集成好热修复


接下来我说一下这里面的诸多神坑,之所以说是坑因为android碎片化太严重,AndFix兼容性还不是很乐观,相信看过Github上项目的issue,上面会有各种各样的兼容性问题,接下来为大家说一下我遇到问题以及解决方案。

问题以及解决方案
一、开源的项目里只编译了x86和armeabi两个so文件

解决办法:

1、只保留armeabi和x86文件夹下的so,其余从工程文件夹删除。

2、将AndFix的源码下载下来编译支持其他架构的的so。

二、对于超过65535的问题,要通过Google提供的方案multidex,如果用这种方式就会发现只有Activity里的可以修复,类和Fragment里的方法是修复不了,因为Activity是在主dex里,其他的可能在生成的第二个dex里(我猜测)

解决办法:

所以就需要修改一下生成修复包的脚本

解决思路原理 http://w4lle.github.io/2016/03/13/AndFix支持multidex解决方案/?utm_source=tuicool&utm_medium=referral,用这个脚本就可以解决上面问题。

三、就算按照上面的解决了多个so的问题,在实际中还是对于不同的android版本,机型还是出现了不兼容,我大概尝试了十几个手机,只有四个可以修复,其他的修复直接闪退,再也启动不起来。

解决办法:

在你的gradle里配置如下

release {
    ndk {
        abiFilters "armeabi"
        abiFilters "armeabi-v7a"
        abiFilters "mips"
        abiFilters "mips64"
        abiFilters "x86"
        abiFilters "x86_64"
    }
}

加上这个以后就可以解决很多的兼容问题,发现andfix对于arm64-v8a兼容有问题,很多小米三星和魅族都会修复闪退,这里配置是为了指定在架构上运行,当没有配置arm64-v8a就会自动找armeabi里的so,这个问题困扰了我好久才找到的解决办法。

四、混淆问题

一定要在你的混淆配置文件里加上

-printmapping mapping.txt
-keep class * extends java.lang.annotation.Annotation
-keepclasseswithmembernames class * {
    native <methods>;
}

-keep class com.alipay.euler.andfix.** { *; }

打包好后会在build/outputs/mapping/..下面找到mapping文件,这个就是混淆的映射文件,下次打新的包时使用-applymapping mapping.txt参数就可以让混淆后的类名称和之前的一样了,如果不是很好理解这个可以android printmapping 、android applymapping      应该可以看到一些文章说明

五、还有就是下载apatch的策略设计,通过测试一次如果加载大于等于3个apatch包的时候会ANR,必须kill进程在重新启动才会正常,在子线程中也没解决,所以尽量在每个大版本里少放几个修复补丁,有更好的办法可以一起分享。

至此把用了两周时间研究并集成好的AndFix和大家分享了,期间会遇到各种各样的奇怪问题,建议不要直接在项目里调试,弄个测试工程所有的都解决了在去放到项目里,要不会遇到各种奇怪问题。(我也是头疼了好久 )

个人感觉这个技术还不是很成熟,已经集成的还会有诸多的兼容问题反馈的,我会及时在这里和大家分享,这个工具还是有很多局限性的不支持新增类so等等一些问题,但是的确是黑科技了,但是目前还不能依赖这个工具解决所有问题,一些紧急bug还是可以用一下的。

我想到的一些思路是结合DexClassLoader,把lib - libxxx.so 先复制一份,再合并,不过这样更新了so,也不能即时生效。得重启app了。(只是模糊的一个想法,欢迎大家吐槽),最后分享一下其他各大热补丁的方案分析和比较http://blog.zhaiyifan.cn/2015/11/20/HotPatchCompare/

以上是我和大家分享的,希望以后和大家一起分享交流学习。

转载于:https://my.oschina.net/vzhou/blog/652265

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值