阿里热修复(记录)

阿里热修复

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

一、使用

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

  • 空指针bug(生成一个存在问题的old.apk)存在的代码如下:
//注:此时的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");
  • 修复后生成一个新的apk,代码如下:
//注:此时的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  -t  -o  -k  -p <***> -a  -e <***>
 -a,--alias      keystore entry alias.(签名的别名)
 -e,--epassword <***>   keystore entry password.(签名的密码)
 -f,--from         新的apk(无bug)
 -k,--keystore     keystore path.(签名打包秘钥)
 -n,--name        patch name.
 -o,--out          生成的补丁文件所放的文件夹
 -p,--kpassword <***>   keystore password.(签名打包秘钥的密码)
 -t,--to           旧版apk(存在bug)

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

执行命令.png

输出文件后缀为:apatch.png

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

你可能感兴趣的:(阿里热修复(记录))