热修复-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年笑口常开. 假期中一行代码没写,但是想着马上要上班了,赶紧写篇博客回顾下技能,于是便有了本文. 热修复这项技术,基本上已经成为项目比较重要的模块 ...
随机推荐
- 使用 .NET WinForm 开发所见即所得的 IDE 开发环境,实现不写代码直接生成应用程序
直接切入正题,这是我09年到11年左右业余时间编写的项目,最初的想法很简单,做一个能拖拖拽拽就直接生成应用程序的工具,不用写代码,把能想到的业务操作全部封装起来,通过配置的方式把这些业务操作组织起来运 ...
- JavaScript 字符串实用常操纪要
JavaScript 字符串用于存储和处理文本.因此在编写 JS 代码之时她总如影随形,在你处理用户的输入数据的时候,在读取或设置 DOM 对象的属性时,在操作 Cookie 时,在转换各种不同 Da ...
- .Net多线程编程—预备知识
1 基本概念 共享内存的多核架构:一个单独的封装包内封装了多个互相连接的未处理器,且所有内核都可以访问主内存.共享内存的多核系统的一些微架构,例如内核暂停功能,超频. 内核暂停功能:当使用内核不多的时 ...
- Angular企业级开发(4)-ngResource和REST介绍
一.RESTful介绍 RESTful维基百科 REST(表征性状态传输,Representational State Transfer)是Roy Fielding博士在2000年他的博士论文中提出来 ...
- iOS开发之Masonry框架源码深度解析
Masonry是iOS在控件布局中经常使用的一个轻量级框架,Masonry让NSLayoutConstraint使用起来更为简洁.Masonry简化了NSLayoutConstraint的使用方式,让 ...
- iOS开发之多种Cell高度自适应实现方案的UI流畅度分析
本篇博客的主题是关于UI操作流畅度优化的一篇博客,我们以TableView中填充多个根据内容自适应高度的Cell来作为本篇博客的使用场景.当然Cell高度的自适应网上的解决方案是铺天盖地呢,今天我们的 ...
- 记录我这一年的技术之路(nodejs纯干货)
2015年12月28日23:19:54 更新koa应用.学习型网站和开发者工具等 coding伊始 开始认认真真的学习技术还是2015.10.21日开始的,记得很清楚,那天,是我在龙湖正式学习的第一天 ...
- 使用EF CodeFirst 创建数据库
EntityFramework 在VS2015添加新建项时,选择数据->ADO.NET 实体数据模型,有一下选项 来自数据库的EF设计器,这个就是我们最常用的EntityFramework设计模 ...
- 深入理解css3中nth-child和 nth-of-type的区别
在css3中有两个新的选择器可以选择父元素下对应的子元素,一个是:nth-child 另一个是:nth-of-type. 但是它们到底有什么区别呢? 其实区别很简单::nth-of-type为什么要叫 ...
- git快速get
配置:git config --global user.name 'yangshaoxiang' git config --global user.email '254135495@qq.com' s ...