热修复-Nuwa学习篇

nuwa热修复是基于qq空间团队的思路,最近的热度话题了,很多种方案,自己先研究几种方案,基本上都各有优势,学习肯定得先挑个软柿子捏了,自己对比了一下,发现nuwa代码量少点,所以就决定了,先研究nuwa。

首先肯定得gradle

例子github上也都有,也可以下载别人的项目借鉴

然后进入application看看具体情况

跟着流程看下去

下面的方法才是重点

/** * 笔记 * “类加载器”(ClassLoader),其作用是动态装载Class文件,每个ClassLoader对象在初始化时必须指定Class文件的路径 * 一般情况下,需要某个类时,只需使用import关键字包含该类就可以了,但是import有两个前提: *      1.必须存在于本地,当程序运行时需要该类时,内部类装载器会自动装载该类,这对程序员来讲是透明的, *  即程序员感知不到这一过程, *      2.编译时必须在现场,否则编译不过,会因为找不到引用文件而无法编译,插件化class文件不满足此前提的。 * * 在一般情况下,应用程序不需要创建一个全新的ClassLoader对象,而是使用当前环境已经存在的ClassLoader。 * 因为Javad的Runtime环境在初始化时,其内部会创建一个ClassLoader对象用于加载Runtime所需的各种Java类。 * 每个ClassLoader必须有一个父ClassLoader,在装载Class文件时,子ClassLoader会先请求父ClassLoader加载该Class * 文件,只有当其父ClassLoader找不到该Class文件时,子ClassLoader才会继续装载该类,这是一种安全机制。 * * dex文件是将所需的所有Class文件重新打包,打包的规则不是简单的压缩,而是完全对Class文件内部的各种函数表、 * 变量表等进行优化,并产生一个新的文件,这就是dex文件。 * 由于dex文件是一种经过优化的Class文件,因此要加载这样特殊的Class文件就需要特殊的类装载器,这就是 * DexClassLoader,Android SDK中提供的DexClassLoader类就是出于这个目的。 */

/** * classloader 分三个级别,最上级 : bootstrap classLoader  中间级:extension classLoader * 最低级 app classLoader. 当需要加载某个类的时候,会看看这个类是否已经被加载了,如果没有,会请求app级来加载, * app 请求 extension 级  extension 请求 bootstrap级, 由最高级来负责加载 * (这个就是双亲委派,委托 上两级的loader来做加载),如果高级的无法加载 则会将人物返回给 下一级 以此类推 * 最后如果双亲都不行 就由自己来加载. * 为什么要用这个机制? 比如 java.lang.String 这个类,这个是jdk提供的类, 如果我们自定义个 包名: * java.lang 然后在里面创建一个String 类, 当我在用String类的时候,根据前面所说,是由bootstrap级的loader * 来进行加载的,这个时候它发现其实已经加载过了jdk的String了,那么就不会去加载自定义的String了,防止了重复 * 加载 也加大了安全性 */

接下来就是使用了,知道了大致是个什么情况了就按照文档说明准备了

首先运行nuwa项目,跑起来,然后outputs下会生成一个nuwa的文件夹,把它复制到D盘下,这个随你喜欢(你的项目\app\build\outputs\nuwa)

然后就修改里面的一点内容,比如把里面某个输出改掉,然后用命令生成jar包(gradlew clean nuwaQihooDebugPatch -P NuwaDir=D:/nuwa)

执行效果如下:

接下来你会在你的项目文件夹下的 app\build\outputs\nuwa\qihoo\debug 中发现生成的jar文件,复制这个文件到你手机的根目录

接下来重新启动程序,发现代码已经更新

这就是开源的力量啊,要是纯属自己捣鼓得捣鼓到什么时候啊,其实才刚空下来研究,很多细节深处也还没搞懂,不过起码得把流程搞通,跑通是基础

前人栽树后人乘凉,我感觉浑身都很凉快,记录自己的学习之路,也供需要学习的参考学习

时间: 2024-10-10 03:42:46

热修复-Nuwa学习篇的相关文章

聊聊Android 热修复Nuwa有哪些坑

原创地址:http://blog.csdn.net/sbsujjbcy/article/details/51028027 前面写了两篇关于Nuwa的文章 Android 热修复Nuwa的原理及Gradle插件源码解析 Android 热修复使用Gradle Plugin1.5改造Nuwa插件 然后我说了Nuwa有坑,有人就问Nuwa到底有哪些坑,这篇文章对自己在Nuwa上走过的坑做一个总结,如果你遇到了其他坑,欢迎留言,我会统一加到文章中去.当然有些也不算是Nuwa的坑,算是ClassLoade

Android 热修复Nuwa的原理及Gradle插件源码解析

现在,热修复的具体实现方案开源的也有很多,原理也大同小异,本篇文章以Nuwa为例,深入剖析. Nuwa的github地址 https://github.com/jasonross/Nuwa 以及用于hotpatch生成的gradle插件地址 https://github.com/jasonross/NuwaGradle 而Nuwa的具体实现是根据QQ空间的热修复方案来实现的.安卓App热补丁动态修复技术介绍.在阅读本篇文章之前,请先阅读该文章. 从QQ空间终端开发团队的文章中可以总结出要进行热更

Android 热修复使用Gradle Plugin1.5改造Nuwa插件

随着谷歌的Gradle插件版本号的不断升级,Gradle插件如今最新的已经到了2.1.0-beta1,相应的依赖为com.android.tools.build:gradle:2.0.0-beta6,而Nuwa当时出来的时候,Gradle插件还仅仅是1.2.3版本号,相应的依赖为com.android.tools.build:gradle:1.2.3,当时的Nuwa是依据有无preDex这个Task进行hook做不同的逻辑处理,而随着Gradle插件版本号的不断增加,谷歌增加了一个新的接口能够用

Nuwa热修复实现

既然前面的AndFix暂时还不可行,那只能投奔QQ团队的Nuwa了.按照开发思路,小编理应先讲讲Nuwa的优缺再讲讲其使用的,但基于对Nuwa的了解不够深厚,我们还是先看看其具体使用吧.虽然网上已经提供了很多使用解说,但这里小编只为站在低点角度帮到大家填下小坑. 添加Nuwa插件 1.编辑工程的根build.gradle文件 buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.b

Android 热修复方案分析

绝大部分的APP项目其实都需要一个动态化方案,来应对线上紧急bug修复发新版本的高成本.之前有利用加壳,分拆两个dex结合DexClassLoader实现了一套全量更新的热更方案.实现原理在Android 基于Proxy/Delegate 实现bug热修复这篇博客中有分解.因为这套方案是在Java端实现,并且是全量更新所以兼容性较好,成功率较高.但是在线上跑了几个月之后就碰到了瓶颈,因为随着业务的增长分拆过之后的dex文件方法数也超过65535个,更换拆包方案的话维护成本太高.同时由于没有做差异

Android热修复技术专题:来自微信、淘宝、支付宝、QQ空间的热修复方案

最近好多人都讨论关于热更新的话题,所以查询了一些资料看看 当一个App发布之后,突然发现了一个严重bug需要进行紧急修复,这时候公司各方就会忙得焦头烂额:重新打包App.测试.向各个应用市场和渠道换包.提示用户升级.用户下载.覆盖安装.有时候仅仅是为了修改了一行代码,也要付出巨大的成本进行换包和重新发布. 这时候就提出一个问题:有没有办法以补丁的方式动态修复紧急Bug,不再需要重新发布App,不再需要用户重新下载,覆盖安装?答案当然是有的,那就是最近涌现出来得热补丁方案,主要包括淘宝的Dexpo

热修复 RocooFix篇(一)

吐槽之前先放一张大帅图. (md 这张图貌似有点小 不纠结这个了==) 有时候项目刚刚上线或者迭代 测试或者在线上使用测出一个bug来 真让人蛋疼 不得不重新改bug测试 打包混淆上线感觉就向findviewById一样让你无法忍受 热修复从15年开始火起来 关于热修复的理论知识基于QQ空间热修复的一片文章(后面我会附上这几天学习的了解 不想看吐槽的可以滑到最后面 没办法为了凑字 数不够150个字数不允许发表 难道这就可以阻挡我吐槽的 呸 是学习的热情了吗) 其实在学习热修复之前 我们还是有必要

Android热补丁动态修复技术(完结篇):自动生成打包带签名的补丁,重构项目

一.关于前面四篇博文 Android热补丁动态修复技术(一):从Dex分包原理到热补丁 Android热补丁动态修复技术(二):实战!CLASS_ISPREVERIFIED问题! Android热补丁动态修复技术(三)-- 使用Javassist注入字节码,完成热补丁框架雏形(可使用) Android热补丁动态修复技术(四):自动化生成补丁--解决混淆问题 前两篇博文主要是介绍热补丁修复技术的一些原理和实现方案. 而后面两篇博文主要是介绍如何使用代码实现整个热补丁框架,但是框架写的真的很糟糕,很

Android热修复学习之旅——HotFix完全解析

在上一篇博客Android热修复学习之旅开篇--热修复概述中,简单介绍了各个热修复框架的原理,本篇博客我将详细分析QQ空间热修复方案. Android dex分包原理介绍 QQ空间热修复方案基于Android dex分包基础之上,简单概述android dex分包的原理就是:就是把多个dex文件塞入到app的classloader之中,但是android dex拆包方案中的类是没有重复的,如果classes.dex和classes1.dex中有重复的类,当classes.dex和classes1