阿里热修复(记录)

2018-10-11  本文已影响0人  徘徊0_

阿里热修复

近端时间,看了看 阿里的热修复,记录一下集成的步骤也方便自己查阅:

一、使用

先说一下使用方式,我是在项目中写了一个空指针的bug,来测试,下面会说明这些文件是怎么来的

//注:此时的fix.apatch文件,也就是差分包,阿里热修复需要使用到的,下面会说明怎么生成该文件。
      File fixFile = new File(Environment.getExternalStorageDirectory() + File.separator + "fix.apatch");
        if (fixFile.exists()) {
            try {
                MyApplication.mPathManager.addPatch(fixFile.getAbsolutePath());//在这里调用addPatch方法
                showShortToast("热修复成功!");
            } catch (IOException e) {
                e.printStackTrace();
                showShortToast("热修复失败!");
            }
        }
        //注意,这里会报空指针异常(此时生成一个old.apk , 也就是存在bug的apk)
        mBtn.setText("11");
//注:此时的fix.apatch文件,也就是差分包,阿里热修复需要使用到的,下面会说明怎么生成该文件。
      File fixFile = new File(Environment.getExternalStorageDirectory() + File.separator + "fix.apatch");
        if (fixFile.exists()) {
            try {
                MyApplication.mPathManager.addPatch(fixFile.getAbsolutePath());
                showShortToast("热修复成功!");
            } catch (IOException e) {
                e.printStackTrace();
                showShortToast("热修复失败!");
            }
        }
        //注意,此时将这行代码注掉
       // mBtn.setText("11");

二、集成项目

1、添加依赖到项目中:
implementation 'com.alipay.euler:andfix:0.5.0@aar',也可以到上面官网去查看最新的依赖。

2,在自己项目的Application中,添加以下初始化代码

public static PatchManager mPathManager;
    @Override
    public void onCreate() {
        super.onCreate();
        //阿里热修复
        mPathManager = new PatchManager(this);
        mPathManager.init("1");//当前应用版本(可以通过PackageManager获取)

        //加载之前的patch包
        mPathManager.loadPatch();
    }

三、准备apk(需要生成签名包)

1,需要一个有bug的Old,也就是存在问题的apk(需要签名)。
2,准备已修复bug的新的apk(需要签名)。
3,到官网阿里热修复,下载tools,下图的文件(并解压)

tools.png

4,将准备的apk,和打包时的签名文件,拷贝到解压出来的文件夹下:


image.png

四、执行下面的命令

在tools文件夹下打开命令窗口,输入下面的命令:

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>        新的apk(无bug)
 -k,--keystore <loc>    keystore path.(签名打包秘钥)
 -n,--name <name>       patch name.
 -o,--out <dir>         生成的补丁文件所放的文件夹
 -p,--kpassword <***>   keystore password.(签名打包秘钥的密码)
 -t,--to <loc>          旧版apk(存在bug)

我的输入的命令为(命令解释可以看上面),出现如下图的add,即为成功,输出的文件(也就是差分包)在该目录的out文件夹下:

执行命令.png 输出文件后缀为:apatch.png

将生成的文件fix.apatch放置到手机里面,也就是步骤1的
File fixFile = new File(Environment.getExternalStorageDirectory() + File.separator + "fix.apatch"); 该位置。如果每次运行,改文件存在,就会进行修复。

上一篇 下一篇

猜你喜欢

热点阅读