简单明了的AndFix热修复实例

版权声明:转载附上链接 https://blog.csdn.net/generallizhong/article/details/88734319

简单介绍:热修复是在近几年非常火爆的,不管是阿里,腾讯都有自己的热修复架构,当上线一个版本后发现版本有BUG,这时候如果修改掉BUG再打版本再上线,还要让用户重新下载安装,这样的用户体验是很不好的,所以也就产生了热修复,修改BUG后使用热修复,在用户察觉不到的情况下修复BUG,也就不需要用户再下载,覆盖安装,大大提升了用户体验。在最后附上DEMO

这里主要是介绍阿里使用的AndFix热修复,虽然简单,也算是做个笔记。

如果项目中没有热修复依赖项,就必须先下载一个依赖项:

CSDN下载链接:下载链接   需要积分 无法设置0积分

百度网盘:下载链接    提取码:ddw5

这里以一个简单实例介绍:

1、实例目录

2、在我们主界面中写一个热修前的版本,修改前的版本

**
 * by https://blog.csdn.net/generallizhong
 */
public class MainActivity extends Activity {
    TextView tv;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView) findViewById(R.id.tv);
        Toast();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        android.os.Process.killProcess(android.os.Process.myPid());
    }

    //需要打包两个apk,一个是修复前的apk也就是上线有bug的,另一个是修复后的apk
    private void Toast() {
        tv.setText("热修前");
        Toast.makeText(this, "热修复前的程序", Toast.LENGTH_SHORT).show();

    }
}

3、这里是修改BUG后的版本,也就是热修复的版本

/**
 * by https://blog.csdn.net/generallizhong
 */
public class MainActivity extends Activity {
    TextView tv;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView) findViewById(R.id.tv);
        Toast();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        android.os.Process.killProcess(android.os.Process.myPid());
    }

    //需要打包两个apk,一个是修复前的apk也就是上线有bug的,另一个是修复后的apk
    private void Toast() {
        tv.setText("热修后");
        Toast.makeText(this, "热修复后的程序", Toast.LENGTH_SHORT).show();
    }
}

两个版本中:修改前的名为1.apk,修改后的版本为2.apk

这里将1.apk版本运行一次,也就是有BUG版本执行一次

3、这一步是最重要的了,这里我介绍两种方法

第一种就是用到apkpatch-1.0.3 ,这个在项目里面有,也可以网上自行下载一个

在apkpatch-1.0.3中把你生成的1.apk 和2.apk复制到apkpatch-1.0.3文件中,把你的签名文件:**.keystore也复制到apkpatch-1.0.3文件中

然后就要用到CDM命令了

上面输入的命令行:
apkpatch -f 2.apk -t 1.apk -o output1 -k andfix.jks -p 123456 -a key0-e 123456 


命令行意思:

apkpatch -f  apk为1.apk,新的apk为2.apk, -o表示补丁的输出目录,-k表示keystore, -p表示keystore的密码,-a表示alias, -e表示entry password。
编译成功后会出现这样一个文件

看到这个后是不是感觉超级麻烦,命令中一不小心还弄错了,没得关系,还有一种办法给整合好了直接用,方便得很

第二种就是直接通过软件生成

CSDN下载地址:下载

百度网盘下载地址:下载     提取码:4vxp

是不是感觉很方便

生成后可改名为out.apatch,也可以不改

4、把我们生成的out.apatch复制到我们SD卡的根目录下

将有BUG版本程序进程关闭后再打开,就会发现已经替换为2.apk的修改后版本了。这里成功图就不放上来了,有兴趣的话可以自己试试看。

这里是手动模拟完成,正常使用需将文件上传到服务器,然后通过下载方式用代码将out.apatch文件放到SD卡根目录下

DEMO附上:

CSDN 下载地址:下载

百度网盘下载地址:下载     提取码:73vv

Andfix并不能修复所有情况下出现的bug

局限性:无法添加新类和新的字

猜你喜欢

转载自blog.csdn.net/generallizhong/article/details/88734319