目录
写在前面
上一篇《Android热修复技术简介》中对Android的热修复技术的概念和常用的技术方案做了一个简单的介绍,那么今天就来实战一下热修复技术,我们使用的是AndFix,为什么是它?因为无论是从使用上还是原理上AndFix都是相对简单的,毕竟这是实战的第一篇,还是要有个由易到难的过程的,好了,话不多说,开始吧!
一、AndFix基本介绍
1.1、AndFix简介
AndFix项目地址:https://github.com/alibaba/AndFix,大家访问这个地址去看它的详细介绍,我这里只是简单的列一下:
- 阿里巴巴开源的Android热修复工具,Android hot fix的缩写,旨在帮助开发者修复线上应用出现的BUG
- 支持2.3-7.0,ARM和X86架构,Dalvik和Art运行时(注意某些机器上可能还是不兼容的)
- Andfix生成的差异包的后缀名是 .apatch,可以将差异包从server分发到client去修复BUG
- AndFix只能用于方法级别的替换,修复方法中产生的BUG,使用场景有限。它通过自定义注解的方式来判断哪些方法需要被替换,替换时是通过Native层的方法去完成替换的,所以这也就造成了AndFix的兼容性其实并没有那么强,因为Native层可能会随着API版本不同而改变,不同的运行时机制都需要重新适配。
1.2、AndFix方法体替换规则

1.3、AndFix BUG修复过程

二、AndFix代码实战
2.1、AndFix集成
添加AndFix依赖,这一步没啥好说的,直接到它的GitHub主页上去复制就OK了:
//引入AndFix模块
implementation 'com.alipay.euler:andfix:0.5.0@aar'
2.2、AndFix初始化
根据GitHub文档上的How to use这一部分的说明,我们来对AndFix做初始化操作。这里创建一个类AndFixPatchManager来统一管理AndFix所有的API,这样做一是为了方便管理,二是为了可以降低AndFix对我们代码的侵入性:
/**
* 作者:created by Jarchie
* 时间:2020/5/22 14:33:16
* 邮箱:jarchie520@gmail.com
* 说明:管理AndFix所有的API
*/
public class AndFixPatchManager {
private static AndFixPatchManager mInstance = null;
private static PatchManager mPatchManager = null;
//单例模式双检查机制
public static AndFixPatchManager getInstance(){
if (mInstance == null){
synchronized (AndFixPatchManager.class){
if (mInstance == null){
mInstance = new AndFixPatchManager();
}
}
}
return mInstance;
}
//初始化AndFix方法
public void initPatch(Context context){
mPatchManager = new PatchManager(context);
mPatchManager.init(Utils.getVersionName(context));
mPatchManager.loadPatch();
}
//加载Patch文件
public void addPatch(String path){
try {
if (mPatchManager!=null){
mPatchManager.addPatch(path);
}
}catch (Exception e){
e.printStackTrace();
}
}
}
这里面用到了一个Utils.getVersionName()的工具方法,这个方法就是来获取应用版本信息的:
//获取版本名称
public static String getVersionName(Context context) {
String versionName = "1.0.0";
try {
PackageManager pm = context.getPackageManager();
PackageInfo pi = pm.getPackageInfo(context.getPackageName(), 0);
versionName = pi.versionName;
} catch (Exception e) {
e.printStackTrace();
}
return versionName;
}
然后在项目的Application类中调用上面写好的初始化方法即可完成AndFix的初始化操作:
/**
* 作者:created by Jarchie
* 时间:2020/5/22 14:40:30
* 邮箱:jarchie520@gmail.com
* 说明:自定义的Application类
*/
public class BaseApp extends Application {
@Override
public void onCreate() {
super.onCreate();
//完成AndFix的初始化
initAndFix();
}
private void initAndFix() {
AndFixPatchManager.getInstance().initPatch(this);
}
}
2.3、构建APK
2.3.1、构建异常APK
①、创建布局
先来创建一个布局文件activity_main.xml,内容很简单,两个按钮,一个模拟异常场景,一个模拟修复场景:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/mCreateBug"
android:layout_width="match_parent"
android:layout_height="45dp"
android:layout_margin="20dp"
android:background="@color/colorPrimary"
android:gravity="center"
android:text="生成BUG"
android:textColor="#fff" />
<TextView
android:id="@+id/mFixBug"
android:layout_width="match_parent"
android:layout_

本文详细介绍了AndFix热修复工具的使用方法及其实现原理,包括集成步骤、BUG修复流程和源码分析。AndFix由阿里巴巴开源,支持Android 2.3至7.0版本,适用于ARM和X86架构。文章通过实战演示了如何构建差异包并修复应用中的BUG,同时深入剖析了AndFix的源码,解释了其工作流程。
最低0.47元/天 解锁文章
1033

被折叠的 条评论
为什么被折叠?



