AndFix实现原理详解[一]

作者: e0uoq | 来源:发表于2016-05-20 18:46 被阅读905次

    AndFix应用案例接入过程

    AndFix是阿里巴巴支付宝团队推出的热修复project。利用这个功能我们交付给用户的版本不再是覆水难收了,具备热修复的能力。
    1、demo演示和说明

    • 文件清单列表

    下载文件解压后,目录文件清单如下,因为patch文件路径是hardcode在/sdcrad/out.patch,使用时确保放在这个路径。

    目录下文件 介绍 操作说明
    /APK/app-release.apk 线上使用着的apk(有bug存在) 请安装到手机上
    /APK/app-release_fix.apk 修改bug后签名打包的apk 不用安装,生成patch时用到
    /apatchtools/apkpatch.sh 生成patch工具类 使用下面接入步骤的命令即可生成.apatch文件到指定目录
    /apatch/out.apatch fixbug后生成的patch文件 请放在 /sdcrad/out.patch
    sourcecode 源码 如果要修改apatch指定路径可以修改源码演示

    2、接入步骤
    一、配置 gradle依赖

    dependencies { compile 'com.alipay.euler:andfix:0.3.1@aar'}
    
    • 1 . 初始 PatchManager:
    patchManager = new PatchManager(context);
    patchManager.init(appversion);//current version
    
    • 2 . 加载 patch. 选择尽早的时机做加载,such as application.oncreate():
    patchManager.loadPatch();
    
    • 3 . 加载 patch. 下载path完毕后即可加载patch
    //path of the patch file that be downloaded
    patchManager.addPatch(path);
    

    二、ProGuard

    • Andfix使用到的native方法类
    com.alipay.euler.andfix.AndFix
    
    • 注解保留
    com.alipay.euler.andfix.annotation.MethodReplace
    
    • 添加混淆文件声明
    -keep class * extends java.lang.annotation.Annotation-keepclasseswithmembernames class * { native <methods>;}
    

    三、使用生成patch工具类命令

    usage: 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.
    

    使用举例:(win环境下对应修改路径也是一样的)

    ./apkpatch.sh -f /Users/e0uoq/AndfixDemo2/app-release.apk -t /Users/e0uoq/AndfixDemo2/app/app-release.apk -o /Users/e0uoq/andfixpatch -k /Users/e0uoq/andfixkey.jks -p andfix_key -a andfixsign -e andfix_sign
    

    此外还提供了apatch合并的命令,将多个apatch合并为一个

    usage: apkpatch 
    -m <apatch_path...> 
    -o <output> 
    -k <keystore> 
    -p <***> 
    -a <alias> 
    -e <***> 
    -a,--alias <alias> keystore entry alias. 
    -e,--epassword <***> keystore entry password. 
    -k,--keystore <loc> keystore path. 
    -m,--merge <loc...> path of .apatch files. 
    -n,--name <name> patch name. 
    -o,--out <dir> output dir. 
    -p,--kpassword <***> keystore password.
    

    下一节继续介绍:实现原理核心代码详解(davlik部分)

    ps:后面补上github地址。

    相关文章

      网友评论

        本文标题:AndFix实现原理详解[一]

        本文链接:https://www.haomeiwen.com/subject/xzpnrttx.html