基于AndFix的热修复 成功后简单的总结总结错失

首先了解热修复是什么东西??

就我自己简单的理解:就是不需要重新打包 发布到市场 然后再让用户重新下载就可以把一些小bug和需求通过补丁的形式进行修改。

然后现在的热修复方式有大致的三种:

     1.dexposed   github https://github.com/alibaba/dexposed

2.andfix   github https://github.com/alibaba/AndFix

3.bsdiff  http://blog.csdn.net/lazyer_dog/article/details/47173013

但是我现在只先搞定了一种 ,andfix。。。以后再慢慢来

首先AndroidStudio的导入路径:compile 'com.alipay.euler:andfix:0.3.1@aar'

在程序的入口处初始化PatchManager 一般在BaseApp里面进行初始化:

public class MainApplication extends Application {
    private static final String TAG = "euler";

    private static final String APATCH_PATH = "/out.apatch";

    private static final String DIR = "apatch";//补丁文件夹
    /**
     * patch manager
     */
    private PatchManager mPatchManager;

    @Override
    public void onCreate() {
        super.onCreate();
        // initialize
        mPatchManager = new PatchManager(this);
        mPatchManager.init("1.0");

        //加载已经有了的路径
        mPatchManager.loadPatch();

        try {
            String patchFileString = Environment.getExternalStorageDirectory()
                    .getAbsolutePath() + APATCH_PATH;
            //添加新的路径
            mPatchManager.addPatch(patchFileString);
            
            //复制且加载补丁成功后,删除下载的补丁
            File f = new File(this.getFilesDir(), DIR + APATCH_PATH);
            if (f.exists()) {
                new File(patchFileString).delete();
            }
        } catch (IOException e) {
            Log.e(TAG, "", e);
        }

    }

}

对了 ,记得一定要在清单文件里面注册哦 ~ 不要粗心 

补丁文件保存的路径就是mPatchManager.addPatch("");的路径。然后如果需要更新应该会给一个补丁下载的地址 把补丁保存到你设置好的这个路径里面,重新启动程序就可以把补丁加载进去了,每次加载补丁后 把补丁进行删除,防止每次进程序都会去加载补丁。

然后重点是补丁的生成,,在这一步有点有失误。。希望能够给你们一点提醒

生成path文件的工具就是apkpatch-1.0.3 具体的下载地址 https://github.com/alibaba/AndFix 可以在这里面找到


然后就是生成补丁文件

先进入到apkpatch所在的文件夹  如果输入apkpatch显示如下 是对的  


然后可以把你要合并的两个apk 和你的密钥库文件都放到里面来 方便 命令的输入

命令 : apkpatch.bat-fnew.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 用户别名密码


然后要注意的是 andfix 不能修改成员变量 也不能修改布局文件 

在你打包的时候 两个apk包必须都是用同样的打包方式 debug 或者release 如果两个不相同的话,会报错 ,因为两次生成的buildConfig是不同的,修改了成员变量然后就会报错,产生不了补丁文件。


如图所示 是成功的。




当你补丁文件产生成功后,把他移至你在程序入口定义的addPath()路径里面,第二次启动程序后就会修改你修改过的内容。



记得混淆代码:

-optimizationpasses 5                                                           # 指定代码的压缩级别
-dontusemixedcaseclassnames                                                     # 是否使用大小写混合
-dontskipnonpubliclibraryclasses                                                # 是否混淆第三方jar
-dontpreverify                                                                  # 混淆时是否做预校验
-verbose                                                                        # 混淆时是否记录日志
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*        # 混淆时所采用的算法

#重要,別忘了這些,不混淆andfix包,不混淆native方法
-dontwarn android.annotation
-dontwarn com.alipay.euler.**
-keep class com.alipay.euler.** {*;}
-keep class * extends java.lang.annotation.Annotation
-keepclasseswithmembernames class * {
    native <methods>;
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值