Android中热修复框架Robust原理解析+并将框架代码从 闭源 变成 开源 上篇

本文深入解析美团团队开发的Android热修复框架Robust,介绍其原理、案例实践并展示如何将框架从闭源变为开源。Robust通过动态加载机制实现热修复,核心在于自动插入修复代码。文章提供了详细的实现步骤,并通过反编译美团App验证了实现的正确性,预告下篇将探讨自动插入修复代码的实现。
摘要由CSDN通过智能技术生成
               

一、前言

Android中热修复框架比较多,每家公司都有对应的方案和框架,比如阿里的AndFix框架,关于这个框架在之前的文章已经详细讲解了,不了解的同学可以点击这里:AndFix热修复框架原理分析 。本文继续来看另外一个热修复框架,也就是美团团队开发的Robust框架。关于这个框架网上已经有详细解释了,具体用法也有。不过他没有开源,所以本文就先简单介绍他的原理,用一个案例来演示这个框架的作用,但是重点是咋们自己编码将其框架机制实现,让其"闭源"变成"开源"。


二、原理解析

关于热修复技术点,其实虽然每家都有对应的框架,但是核心点都离不开动态加载机制。有了动态加载机制,然后就是具体修复方案问题了,对于Robust修复方案也是比较简单的。下面来简单看一下他的大致原理:

Robust插件对每个产品代码的每个函数都在编译打包阶段自动的插入了一段代码,插入过程对业务开发是完全透明。如State.java的getIndex函数:

public long getIndex() {    return 100;}

被处理成如下的实现:

public static ChangeQuickRedirect changeQuickRedirect;    public long getIndex() {        if(changeQuickRedirect != null) {            //PatchProxy中封装了获取当前className和methodName的逻辑,并在其内部最终调用了changeQuickRedirect的对应函数            if(PatchProxy.isSupport(new Object[0], this, changeQuickRedirect, false)) {                return ((Long)PatchProxy.accessDispatch(new Object[0], this, changeQuickRedirect, false)).longValue();            }        }    return 100L;}

可以看到Robust为每个class增加了个类型为ChangeQuickRedirect的静态成员,而在每个方法前都插入了使用changeQuickRedirect相关的逻辑,当changeQuickRedirect不为null时,可能会执行到accessDispatch从而替换掉之前老的逻辑,达到fix的目的。如果需将getIndex函数的返回值改为return 106,那么对应生成的patch,主要包含两个class:PatchesInfoImpl.java和StatePatch.java。

PatchesInfoImpl.java:

public class PatchesInfoImpl implements PatchesInfo {    public List<PatchedClassInfo> getPatchedClassesInfo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值