热修复框架--AndFix使用

1介绍

AndFix,全称Android hot-fix,它是阿里开源的一个热补丁框架,允许APP在不重新发布版本的情况下修复线上的bug。支持Android 2.3 到 6.0,并且支持arm 与 X86系统架构的设备。完美支持Dalvik与ART的Runtime。

git地址:https://github.com/alibaba/AndFix

关于AndFix的实现原理和修复流程这里暂且不看,git上有关于他的介绍流程图。我们重点来看如何使用。

2使用

首先我们新建一个工程,MainActivity代码很简单:

public class MainActivity extends Activity {

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		show();
	}

	private void show() {
		// TODO Auto-generated method stub
		Toast.makeText(getApplicationContext(), "no fix", Toast.LENGTH_SHORT).show();
	}

自定义一个类继承Application:

public class MainApplication extends Application {
	private static final String TAG = "euler";

	private static final String APATCH_PATH = "/out.apatch";
	/**
	 * patch manager
	 */
	private PatchManager mPatchManager;
	private String appversion;
	@Override
	public void onCreate() {
		super.onCreate();
		try {
		appversion= getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
		} catch (NameNotFoundException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		// 初始化
		mPatchManager = new PatchManager(this);
		mPatchManager.init(appversion);
		Log.d(TAG, "inited.");

		// 加载路径
		mPatchManager.loadPatch();
		Log.d(TAG, "apatch loaded.");

		//加载补丁文件 
		try {
			// .apatch file path
			String patchFileString = Environment.getExternalStorageDirectory()
					.getAbsolutePath() + APATCH_PATH;
			mPatchManager.addPatch(patchFileString);
			Log.d(TAG, "apatch:" + patchFileString + " added.");
		} catch (IOException e) {
			Log.e(TAG, "", e);
		}

	}
}

框架的内容可直接参照git如何进行依赖,也可以下载git上面src下的源码添加到自己的工程里面。

工程建完就可以导出了,命名为test1.apk 。作为一个有bug的软件。然后修改show()方法内容:

Toast.makeText(getApplicationContext(), "had fix", Toast.LENGTH_SHORT).show();

同时修改程序版本号为2.0。打包导出test2.apk。安装test1.apk,运行看到toast内容。

接下来就需要制作补丁文件了。官方为我们提供了一个工具git 上的tools文件夹下有个apkpatch-1.0.3,就是用他了。

里面的.bat .sh分别对应windows系统和 苹果系统。先把两个apk文件和keystore复制到该文件夹里面,执行命令行:

apkpatch.bat -f new.apk -t old.apk -o output1 -k debug.keystore -p android -a androiddebugkey -e android

来看下几个命令的意思:

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

以上命令缺一不可。就会生成一个out1的文件夹,看下里面有个.apatch后缀的文件就是我们需要的补丁了。把他放到手机的SD卡根目录,记得修改名称与代码里路径的文件名称一致!

然后再次运行程序就会看到toast的内容变为了had fix!恭喜成功了!

3优缺点分析

AndFix理论上支持2.3-6.0的手机,但是不支持YunOS系统的手机。他的优点就是补丁包容易编写,并且修复完了不用重启应用!

在安全性上AndFix也做到了,比如如果别人用补丁要替换你的应用里的方法,框架内部会对补丁的签名和当前应用的签名有一个校验。在对指纹的MD5上也有一个匹配,保证你的APP程序不会被篡改。

下面是框架对一些方法的支持程度。(图片来自互联网,真实性还未验证)

对于AndFix暂时先看到这里,有机会去读一下源码,分析一下原理。

 

转载于:https://my.oschina.net/tomcater/blog/704252

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值