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

来源:互联网 发布:ktv手机点歌软件 编辑:程序博客网 时间:2024/05/21 14:02

最详细的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界最火的技术,我也给大家慢慢详细介绍,希望耐心看完

这里写图片描述

一个很明显的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、工具下载解压:

这里写图片描述

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

这里写图片描述

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 用户别名密码

总结

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

源码

源码下载