首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【Android 修复修复原理 ( 修复框架简介 | 将 Java 字节文件打包到 Dex 文件 )

文章目录 一、 修复框架简介 1、类替换 2、so 替换 3、资源替换 4、全平台支持 5、生效时间 6、性能损耗 7、总结 二、 将 Java 字节文件打包到 Dex 文件 一、 修复框架简介...---- 修复框架 : 修复框架有很多 , 只选择几个典型的进行对比研究 ; Tinker : 微信 ; QZone : Q 空间 ; AndFix : 阿里 ; Robust : 美团 ; 下面从几个方面的功能及性能分析上述四个修复框架...虚拟机中执行 ; 类替换就是将 Java 类编译后的字节 , 进行完整的替换 ; Tinker , QZone 修复框架支持类替换 ; Tinker , QZone 是以 Java 层作为修复的对象...修复框架 , 除了即时生效的时效性之外 , 其它性能参数都可以接受 ; 二、 将 Java 字节文件打包到 Dex 文件 ---- 程序出现 BUG , 修复好之后 , 发布修复包到服务器中 ,...应用通过网络将修复包下载到手机中 ; 修复包的格式问题 : 修复好的 Java 代码编译后是 Class 字节文件 , 需要转为 Dex 格式 , 才能在 Android 虚拟机中执行 ; 获取字节文件

73220

修复

文章目录 概述: 一、底层方法替换 原理: 二、类加载 原理: 1、java类加载机制 2、Android类加载机制 3、修复实现原理 二、主流更新框架介绍 1、Tinker 3、AndFix 4、...Nuwa 参考1 概述: 修复有两种方式:一方面是阿里系为代表的底层方法替换,另一方面是以腾讯系为代表的类加载方案。...前者支持立即生效,但是限制比较多;后者必须冷启动生效,相对较稳定,修复范围广。之前分析过微信的修复框架 Tinker 即属于后者, 《Tinker 接入及源码分析》。...本篇文章主要分析以 AndFix 为代表的底层方法替换方案,并且实现了《深入探索 Android 修复技术原理》中提到的方法替换新方案。...一、底层方法替换 原理: 参考 方法替换是 AndFix 的修复方案的关键,虚拟机在加载一个类的时候会将类中方法解析成 ArtMethod 结构体,结构体中保存着一些运行时的必要信息以及需要执行的指令指针地址

91920
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    修复原理之修复框架对比和代码修复

    前言 在Android应用开发中,修复技术被越来越多的开发者所使用,也出现了很多修复框架,比如:AndFix、Tinker、Dexposed和Nuwa等等。...如果只是会这些修复框架的使用那意义并不大,我们还需要了解它们的原理,这样不管修复框架如何变化,只要基本原理不变,我们就可以很快的掌握它们。...这一个系列不会对某些修复框架源码进行解析,而是讲解热修复框架的通用原理。...,分别是代码修复、资源修复和动态链接库修复,其中每个核心技术又有很多不同的技术方案,每个技术方案又有不同的实现,另外这些修复框架仍在不断的更新迭代中,可见修复框架的技术实现是繁多可变的。...部分修复框架的对比如下表所示。

    1.3K40

    【Android Gradle 插件】修复实现 ① ( Android 修复系统组成 | 修复工作流程 | 修复使用到的技术 | 修复框架选择注意事项 )

    文章目录 一、Android 修复系统组成 二、修复工作流程 三、修复使用到的技术 四、修复框架选择注意事项 一、Android 修复系统组成 ---- Android 修复系统组成 : 手机端...SDK : 在手机中集成一个 SDK , 是 Android 手机端 的修复支持组件 , 借助该组件实现动态加载外部修复包 ( 字节文件 ) ; 后端服务器 : 在服务器中 处理 手机端 SDK...是一个 Java / .NET / PHP 开发的 Web 应用 ; 二、修复工作流程 ---- 修复工作流程 : 首先 , 开发者发现 BUG , 使用 Gradle 插件生成 修复包 ; 然后...进行差分打包 ; 字节插桩技术 : 使用 ASM , Javassit 技术 , 编译时替换相关类 ; Android Gradle 插件相关技术 : 开发 自定义 Android Gradle 插件..., 整个修复相关技术 ; NDK 相关技术 : 需要 编译生成 so 动态库 ; 四、修复框架选择注意事项 ---- 挑选修复框架时 , 一定要要选择一直保持更新的框架 ; 凡是使用到 插件化

    58010

    Android修复学习之旅开篇——修复概述

    Android修复技术无疑是Android领域近年来最火热的技术之一,同时也涌现了各种层出不穷的实现方案,如QQ空间补丁方案、阿里AndFix以及微信Tinker等等,从本篇博客开始,计划写一个系列博客专门介绍修复的相关内容...为什么会出现修复? 简单来说,以前出现bug的时候,都要重新发包对bug进行修复,这样带来的缺点是明显的,需要用户重新升级app,覆盖率太慢,成本太高。...修复框架简单对比 接下来先对几个修复框架进行简单的介绍,后续将分别单独开一篇博客对其进行详细分析。...1.QQ空间修复补丁技术 QQ空间修复的方案是基于dex分包方案的基础之上,简单来说就是把BUG方法修复以后,重新生成一个dex,从服务器下载之后,将其插入到dexElements数组的最前面,...中的Test.class是最前面,就会优先加载,在后续的dex中遇到Test.class的话就会直接返回而不去加载,这样就达到了修复的目的。

    39110

    Android 修复解析

    5 修复和插件化 插件化和修复的原理,都是动态加载 dex/apk 中的类/资源,两者的目的不同。插件化目标在于加载 activity 等组件,达到动态下发组件的功能,修复目标在修复已有的问题。...而修复重在解决替换已有的有问题的类/方法/资源等。...其中最重要的是方法和类的替换,所以有不少修复框架只做了方法和类的替换,而没有对资源和 so 进行处理。 9 主流的修复框架对比 这里选取几个比较主流的修复框架进行对比 ?...上面是修复框架的一些对比,如果按照实现 dex 修复的原理来划分的话,大概能分成下面几种: native hook Andfix dex 插桩 QzoneNuwa InstantRun Robust...Aceso 全量替换 dex Tinker 混合方案 Sophix 下面对这几种修复的方案进行详细分析。

    96941

    Android修复AndFix

    修复主要用来修复代码、修复bug、添加独立的功能,他的原理主要是操作PathClassLoader、DexClassLoader。...可以包含多个dex文件,每个dex文件是一个Element(元素),多个dex文件排列成一个有序的数组dexElements,当找类的时候,会按顺序遍历dex文件,然后从当前遍历的dex文件中找类,如果找类则返回...那么这样的话,就可以在这个dexElements中去做一些事情,比如,在这个数组的第一个元素放置我们的patch.jar,里面包含修复过的类,这样的话,当遍历findClass的时候,我们修复的类就会被查找到...优点: 重大bug,需要紧急修复 可以下次迭代修复的bug 影响用户体验的行为 无需重启 缺点: 无法添加新类(内部类也不行)和新的字段、新的方法?...资源文件无法替换   试了下换原有的图片可以,但是新增的不行 不能修改xml布局文件   不能 加固后的包补丁无法使用,如果要加固,需要加固前的包来生成补丁,不过这样生成的补丁也很容易破解 不能对同一个方法修复两次

    76780

    Android修复技术总结

    本篇重点讲解热修复,并对当前流行的修复技术做一个简单的总结。 修复 什么是修复? 简单来讲,为了修复线上问题而提出的修补方案,程序修补过程无需重新发版!...而修复的开发流程显得更加灵活,无需重新发版,实时高效修复,无需下载新的应用,代价小,最重要的是及时的修复了bug。 ?...当前热门的修复技术 当前热门的修复技术有: QQ空间超级补丁、微信[Tinker] 阿里的Sophix、阿里Hotfix 饿了么Amigo 美团Robust 360RePlugin … 修复技术...泛型编译 为什么需要泛型 Java泛型完全有编译器实现,由编译器执行类型检查和类型推断,生成非泛型字节,称之为擦除。...资源修复 在Android修复的过程中,不仅需要对错误的代码进行修复,还需要对资源文件进行修复。目前市面上的资源修复方案基本上都是参考Instant Run的实现。

    1.6K70

    Android中的修复

    主流的修复方案: 1. 底层替换 - AndFix 在运行时替换掉底层有Bug的方法的地址,将他们的指针指向修复之后的方法的内存地址,从而实现修复的功能。...类加载方案 - Tinker、QZone 利用Android中类加载机制中的dexElements,将修复之后的dex文件放置到dexElements前面,屏蔽掉有问题的dex文件的加载,从而实现修复的功能...类加载方案时效性较差,因为Java的双亲委派机制的原因,首次打开不会重复加载类,需要再次打开才能生效,修复范围广,实现简单,易于控制。 动态加载dex实现修复 ?...,从而实现dex修复。...Tinker修复原理 ? 修复的实现过程: 1. 使用bsdiff对新旧apk做差异化分析,获得差异化产物patch.apk补丁文件。

    1.9K10

    Android修复简单总结

    Dex修复 Dex修复分为部署底层替换与冷部署重启 1.1 部署底层替换 直接在native虚拟机层替换原有方法,是在原来类的基础上进行修改。...-> dexElements.add(element) 当类的所有方法直接引用到的类(第一层级关系)和该类在同一个dex文件中时,类校验dvmVerifyClass就会返回true,类的accessFlags...SO库修复 3.1 SO实时生效 1.Dalvik虚拟机下动态注册的native方法需实时修复,必须对so文件改名 2.静态注册的native方法的实时修复,因为无法得知so库中哪些native方法发生了变更...,很难做到修复 3.对于新增动态注册的native方法,需在dex中增加相应的Java方法,否则加载so文件时报NoSuchMethodError,而增加Java方法是无法做到实时生效修复,所以so库新增动态注册的...native方法也无法做到实时生效修复 3.2 SO冷部署重启生效 1.

    62820

    Android修复技术总结

    本篇重点讲解热修复,并对当前流行的修复技术做一个简单的总结。 修复 什么是修复? 简单来讲,为了修复线上问题而提出的修补方案,程序修补过程无需重新发版!...而修复的开发流程显得更加灵活,无需重新发版,实时高效修复,无需下载新的应用,代价小,最重要的是及时的修复了bug。 ?...当前热门的修复技术 当前热门的修复技术有: QQ空间超级补丁、微信[Tinker] 阿里的Sophix、阿里Hotfix 饿了么Amigo 美团Robust 360RePlugin … 修复技术...泛型编译 为什么需要泛型 Java泛型完全有编译器实现,由编译器执行类型检查和类型推断,生成非泛型字节,称之为擦除。...资源修复 在Android修复的过程中,不仅需要对错误的代码进行修复,还需要对资源文件进行修复。目前市面上的资源修复方案基本上都是参考Instant Run的实现。

    1.4K60

    【Android】修复——Tinker(入门)

    千辛万苦上开发了一个版本,好不容易上线了,突然发现了一个严重bug需要进行紧急修复,怎么办?难道又要重新打包App、测试,发布新个版本?就为了修改一两行的代码? 莫慌,这种问题其实可以分分钟解决。...如果你学会了这项黑科技——修复。 在用户使用App的时候,不知不觉,这个Bug就被修复了。...莫慌 修复:修复(也称热补丁、修复补丁,英语:hotfix)是一种包含信息的独立的累积更新包,通常表现为一个或多个文件。这被用来解决软件产品的问题(例如一个程序错误)。...就这样,整个修复的流程就完成了。 注意:一定要关闭后打开,修复才会生效。 ?...V2 Scheme的walle; 若不同渠道存在功能上的差异,建议将差异部分放于单独的dex或采用相同代码不同配置方式实现; 已通过Walle实现:【Android】Walle多渠道打包&Tinker修复

    3.3K120

    Android修复实践应用—AndFix

    一直关注App的修复的技术发展,之前做的应用也没用使用到什么修复开源框架。在App的修复框架没有流行之前,做的应用上线后发现一个小小的Bug,就要马上发一个新的版本。...我亲身经历过一周发两个版本,真的折腾用户的节奏~~所以,要开始考虑引入修复。下面记录使用开源框架阿里巴巴的AndFix过程。...实现的原理 这里说的不是修复怎么实现修bug的原理,这里说的是怎么使用AndFix。...也许你会问为了修复一个补丁而增加这么多的依赖,值得吗?我认为还可以吧,因为我的项目一般会使用到这些。...mHandler.sendMessage(msg); } } } 7.补丁包的生成 下载AndFix的补丁生成工具:here 生成补丁的文件需要的文件有:原apk文件,修复

    75460
    领券