首页/新闻资讯/正文详情

Morphe Patches架构深度剖析:150个补丁如何用patches与extensions两大模块组织

发布时间:2026/9/26 3:06:28 来源:云帆数科 栏目:资讯中心
Morphe Patches架构深度剖析:150个补丁如何用patches与extensions两大模块组织
Morphe Patches架构深度剖析150个补丁如何用patches与extensions两大模块组织【免费下载链接】morphe-patchesMorphe Patches项目地址: https://gitcode.com/gh_mirrors/mo/morphe-patchesMorphe Patches 是一个面向 Android 应用YouTube、YouTube Music、Reddit的补丁工程当前 v1.44.0 共提供150 个补丁。它的核心架构可以用一句话概括patches模块负责怎么打补丁extensions模块负责打进去的代码长什么样。本文带你完整拆解这套组织方式。150个补丁是怎么分布的补丁数量来自官方 README.md 的补丁清单由发布流程自动生成对应机器可读的 patches-list.json目标应用补丁数补丁所在目录 YouTube84patches/.../youtube/、extensions/youtube/ YouTube Music42patches/.../music/、extensions/music/ Reddit20patches/.../reddit/、extensions/reddit/ 通用Universal4patches/.../all/、extensions/all/也就是说补丁按目标应用分域两个模块内部用完全对称的目录结构对应找任何一个补丁都能一眼定位到它的两侧代码。两大模块的分工patches 管怎么打extensions 管打什么 patches 模块用 Kotlin 编写的补丁定义patches/下有447 个 Kotlin 文件每个补丁定义都遵循统一模板声明补丁名称与描述会同步到 README 与 patches-list.json声明依赖dependsOn和兼容包compatibleWith在execute { }块中定位目标代码并插入指令定位代码靠的是Fingerprint指纹——按方法签名、访问标志、字节码指令序列画像而不是写死类名这样 App 升级后依然能匹配到目标。例如 YouTube 进度条相关补丁的指纹集合Fingerprints.kt目录按应用/功能域两级组织如patches/src/main/kotlin/app/morphe/patches/ ├── all/ # 通用补丁克隆应用、禁用商店更新等 ├── music/ # 歌词、交叉淡入、下载等 42 项 ├── reddit/ # 字体、广告、侧边栏等 20 项 ├── shared/ # 跨应用共享逻辑主题、防篡改、PoToken… └── youtube/ # 84 个补丁细分到 seekbar、swipecontrols… extensions 模块真正注入 App 的代码extensions/下有556 个 Java/Kotlin 文件这些代码会被编译、混淆后塞进目标 APK运行期由补丁插入的指令调用。它有 6 个子模块子模块职责all/通用扩展如修改安装包版本号youtube/YouTube 补丁实现 设置界面Settings.javamusic/音乐补丁实现含歌词46 个文件、下载、打歌记录等reddit/Reddit 补丁实现与设置界面shared/跨应用共享代码环境检查、请求工具、主题、翻译shared-youtube/YouTube 系共享能力SponsorBlock、Rtd 点赞/点踩、OAuth2 等此外各模块还带一个stub/目录如 extensions/youtube/stub/存放 Cronet、Litho 等目标 App 内部 API 的空壳类声明让扩展代码在编译期就能看到这些类而不需要依赖 App 本体。一个补丁的完整旅程两侧代码如何会师以禁用双击跳转章节补丁为例看一次完整协作补丁侧DisableChapterSkipDoubleTapPatch.kt先用 Fingerprint 在 App 字节码中找到目标方法然后插入一条 smali 指令——invoke-static { p1 }, Lapp/morphe/extension/youtube/patches/DisableDoubleTapActionsPatch;-disableDoubleTapChapters(Z)Z扩展侧DisableDoubleTapActionsPatch.java提供一个静态方法disableDoubleTapChapters(original)内部读取用户在 Morphe 设置里的开关值返回最终结果。┌─────────────────── patches构建期 ───────────────────┐ │ Fingerprint 定位 → 插入 invoke-static 调用 → 注入开关设置项 │ └──────────────────────────┬──────────────────────────────┘ ▼ ┌─────────────────── extensions运行期 ──────────────────┐ │ 静态方法读取 Settings 开关 → 返回改写后的布尔值 │ └──────────────────────────────────────────────────────────┘YouTube Music 的交叉淡入Crossfade功能则是更复杂的双播放器实现其功能说明横幅也打包在补丁资源里随补丁一起分发构建系统与配套文件构建入口settings.gradle.kts 声明了app.morphe.patches插件补丁框架统一设置扩展命名空间app.morphe.extension和 ProGuard 混淆规则 extensions/proguard-rules.pro发布产物patches-bundle.json 记录版本号与下载地址patches-list.json 是自动化生成的补丁元数据名称、描述、依赖、兼容版本供第三方工具消费历史档案archive/ 保留了上游 ReVanced 工程的压缩包NOTICE 与 LICENSE 说明了其 ReVanced 分支渊源与 GPLv3 附加条款。总结为什么这种组织值得借鉴关注点分离——补丁逻辑何时改、改哪里与业务实现改成什么样完全解耦新增一个功能 加一个.kt补丁 一个静态方法指纹驱动——靠字节码指纹而非硬编码定位天然抗 App 小版本升级对称目录——patches与extensions按应用一一对应556 447 个文件依然可检索、可维护。理解了这套patches 定义 extensions 实现的双模块模式你就能顺着任意一个补丁名在两棵目录树里快速找到它的完整实现。【免费下载链接】morphe-patchesMorphe Patches项目地址: https://gitcode.com/gh_mirrors/mo/morphe-patches创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

C语言/数据结构位运算题解:异或XOR找出多任务下载器中的“独特下载速度“——只出现一次的数字
C语言/数据结构位运算题解:异或XOR找出多任务下载器中的“独特下载速度“——只出现一次的数字

问题描述小M正在开发一个多任务下载器,可以同时下载多个文件。每个文件都有一个唯一的下载速度(整数),但系统显示时不小心将每个速度值都重复显示了两次(即除了一个独特的速度值外,其他每个速度值都恰好出现… · 2026/9/26 3:06:28

SQL Server图书借阅系统全栈实现与排错指南
SQL Server图书借阅系统全栈实现与排错指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 3:06:28

华为杯数学建模竞赛备赛全攻略:从评审逻辑到论文写作的获奖策略
华为杯数学建模竞赛备赛全攻略:从评审逻辑到论文写作的获奖策略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 3:06:22

豆包公式导出全攻略:从LaTeX到Word、图片与Markdown的完整指南
豆包公式导出全攻略:从LaTeX到Word、图片与Markdown的完整指南

上学时最怕什么?数学老师突然让交带公式排版的作业,我当年用公式编辑器一个个点,一个分式能折腾半小时。现在有了豆包这类AI助手,公式基本是“说几句话就出来”,但很多朋友卡在最后一步:公式生成之后怎么导… · 2026/9/26 3:55:41

基于微信小程序的培训咨询管理系统设计与实现
基于微信小程序的培训咨询管理系统设计与实现

从接触微信小程序开发到现在,我经手过不少面向机构内部的业务系统,“培训咨询管理系统”算是这类需求里非常典型的一个。不管是职业技能培训机构、企业内训部门,还是在线教育工作室,核心流程都绕不开“学员咨询-课程展示-报名缴费… · 2026/9/26 3:55:35

C语言子集词法分析器实验:手工状态机实现与符号表管理
C语言子集词法分析器实验:手工状态机实现与符号表管理

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 3:55:35

Nginx核心功能详解:反向代理、负载均衡与性能调优实践
Nginx核心功能详解:反向代理、负载均衡与性能调优实践

做了这么多年后端和运维,我越来越觉得Nginx就是一套行走的架构课。不管是刚入门的新人,还是带过线上集群的老手,最终都会绕回同一件事:把 Nginx 的核心功能吃透。它不只是“一个 Web 服务器”,更是静态资源托管、反向代… · 2026/9/26 3:55:29

维普能过的8款降AI率工具打分实测
维普能过的8款降AI率工具打分实测

维普系统升级后,AI生成文本检测成了论文盲审前的硬门槛。不少学生反馈"自己写的段落也被判AI",降AI率从可选项变成了必选项。花了三周时间,把市面上讨论度较高的8款降AI率工具逐个跑了一遍,用同一篇1.2万字的经管类论文… · 2026/9/26 3:55:29

Go 内存语义详解:Stack、Heap、Escape Analysis
Go 内存语义详解:Stack、Heap、Escape Analysis

Go 内存语义详解:Stack、Heap、Escape Analysis内存分配是 Go 的"暗物质"。理解 stack vs heap 与逃逸分析,能让你避开 80% 性能坑。一、栈与堆的区别 栈:函数局部变量,函数结束自动回收 堆:需要 GC 回收 fu… · 2026/9/26 3:55:29

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21

OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40

向下兼容与向上兼容:接口设计中的兼容性策略与工程实践
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践

一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码