
ReVanced Manager 补丁管理指南添加、更新与移除 Patch 来源【免费下载链接】revanced-manager Application to use ReVanced on Android项目地址: https://gitcode.com/GitHub_Trending/re/revanced-managerReVanced Manager 的补丁Patches以补丁来源Patch Bundle的形式组织与管理用户既可以使用内置的 ReVanced API 官方源也可以自行添加远程 JSON 地址或本地文件作为补充来源。本文基于官方使用文档 docs/2_3_managing_patches.md结合仓库源码深入讲解补丁的添加、管理与移除全流程读完即可掌握在 Patches 标签页中维护补丁来源的完整操作与底层原理。补丁来源Patch Bundle是什么ReVanced Manager 中所有可用的补丁并非内置在应用里而是通过补丁来源动态加载的。一个补丁来源就是一个包含补丁集合的包Bundle它有三种类型对应仓库中PatchBundleRepository对来源的建模见 PatchBundleRepository.kt来源类型说明仓库中的实现类API 源默认ReVanced 官方补丁源应用安装后自带uid 为 0不可移除APIPatchBundle远程 JSON 源用户通过 URL 添加指向符合 ReVanced API 格式的 JSON 地址JsonPatchBundle本地文件源用户从存储中选择的补丁文件复制进应用私有目录LocalPatchBundle从数据结构看每个来源在数据库中对应一条记录字段包括uid主键、name、versionHash用于判断是否有新版本、sourceAPI / Remote / Local 枚举、autoUpdate是否自动更新和releasedAt发布时间定义见 PatchBundleEntity.kt。进入补丁管理Patches 标签页所有补丁来源的增删管理都发生在 Patches 标签页。该页面对应源码中的BundleListScreen见 BundleListScreen.kt它以列表形式展示当前所有补丁来源并为每个来源显示其包含的补丁数量patchCount支持下拉刷新PullToRefreshBox重新加载来源。添加补丁的完整操作步骤官方文档 docs/2_3_managing_patches.md 给出的添加流程如下点击顶部导航栏中的Patches标签点击右下角的浮动编辑 ✏️ 按钮编辑按钮会切换为添加补丁按钮浮动加号点击它在弹出的对话框中选择添加方式Enter URL输入 URL从远程位置添加补丁Select from storage从存储中选择从本地存储添加补丁。⚠️ 格式要求所选文件必须是使用 ReVanced API 格式的 JSON例如https://api.revanced.app/v4/patches。导入对话框的两步式交互按钮点击后弹出的ImportSourceDialog见 ImportSourceDialog.kt是一个两步向导第一步选择来源类型。远程来源Enter URL带有推荐Recommended标记本地来源Select from storage为备选第二步根据所选类型填写内容。远程来源需要输入 URL 并选择是否开启自动更新Auto Update默认开启本地来源则调用系统文件选择器选取文件。值得注意的是导入补丁时文件选择器使用的是BIN_MIMETYPE过滤补丁文件为二进制/压缩包格式而导入下载器时使用APK_MIMETYPE两者在同一个对话框组件中通过枚举区分见 ImportSourceDialog.kt。远程 URL 来源深入ReVanced API 格式与验证远程来源是官方推荐marked as recommended的补丁获取方式。在点击添加之前对话框会对 URL 做两层校验格式校验URL 必须是 HTTP 或 HTTPS 地址URLUtil.isHttpUrl || isHttpsUrl且非空否则添加按钮保持禁用状态见 ImportSourceDialog.kt内容校验提交时后台会请求该 URL 并尝试解析为ReVancedAsset见 SourceManager.kt。若返回的数据不是补丁包格式触发UnsupportedRemoteSourceException会提示远程来源 URL 不受支持若解析失败则提示URL 验证失败错误信息直接显示在输入框下方。成功添加后来源会以JsonPatchBundleJsonSource的形式加载见 RemoteSource.kt其工作方式是通过 HTTP 请求endpoint获取最新发布信息ReVancedAsset将资产中的downloadUrl流式下载到应用私有目录patch_bundles/uid/patches.jar用versionHash判断本地文件是否为最新版本从而实现增量更新。若在导入时勾选了自动更新SourceManager.updateCheck()会在启动时自动检查所有开启autoUpdate的来源并下载新版本见 SourceManager.kt更新策略还会尊重仅在非计费网络下更新的偏好设置。默认 API 源应用内置的官方补丁源SourceInfo.API即https://api.revanced.app/v4/patches在首次启动时自动写入数据库uid 为 0它是一个默认来源无法被移除remove操作会跳过isDefault的来源见 SourceManager.kt。它通过APISource调用 ReVanced API 获取补丁发布信息行为与其他远程源一致。本地文件来源深入选择Select from storage后文件会被读取并以流的方式写入应用私有目录的patches.jar见 LocalSource.kt 的replace方法。本地来源没有版本哈希和自动更新概念因此每次选择都会整体替换该来源的文件内容。写入时源码有一个值得注意的细节文件写入后会通过setReadOnly()恢复只读权限因为 Android 14 及以上要求 dex 容器即补丁 jar为只读见 Source.kt。管理与移除已有补丁官方文档指出点击列表中的补丁即可管理或移除它。这对应 Patches 标签页的两种模式浏览模式查看各来源及其补丁补丁按兼容 / 通用Universal/ 不兼容分组展示支持搜索与过滤见 PatchesSelectorScreen.kt管理/编辑模式点击浮动编辑按钮进入后每个来源头部会出现删除入口onSourceDeleteRequest、SourceSectionHeader的删除按钮可移除不再需要的来源。移除操作在底层由SourceManager.remove()执行先删除数据库中的记录再递归删除该来源在patch_bundles/uid/目录下的本地文件最后重新加载剩余来源见 SourceManager.kt。移除后该来源提供的补丁会立即从补丁列表中消失。源码级原理补丁是如何被加载与筛选的理解管理操作背后的机制有助于判断添加的来源是否可用加载所有来源的patches.jar会统一交给PatchBundle.Loader通过 ReVanced Library 的loadPatches()加载并按文件分组见 PatchBundle.kt。加载失败的来源会被标记为Failed状态并在界面上显示加载问题提示元数据补丁包的 Manifestname、version、description、source、author、contact、website、license会被解析出来用于在列表中显示来源名称与版本见 PatchBundle.kt兼容性筛选每个补丁声明自己的compatiblePackages包名 支持的版本列表。没有任何兼容约束的补丁即通用补丁Universal PatchPatchInfo.compatibleWith()/supports()负责在选定目标应用后过滤出可用补丁见 PatchInfo.kt。另外PatchBundleRepository还提供suggestedVersions综合所有来源中兼容补丁数量最多的应用版本与isVersionAllowed版本保护开关确保用户添加的补丁来源能被正确用于补丁选择流程。常见问题与限制URL 不是 JSON若输入的地址返回的不是 ReVanced API 格式的 JSON例如网页提交时会直接报URL 验证失败或不受支持来源不会被添加本地文件格式错误选择的文件必须是补丁包格式BIN_MIMETYPE解析失败的来源会进入Failed状态界面上会显示加载错误默认源不可删除官方 API 源始终存在只能管理用户自行添加的来源网络条件开启自动更新的远程来源在计费网络移动数据下默认只检查不下载除非在设置中允许使用计费网络见 SourceManager.kt。下一步管理好补丁来源之后就可以进入补丁选择与应用的环节。完整的应用补丁流程参见 补丁应用指南而与管理补丁并列的下载器管理参见 管理下载器所有使用类文档的索引见 使用指南总览。【免费下载链接】revanced-manager Application to use ReVanced on Android项目地址: https://gitcode.com/GitHub_Trending/re/revanced-manager创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考