热修复-Nuwa学习篇
下载地址: http://download.csdn.net/detail/u010864175/9806139
nuwa热修复是基于qq空间团队的思路,最近的热度话题了,很多种方案,自己先研究几种方案,基本上都各有优势,学习肯定得先挑个软柿子捏了,自己对比了一下,发现nuwa代码量少点,所以就决定了,先研究nuwa(不过对于Nuwa,该项目仅仅只能用只是一个Demo来形容,要用于线上,其背后还需要很多坑去填,这也是很多广大同胞的反映结果,不过提供学习是很好的,毕竟多了解一种方案也是好事)。
首先肯定得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文件,复制这个文件到你手机的根目录
接下来重新启动程序,发现代码已经更新
这就是开源的力量啊,要是纯属自己捣鼓得捣鼓到什么时候啊,其实才刚空下来研究,很多细节深处也还没搞懂,不过起码得把流程搞通,跑通是基础
前人栽树后人乘凉,我感觉浑身都很凉快,记录自己的学习之路,也供需要学习的参考学习
热修复-Nuwa学习篇的更多相关文章
- Android 热修复Nuwa的原理及Gradle插件源码解析
现在,热修复的具体实现方案开源的也有很多,原理也大同小异,本篇文章以Nuwa为例,深入剖析. Nuwa的github地址 https://github.com/jasonross/Nuwa 以及用于 ...
- 美团热修复Robust-源码篇
上一篇主要分析了Robust的使用方法,这一篇就来总结一下Robust的源码分析. 我个人倾向于将Robust框架分为两个部分,自动插入代码和动态加载Patch. 一.Robust源码分析 目前我的分 ...
- Android 热修复使用Gradle Plugin1.5改造Nuwa插件
随着谷歌的Gradle插件版本号的不断升级,Gradle插件如今最新的已经到了2.1.0-beta1,相应的依赖为com.android.tools.build:gradle:2.0.0-beta6, ...
- 热修复 RocooFix篇(一)
吐槽之前先放一张大帅图. (md 这张图貌似有点小 不纠结这个了==) 有时候项目刚刚上线或者迭代 测试或者在线上使用测出一个bug来 真让人蛋疼 不得不重新改bug测试 打包混淆上线感觉就向find ...
- 美团热修复Robust的踩坑之旅-使用篇
最近需要在项目中使用热修复框架,在这里以美团的Robust为主写一篇文章总结一下学习的过程. 一直认为要学习一个框架的原理,首先需要让他跑起来,从效果反推回去,这样更容易理解. 一.美团Robust的 ...
- 《android基于andFix的热修复方案》思路篇
1:需求背景 项目上线之后,发现BUG需要修复(比如安卓兼容性等测试难以发现的问题),频繁的更新影响用户体验 2:方案要求 静默下载,耗费流量少,打完补丁后立刻生效,不用重启apk 3:解决思路 3. ...
- 关于iOS热修复(HotPatch)技术的使用总结
苹果做了非常多的努力来建造和维持一个健康并且干净的应用环境.其中对现在的现状起到很大作用的部分就是苹果APP STORE,它是被一个十分周密的对所有提交的应用进行检查的审批程序所保护的.尽管这个程序是 ...
- Android 插件化和热修复知识梳理
概述 在Android开发中,插件化和热修复的话题越来越多的被大家提及,同时随着技术的迭代,各种框架的发展更新,插件化和热修复的框架似乎已经日趋成熟,许多开发者也把这两项技术运用到实际开发协作和正式的 ...
- Android 热修复 Tinker接入及源码浅析
一.概述 放了一个大长假,happy,先祝大家2017年笑口常开. 假期中一行代码没写,但是想着马上要上班了,赶紧写篇博客回顾下技能,于是便有了本文. 热修复这项技术,基本上已经成为项目比较重要的模块 ...
随机推荐
- CMS模板应用调研问卷
截止目前,已经有数十家网站与我们合作,进行了MIP化改造,在搜索结果页也能看到"闪电标"的出现.除了改造方面的问题,MIP项目组被问到最多的就是:我用了wordpress,我用了织 ...
- 我的MYSQL学习心得(一) 简单语法
我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- 通过三次优化,我将gif加载优化了16.9%
WeTest 导读 现在app越来越炫,动不动就搞点动画,复杂的动画用原生实现起来挺复杂,如是就搞起gif播放动画的形式,节省开发成本. 背 景 设计同学准备给一个png序列,开发读取png序列, ...
- 【Web动画】SVG 线条动画入门
通常我们说的 Web 动画,包含了三大类. CSS3 动画 javascript 动画(canvas) html 动画(SVG) 个人认为 3 种动画各有优劣,实际应用中根据掌握情况作出取舍,本文讨论 ...
- 创建APPID&&部署服务端教程
创建APPID&&部署服务端 一.创建APPID 1.打开https://console.developers.google.com ,左击顶部Project,然后左击创建项目 2.输 ...
- 设计模式之创建类模式大PK
创建类模式大PK 创建类模式包括工厂方法模式.建造者模式.抽象工厂模式.单例模式和原型模式,他们能够提供对象的创建和管理职责.其 ...
- winform异步加载数据到界面
做一个学习记录. 有两个需求: 1.点击按钮,异步加载数据,不卡顿UI. 2.把获取的数据加载到gridview上面. 对于需求1,2,代码如下: public delegate void ShowD ...
- springmvc+bootstrap+jquerymobile完整搭建案例(提供下载地址)
用一张简单的截图说明下,然后提供一个下载地址. bootstrap的大部分样式官方都是写好的,所以只需要class="官方样式即可",具体可以看官方的案例,下面来个地址 http: ...
- 编译器开发系列--Ocelot语言5.表达式的有效性检查
本篇将对"1=3""&5"这样无法求值的不正确的表达式进行检查. 将检查如下这些问题.●为无法赋值的表达式赋值(例:1 = 2 + 2)●使用非法的函数 ...
- java.lang.NoSuchFieldError: org.apache.http.message.BasicLineFormatter.INSTANCE
Android发出HTTP请求时出现了这个错误: java.lang.NoSuchFieldError: org.apache.http.message.BasicLineFormatter.INST ...