
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),仅供参考