zoukankan      html  css  js  c++  java
  • 热修复-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盘下,这个随你喜欢(你的项目appuildoutputs uwa)

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

    执行效果如下:

    接下来你会在你的项目文件夹下的 appuildoutputs uwaqihoodebug 中发现生成的jar文件,复制这个文件到你手机的根目录

     

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

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

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

  • 相关阅读:
    spring-mvc访问本地html文件
    好文收集
    jsp参数乱码解决
    ext window嵌jsp页面自适应
    正则学习(转)
    Error occurred during initialization of VM Incompatible initial and maximum heap sizes specified
    产品测试流程
    创建maven工程时报错,解决方案
    接口测试中如何利用cookies保持会话
    http协议基础
  • 原文地址:https://www.cnblogs.com/LiuZhen/p/6237636.html
Copyright © 2011-2022 走看看