一、将系统的 dexElements 与 应用的 dexElements 合并、二、Element[] dexElements 替换操作、三、完整 dex 加载源码
原创 2022-03-08 15:18:36
117阅读
热修复:热修复(也称热补丁、热修复补丁,英语:hotfix)是一种包含信息的独立的累积更新包,通常表现为一个或多个文件。这被用来解决软件产品的问题(例如一个程序错误)。——维基百科目前的热修复框架:1.阿里Dexposed2.阿里AndFix -- native解决方案3.QQ空间--Dex插桩方案(大众点评的Nuwa参考其实现并开源)4.美团Robust -- Instant Run 热插拔阿里
转载 2024-04-07 06:09:34
55阅读
一、dex 文件准备、二、加载 dex 文件流程、三、Element[] dexElements 分析、四、反射获取系统的 Element[] dexElements
原创 2022-03-08 15:49:27
95阅读
一、通过反射获取 "宿主" 中的 Element[] dexElements、1、反射获取 BaseDexClassLoader.class、2、反射获取 DexPathList pathList 字段、3、反射获取 DexPathList pathList 对象、4、获取 DexPathList pathList 对象、5、反射获取 Element[] dexElements 字段、6、反射获取 Element[] dexElements 对象、
原创 2022-03-08 10:21:18
167阅读
一、通过反射获取 "插件包" 中的 Element[] dexElements、1、反射获取 BaseDexClassLoader.class、2、反射获取 DexPathList pathList 字段、3、反射获取 DexPathList pathList 对象、4、获取 DexPathList pathList 对象、5、反射获取 Element[] dexElements 字段、6、反射获取 Element[] dexElements 对象、
原创 2022-03-08 10:21:17
197阅读
一、加载 Dex 文件到内存中、1、文件处理、2、加载修复包 Dex 到内存、3、获取系统类加载器、4、反射获取系统的 Element[] dexElements、5、反射获取自己加载的 修复包 Dex 的 Element[] dexElements、二、本博客涉及代码、三、 源码资源、
原创 2022-03-08 11:39:55
988阅读
一、合并两个 Element[] dexElements、二、 完整修复包加载工具类、三、 源码资源、
原创 2022-03-08 11:42:34
157阅读
一、合并 “插件包“ 与 “宿主“ 中的 Element[] dexElements、1、获取 “插件包“ 与 “宿主“ 中的 Element[] dexElements 数组长度、2、获取数组元素类型 Element、3、计算合并后的 Element[] dexElements 数组长度、4、创建 Element[] 数组、5、拷贝 Element[] 数组元素、6、完整代码、二、设置 “宿主“ 中的 Element[] dexElements
原创 2022-03-08 10:21:16
129阅读
一、不同 Android 系统创建 dex 数组源码对比、二、不同 Android 系统创建 dex 数组源码对比、三、 Android 5.1 及以下系统反射方法并创建 Element[] dexElements、四、 Android 6.0 及以下系统反射方法并创建 Element[] dexElements、五、 完整代码示例
原创 2022-03-08 15:18:37
165阅读
1:替换DexElements流程:插件化原理:插件生成apk,宿主通过反射机制和类加载器(传入插件apk),获取到插件的dexElements,并将dexElements合并到宿主的类加载器的dexElements,这样插件所有的class都位于宿主的类加载器里面,达到宿主可以启动插件的目的。 启动插件普通类代码流程:1)Plugin module:public class Test
思路:将修复好的classes2.dex下载到本机,并替换有bug的.dex文件实现步棸:1.创建BaseDexClassLoader的子类DexClassLoader加载器2.加载修复好的classes2.dex文件(服务器下载)3.将自有的和系统的dexElements合并成新的dexElements数组,并设置自有的dexElements优先级4.通过反射技术赋值给系统的pathList下面
return null;}4、在这个方法中,会去循环遍历dexElements,然后调用Element的findClass方法;那么这个dexElements是啥呢?在DexPathList构造方法中对其进行了赋值:public DexPathList(ClassLoader definingContext, String dexPath, String librarySearchPath, Fi
转载 2024-09-06 07:36:44
62阅读
安卓手写热修复demo目录用[TOC]`来生成目录: 安卓手写热修复demo目录预备知识demo码云地址实现步骤1获取系统dexElements2加载外部Dex文件3将外部dex文件中的dexElements与系统dexElements合并修复效果测试定义测试建立热修复dex文件 demo:码云地址 在预备知识中可以了解到安卓初次加载类调用链如下 PathClassLoader.findClas
与RePlugin不同,它进行了Framework层的hook。ClassLoader:通过配置,它可以将宿主的ClassLoader中的dexElements数组插入到插件的DexClassLoader的dexElements数组的前面,可以让Dex也能加载宿主中的类。Resources:通过配置,可以让宿主的Resources对象访问插件的资源,也可以自己创建插件中的Resources对象,让
转载 2024-03-20 21:11:24
30阅读
} return clazz; }#DexPathList public Class findClass(String name) { for (Element element : dexElements) { DexFile dex = element.dexFile;if (dex != null) { Class clazz = dex.loadClassBinaryName(na
转载 9月前
21阅读
引言ClassLoader主要是用来加载插件用的,在启动插件前首先要把插件加载进来,下面我们通过不同方案分析,了解加载的不同姿势~ 方案1:合并Dex(hook方式) 谁用了这个方案?QQ团队的空间换肤功能 原理将我们插件dex和宿主apk的class.dex合并,都放到宿主dexElements数组中。App每次启动从该数组中加载。 实战流程1)获取宿主,dexElements 2)获取插件,
原创 2022-02-06 14:58:42
219阅读
可以看到上图中,将修复后的Test.class类打包进patch.dex中,然后放入了dexElements的最前面,当虚拟机加载Test.class时,会按顺序
原创 2024-07-25 11:54:31
45阅读
引言ClassLoader主要是用来加载插件用的,在启动插件前首先要把插件加载进来,下面我们通过不同方案分析,了解加载的不同姿势~方案1:合并Dex(hook方式)谁用了这个方案?QQ团队的空间换肤功能原理将我们插件dex和宿主apk的class.dex合并,都放到宿主dexElements数组中。
原创 2021-09-23 16:49:11
421阅读
本文来自网易云社区 作者:郑文 首先我们并不在讨论车牌号.本文尽量避免谈论重复的技术点,只探讨一下multidex提供给我们的技术启示。 原理 multidex技术原理可以分成两个部分: 在app启动时,通过Multidex.install api,扩展ClassLoader的dexElements
转载 2018-08-31 13:26:00
64阅读
2评论
文章目录1. 前言2. 将外部dex加载到宿主app的dexElements中3. 插件中四大组件的调用思路4. Hook2.1 对startActivity进行Hook2.1.1 AMS2.1.2 源码分析2.1.2.1 得到AMS实例对象2.1.3 对startActivity进行Hook2.1.3.1 创建AMS的代理对象5. References6. 完整代码 1. 前言在Android
  • 1
  • 2