【Android】美团robust原理分析

本文主要介绍了美团的Robust热修复框架的工作原理,包括基础包插桩、补丁加载、自动化补丁生成和补丁结构。通过javassist进行字节码操作,插入ChangeQuickRedirect静态变量和逻辑代码段,实现热修复。在补丁加载时,利用DexClassLoader加载补丁dex,并通过反射调整ChangeQuickRedirect对象的值。自动化补丁生成则涉及对修复代码的反射调用,确保补丁的有效执行。
摘要由CSDN通过智能技术生成

主流的热修复框架类型

(1)ClassLoader:将热修复的类放在dexElements[]的最前面,这样加载类时会优先加载到要修复的类以达到修复目的。如腾讯的Tinker、Nuwa等。

(2)Native hook:修改java方法在native层的函数指针,指向修复后的方法以达到修复目的。如阿里的Andifix、DexPosed等。

(3)Instant run:在编译打包阶段对每个函数都插入一段控制逻辑代码。就是今天我们要介绍的美团Robust实现原理。

1、基础包插桩

具体实现在gradle-plugin中。

原理:在class转dex的过程中会调用Transform,在该时机修改class对象,完成代码的注入。为每个类插入一个ChangeQuickRedirect类型的静态变量,在每个类的每个方法前插入一段关于该ChangeQuickRedirect静态变量的逻辑。

(1)PatchesInfoImpl 用于记录修改的类,及其对应的 ChangeQuickRedirect 接口的实现。

public class PatchesInfoImpl implements PatchesInfo {
    public List getPatchedClassesInfo() {
        List arrayList = new ArrayList();
        arrayList.add(new PatchedClassInfo("com.meituan.sample.robusttest.l", "com.meituan.robust.patch.SampleClassPatchControl"));
        arrayList.add(new PatchedClassInfo("com.meituan.sample.robusttest.p", "com.meituan.robust.patch.SuperPatchControl"));
        arrayList.add(new PatchedClassInfo("com.meituan.sample.SecondActivity", "com.meituan.robust.patch.SecondActivityPatchControl"));
        EnhancedRobustUtils.isThrowable = false;
        return arrayList;
    }
}

xxxPatchControl 是 Cha

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值