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

微信热修复框架 Tinker 从使用到 patch 加载、生成、合成原理分析

tinker-android-lib,这个主要是提供对外暴露 API,等下使用到 Tinker API 基本都在这个工程下 tinker-android-loader,这个工程主要是完成 patch...主要有两个原因: 让 Tinker 可以对 Applicaition 初始化时使用到类进行修复 应用 7.0 混合编译对热修复影响 官方文档里介绍是这样说: 程序启动时会加载默认 Application...运行时 Tinker 是如何加载补丁 前面我们在介绍生成 Application 时就提到,TinkerApplication#attachBaseContext 中辗转会调用到 loadTinker...patch 合成 前面提到,TinkerInstaller#onReceiveUpgradePatch 方法,在接收到新 patch 后我们调用这个方法,传入路径,然后会进行 patch 合成。...DexPatchApplier Dex File -> DexPatchFile 检查 patch 是否能作用到当前 oldDex(通过比较 oldDex 签名和 patch 里记录 oldDex

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

    Python中扩展第三方模块两种方式:Composition vs Monkey Patch

    Python中扩展第三方模块两种方式:Composition vs Monkey Patch 在Python开发中,我们经常需要使用第三方模块。为了自定义一些行为,我们可能需要对第三方模块进行扩展。...对第三方模块访问需要通过包装对象,可能带来少许运行时性能损失 Monkey Patch Monkey Patch机制可以在运行时动态修改模块属性和方法,实现对模块扩展。...: 语法简单,可以快速方便地扩展第三方模块 没有额外封装代码,易于使用 缺点是: 破坏了第三方模块封装,不安全 容易造成不同patch之间冲突 很难重置修改,不易维护 多进程环境下会互相干扰 第三方模块更新时扩展可能会失效...但需要额外代码来组合模块。 Monkey Patch直接修改第三方模块,简单方便。但可能会导致难以预料问题,不太安全。 Composition符合开闭原则,monkey patch破坏开闭原则。...Composition优先于继承,monkey patch可看作一种隐形继承。 对第三方模块扩展,首先考虑Composition。如果只是临时hack,可以使用monkey patch

    34320

    加载第三方JS各种姿势

    加载第三方JS各种姿势 网页中加载JS文件是一个老问题了,已经被讨论了一遍又一遍,这里不会再赘述各种经典解决方案。JS文件可以通过来源来分为两个纬度:第一方JS第三方JS。...这篇文章关注第三方JS文件加载。...但此方法需要强缓存配合,第三方JS为了在版本发布时更早更新JS代码一般都不会设置缓存,甚至有些第三方JS代码是服务器端动态生成。所以也不是适用于第三方JS。...同时还需要第三方JS本身支持。第三方JS代码运行在iframe中,导致它无法获取到页面上信息。...虽然它并非跨域可以获得window.parent,但是第三方代码并不能知道自己是否在iframe中,需要在加载第三方JS代码时候通知它。具体通知方法千变万化,而第三方JS内容又不受我们控制。

    6.2K10

    Android 框架学习5:微信热修复框架 Tinker 从使用到 patch 加载、生成、合成原理分析

    API,等下使用到 Tinker API 基本都在这个工程下 tinker-android-loader,这个工程主要是完成 patch 加载,稍后讲解 patch 加载原理时主要讲就是这个工程...主要有两个原因: 让 Tinker 可以对 Applicaition 初始化时使用到类进行修复 应用 7.0 混合编译对热修复影响 官方文档里介绍是这样说: 程序启动时会加载默认 Application...运行时 Tinker 是如何加载补丁 前面我们在介绍生成 Application 时就提到,TinkerApplication#attachBaseContext 中辗转会调用到 loadTinker...patch 合成 前面提到,TinkerInstaller#onReceiveUpgradePatch 方法,在接收到新 patch 后我们调用这个方法,传入路径,然后会进行 patch 合成。...DexPatchApplier Dex File -> DexPatchFile 检查 patch 是否能作用到当前 oldDex(通过比较 oldDex 签名和 patch 里记录 oldDex

    94621

    Linux中Diff和Patch

    本文主要记录两个命令学习情况:diff 和 patch。diff 和 patch 是一对工具,使用这对工具可以获取更新文件与历史文件差异,并将更新应用到历史文件上。...在数学上说,diff就是对两个集合差运算,patch就是对两个集合和运算。 简单例子 使用这个例子来说明如何进行文件对比和打补丁。...1,4c1,这个内容输出实际上是给patch,表示告诉patch在original.txt文件中1到4行应当被updated.txt中内容替换,替换内容是updated.txt第1行。...patch original.txt -i my patch.patch -o updated-1.txt 这个命令会生成一个新文件,可以看到这个我们之前update.txtw文件一模一样。...另外一种情况,如果将补丁文件应用到了一个错误源文件上,假如恰好这个文件有同样行数,那么补丁也可以成功应用。而这都是我们不希望看到结果。

    2.8K30

    15个项目中会常用到 JS 工具函数代码

    下载一个excel文档 同时适用于word,ppt等浏览器不会默认执行预览文档,也可以用于下载后端接口返回流数据,见3 //下载一个链接 function download(link, name)...下载后端返回流 数据是后端以接口形式返回,调用1中download方法进行下载 download('http://111.229.14.189/gk-api/util/download?...这个方法实现是从Lodash库中copy /** * * @param {*} func 要进行debouce函数 * @param {*} wait 等待时间,默认500ms * @param...,可以自己在代码中试一下 6 节流 多次调用方法,按照一定时间间隔执行 这个方法实现也是从Lodash库中copy /** * 节流,多次触发,间隔时间段执行 * @param {Function...,默认值为false trailing,函数在每个等待时延结束被调用,默认值是true 可以根据不同值来设置不同效果: leading-false,trailing-true:默认情况,即在延时结束后才会调用函数

    61840

    node.js第三方模块

    5、第三方模块 (1)什么是第三方模块 别人写好、具有特定功能、我们能直接使用模块即第三方模块,由于第三方模块通常都是由多个文件组成并且被放置在一个文件夹中,所以又名包。...第三方模块有两种存在形式: 以js文件形式存在,提供实现项目具体功能API接口。...以命令行工具形式存在,辅助项目开发 (2)获取第三方模块 npmjs.com:第三方模块存储和分发仓库 npm (node package manager) : node第三方模块管理工具...gulp库文件 在项目根目录下建立gulpfile.js文件 重构项目的文件夹结构 src目录放置源代码文件 dist目录放置构建后文件 在gulpfile.js文件中编写任务..../src/js/*.js') .pipe(babel({ // 它可以判断当前代码运行环境 将代码转换为当前运行环境所支持代码 presets

    86040

    Python中Mock和Patch区别

    在Python中,我们有一个叫做单元测试过程,里面有mock 和patch 函数。这篇文章将讨论这两个角色用途和区别。...Mock 和Patch 对象库用途和区别在这篇文章中,我们不会把单元测试作为一个整体来处理,而是更多地关注于mock 和patch 函数。...此外,mock 模块提供了一个叫做patch() 装饰器,它负责在测试上下文中修补类和模块级别的特性,并提供了一个用于产生唯一实例哨兵。...结论我们可以注意到以下几点来帮助我们决策:为了方便地用mock 对象(或其他对象)来替代对象,并在完成后恢复之前状态,或者在出现异常情况下,使用patch 装饰器/上下文管理器函数。...mock.patch 创建mock 或衍生对象,我们可以手工制作。手动构建只用于修复本地函数或其他不需要重置模拟。

    33620

    【前端编程】加载第三方JS各种姿势

    从网站开发者角度来看,第三方JS相比第一方JS有如下几个不同之处: 下载速度不可控 JS地址域名与网站域名不同 文件内容不可控 不一定有强缓存(Cache-Control/Expires) 如果你网站上面有很多第三方...按照互联网守则: 网站加载速度越慢,用户流失越多 所以要考虑下如何在有很多第三方JS情况下,保证他们不影响到网站自己加载速度。我们可以异步加载这些第三方JS代码。...但此方法需要强缓存配合,第三方JS为了在版本发布时更早更新JS代码一般都不会设置缓存,甚至有些第三方JS代码是服务器端动态生成。所以也不是适用于第三方JS。...同时还需要第三方JS本身支持。第三方JS代码运行在iframe中,导致它无法获取到页面上信息。...虽然它并非跨域可以获得window.parent,但是第三方代码并不能知道自己是否在iframe中,需要在加载第三方JS代码时候通知它。具体通知方法千变万化,而第三方JS内容又不受我们控制。

    4.2K90

    什么是独立RTL Patch,怎么写

    GOF9.0发布,终于不用重新综合网表了 RTL Patch ECO流程 独立RTL Patch是一种带有特殊注释Verilog文件。...这种方法优势是,RTL Patch里只需要描述改动过逻辑。因为大多数连线名字在综合时被优化掉了,所以RTL Patch里应该把扇入和扇出扩展到已知边界。...RTL Patch语法 RTL Patch完全遵循Verilog语法,模块名字与被ECO模块相同,只是用GOF关键字把端口连接指导写在注释中。...在ECO时,这些名字用于RTL Patch端口连接中。 端口连接定义规则 下面是几种类型端口连接定义: 类型1:输入直接连接 不需要GOF关键字指导。...因为内部逻辑输入引脚在被ECO模块里是存在,所以RTL Patch输入端口就直接接到内部逻辑输入引脚前级驱动输出引脚上。

    93410

    Vue 中引用第三方js总结

    vue中引用第三方js总结 实践环境 win10 Vue 2.9.6 本文以引用jsmind为例,讲解怎么在vue中引用第三方js类库 基础示例 1、把下载好js类库放在src/static目录下 ?...2、在src/index.html入口文件中通过script引用需要使用js(参见以下第8-10行代码) <!...)中,增加一个externals配置(参见以下带背景色,加粗,倾斜内容) 3、在webpack.base.config.js(webpack基础配置文件,包含开发和生产环境通用配置)中,增加一个externals...这里,我们不需要打包第三方库,仅需要在运行时(runtime)从外部获取这些扩展依赖(external dependencies)。...js同时,还需要引入对应css文件,引入方式分以下两种: 参考链接 https://webpack.docschina.org/configuration/externals

    2.8K10

    Angular中引入第三方JS

    最近写http://www.itoolshub.com/时候用到了日期时间选择器,Angular本身material2只有日期选择器,也不知道为什么官方不提供日期时间选择器,也可能是Angular2以及如今...4有些年轻,很多库都不是很成熟,于是乎搜索到解决方案就是借助第三方库来使用一些优秀组件.本文以https://github.com/sentsin/laydate组件为例....引入js与css https://github.com/sentsin/laydate是采用原生js实现组件,因此不需要考虑相关依赖,直接入手. 1.使用npm下载该组件npm install layui-laydate.../node_modules/layui-laydate/dist/laydate.js" ], Angular在编译时候会把上述js引用都打包到scripts.bundle.js文件中 ts编译识别...另外使用时候就可以按照ts语法来使用了,最终都会解析成原生js.比如下方箭头函数.

    6.2K30

    浅谈Laravel POST,PUT,PATCH 路由区别

    /1,users/2 …而这些用户除了自增长id外有着相同数据,除非你系统实现了额外数据唯一性检查) 而PUT方法用来创建一个URI已知资源,或对已知资源进行完全替换,比如users/1, 因此...PUT方法一般会用来更新一个已知资源,除非在创建前,你完全知道自己要创建对象URI。...PATCH方法是新引入,是对PUT方法补充,用来对已知资源进行局部更新 GET 获取资源 POST 创建资源 PUT 编辑/更新资源(需提交完整资源字段) PATCH 编辑/更新资源(可以提交需要更新字段...) DELETE 删除资源 OPTIONS 服务器允许哪些请求谓词 这些就是最近比较流行RestFul模式常用,另HTML表单只支持POST、GET两种请求方式,PUT、PATCH以及DELETE是...以上这篇浅谈Laravel POST,PUT,PATCH 路由区别就是小编分享给大家全部内容了,希望能给大家一个参考。

    1.7K41
    领券