最详细的Alibaba-AndFix 热修复框架的使用

声明一点,这里只是使用,需要原理的话待下篇

  • AndFix介绍
  • AndFix框架的使用

AndFix介绍

AndFix,全称是Android hot-fix。是阿里开源的一个Android热补丁框架,允许APP在不重新发布版本的情况下修复线上的bug。注意:支持Android 2.3 到 6.0,我用7.0手机遇到了坑,提醒各位注意。

附上框架网址一枚:https://github.com/alibaba/AndFix 有需要的朋友可以去下载

作为现在Android界最火的技术,我也给大家慢慢详细介绍,希望耐心看完

Android 热修复 修復空指針 android热修复框架_android

一个很明显的bug,5/0肯定会出现问题,所以我们就需要把这个问题在不更新版本的情况下,把这个bug给解决。

AndFix框架的使用

说的再多,不如动手一试。现在就开始

使用简单的符号标识不同的标题,将某些文字标记为粗体或者斜体,创建一个链接等,详细语法参考帮助?。

第一步:添加依赖

dependencies {
    compile 'com.alipay.euler:andfix:0.5.0@aar'
}

第二步:老生常谈,当然是在Application中初始化(顺带说一句,第三方的几乎都需要初始化)

public class AppApplication extends Application{

    public static PatchManager patchManager;

    @Override
    public void onCreate() {
        super.onCreate();

        initHotFix();
    }

    private void initHotFix() {

        // 初始化patch管理类
        patchManager = new PatchManager(this);
        // 初始化patch版本  此地方是获取当前版本
        patchManager.init(getVersion());
        // 加载已经添加到PatchManager中的patch
        patchManager.loadPatch();
    }

    private String getVersion() {
        PackageManager packageManager = getPackageManager();
        try {
            PackageInfo packageInfo =  packageManager.getPackageInfo(getPackageName(), 0);
            return  packageInfo.packageName;
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
            return  "";
        }
    }
}

第二步:初始化完毕,那么就能使用了,这里做的是一个演示,实际情况需要走接口进行下载

第二步有话说:
1、这只是一个演示,直接放到了SD卡目录,记得添加权限
2、AppApplication.patchManager.addPatch(file.getAbsolutePath());通过此代码把生成的差分包添加到我们项目中,其实说白了,就是之前的出错的代码不执行了,执行差分包里面的代码!
3、还有个细节需要注意一下:当apk版本升级,需要把之前patch文件的删除,需要以下操作,不删的话会出现意想不到错误。

//删除所有已加载的patch文件
AppApplication.patchManager.removeAllPatch();

使用

public class MainActivity extends AppCompatActivity {

    private Button btn_go;
    private TextView tv_answer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //获取差分包 实际情况是从后台服务器获取,我们这里只是做一个简单演示,直接放在SD卡了
        File file = new File(Environment.getExternalStorageDirectory()+File.separator+"fix.apatch");
        if(file.exists()){
            //添加patch,只需指定patch的路径即可,补丁会立即生效
            try {
                AppApplication.patchManager.addPatch(file.getAbsolutePath());
                Toast.makeText(this,"修复成功",Toast.LENGTH_SHORT).show();
            } catch (IOException e) {
                e.printStackTrace();
                Toast.makeText(this,"修复失败",Toast.LENGTH_SHORT).show();
            }

        }

        tv_answer = (TextView) findViewById(R.id.tv_answer);
        btn_go = (Button) findViewById(R.id.btn_go);

        btn_go.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                tv_answer.setText("答案:答案出现错误,除数不能为0"+5/0);
            }
        });
    }
}

第三步:差分包的生成

使用工具:apkpatch-1.0.3 (https://github.com/alibaba/AndFix/tree/master/tools)
原理:所谓差分包就是通过新版本和旧版本进行对比,生成一个差异文件,就是所谓的补丁文件即patch文件。

1、工具下载解压:

Android 热修复 修復空指針 android热修复框架_AndFix_02

2、命令行(前提需要打两个包,一个新版本一个旧版本)
首先先cd 到工具目录
然后执行 apkpatch.bat -f new.apk -t old.apk -o out -k hotfix.jks -p android -a 热修复 -e android(这是我自己的)

Android 热修复 修復空指針 android热修复框架_框架_03

3、这里做一个命令行的解释:

apkpatch.bat -f new.apk -t old.apk -o out -k hotfix.jks -p android -a 热修复 -e android

-f <new.apk> :新版本
-t <old.apk> : 旧版本
-o <output> : 输出目录
-k <keystore>: 打包所用的keystore
-p <password>: keystore的密码
-a <alias>: keystore 用户别名
-e <alias password>: keystore 用户别名密码

总结

这里就是一个简单的使用,不涉及原理,尝试一下,待下篇的原理篇
读万卷书,不如行万里路

源码

源码下载