Andfix 热修复

先上andfix地址:

 https://github.com/alibaba/AndFix

一:项目接入

 implementation 'com.alipay.euler:andfix:0.5.0@aar'

 二:初始化

 这里可以在application中初始化,也可以放在按钮点击时才操作。

//创建对象        
PatchManager  patchManager=new PatchManager(this);
//初始化,传入appVersion
patchManager.init(SystemUtil.getVersionName(this));
//加载所有补丁包
patchManager.loadPatch();




//此处传入补丁包地址,一般从服务器获取后存入本地加载。
patchManager.addPatch(patchFileStr);


  这里有个问题,每次生成的补丁包的名字必须修改,因为源码中对文件名称进行了过滤:

/**
	 * add patch at runtime
	 * 
	 * @param path
	 *            patch path
	 * @throws IOException
	 */
	public void addPatch(String path) throws IOException {
		File src = new File(path);
		File dest = new File(mPatchDir, src.getName());
		if(!src.exists()){
			throw new FileNotFoundException(path);
		}
		if (dest.exists()) {
			Log.d(TAG, "patch [" + path + "] has be loaded.");
			return;
		}
		FileUtil.copyFile(src, dest);// copy to patch's directory
		Patch patch = addPatch(dest);
		if (patch != null) {
			loadPatch(patch);
		}
	}

  三:补丁包生成

   首先下载生成工具:

   https://github.com/alibaba/AndFix/raw/master/tools/apkpatch-1.0.3.zip

    解压如下:

  

  使用方法也十分简单,需要两个apk文件,第一个即线上包,第二个是修复bug的新的安装包。

扫描二维码关注公众号,回复: 6154964 查看本文章

  接着cmd切入当前解压文件路径:

  输入命令:

apkpatch -f xxx -t xxx -o xxxx -k xxx -p xxx -a xxx -e xxx

-f:新的安装包路径及名称(可将安装包统一放入解压工具这个目录)
-t:旧的安装包同上
-o:导出文件路径 如  D:\aptach
-k:jks文件 
-p:jks密码
-a:jks别名
-e:别名密码

 

  完成后目录如下:

可以看到除去两个apk文件以及jks文件和原有文件外,

生成了diff.dex文件,smali的空文件夹,以及名称为一个后缀为apatch的文件。

我们用到的就是后缀为apathch的文件。

猜你喜欢

转载自blog.csdn.net/qq_23025319/article/details/89520457