美文网首页
阿里热修复(记录)

阿里热修复(记录)

作者: 徘徊0_ | 来源:发表于2018-10-11 11:36 被阅读0次

    阿里热修复

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

    一、使用

    先说一下使用方式,我是在项目中写了一个空指针的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 <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"); 该位置。如果每次运行,改文件存在,就会进行修复。

    相关文章

      网友评论

          本文标题:阿里热修复(记录)

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