news 2026/9/10 18:20:22

ReVanced Manager 应用版本演进全解读:从 1.26 到 2.6 的功能迭代、架构变化与稳定性修复

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ReVanced Manager 应用版本演进全解读:从 1.26 到 2.6 的功能迭代、架构变化与稳定性修复

ReVanced Manager 应用版本演进全解读:从 1.26 到 2.6 的功能迭代、架构变化与稳定性修复

【免费下载链接】revanced-manager💊 Application to use ReVanced on Android项目地址: https://gitcode.com/GitHub_Trending/re/revanced-manager

导读

本文以 ReVanced Manager 官方版本记录 app/CHANGELOG.md 为骨架,系统梳理该项目从 1.26.0-dev 到 2.6.1 的完整演进脉络:包括 2.0.0 主版本号的重大升级、补丁(Patcher)执行与安装流程的架构重构、下载器插件化系统的落地、Root 安装机制的完善,以及围绕稳定性与性能的大量修复。阅读本文后,你将理解 ReVanced Manager 每个关键版本"改了什么、为什么改",并能结合仓库源码定位到对应的实现文件,为二次开发、排查问题或评估升级风险提供直接依据。

一、版本记录概况与发布节奏

1.1 文档结构与版本命名规则

app/CHANGELOG.md按 Conventional Commits 语义化版本组织,遵循release 版本 + dev 预发布版本双轨节奏:

  • 正式版:如2.6.12.6.02.5.12.5.02.4.02.3.02.2.32.2.22.2.02.1.02.0.12.0.0
  • 预发布版:如2.6.0-dev.131.26.0-dev.38等,每个 dev 版本对应一次合并到主分支的功能或修复提交,是正式版发布前的"快照"。

条目按Bug Fixes(缺陷修复)、Features(新功能)、Performance Improvements(性能优化)、Reverts(回滚)、BREAKING CHANGES(破坏性变更)分类,并附有对应 issue 编号与 commit 哈希。

1.2 时间跨度与主版本里程碑

从记录看,发布周期集中在 2025-10 至 2026-05:

里程碑版本时间关键事件
预发布系列1.26.0-dev.1 ~ 1.26.0-dev.382025-10 ~ 2026-03UI 重构、下载器系统、Root 安装等大量功能落地
主版本升级2.0.02026-03-14feat!破坏性提交,版本号提升至 2.x
2.x 稳定期2.0.1 ~ 2.6.12026-03 ~ 2026-05修 bug、补性能,2.6.0 起进入快速迭代

其中 2.0.0 的BREAKING CHANGES说明仅一句话:bump major version to 2.0.0,意味着这一主版本升级主要承担了 1.26 系列期间积累的架构变更(详见下文第三、四节)。

二、2.x 主版本的核心功能演进

2.1 应用列表与 Dashboard 体验升级

2.2.0 引入大量面向"选择要修补的应用"这一核心路径的优化:

  • 合并应用选择器与应用列表Merge app selector screen with apps screen):告别两套入口,统一为单一应用列表,减少跳转;
  • 应用搜索:初始屏幕(Dashboard)与应用列表均支持搜索(App search bar on initial screenSearch patched app and patchable app);
  • 固定应用与一键回到顶部(2.6.0 的Improve AppsScreen design, add app pinning and jump to top):通过pinned_apps偏好存储置顶集合,见 PreferencesManager.kt;
  • 性能优化improve AppSelectorScreen caching/perfimprove InstalledAppsScreen caching/perfSpeed up loading app list,解决"大量应用条目下的性能影响"问题;
  • 从已安装应用加载信息Load app info from installed apps by default):减少对网络 API 的依赖,加快列表加载。

这些改动共同指向一个目标:让用户以最短路径完成"选应用 → 选补丁 → 打补丁"。

2.2 补丁(Patches)选择与选项体系

补丁选择流程是 Manager 的核心交互,2.x 系列围绕它做了系统性重构:

  • 补丁选择器底部弹层add patches selector bottom sheet)与分区列表Use sectioned list for patches selector screen),并配套 PatchesFilterBottomSheet.kt 等筛选组件;
  • 补丁筛选器Add patch selection filtersfilter options for patches):默认关闭(Turn off filters by default),避免干扰默认选择流程;
  • 必填选项屏幕add required options screen):对带必填参数的补丁单独收集输入;
  • 补丁选项改进(2.6.0Improve patch options):修复选项弹层被键盘遮挡(Don't hide PatchOptions behind keyboard)、重置按钮失效、选项类型判定错误等问题;
  • 应用级补丁记录:显示"打补丁时使用的补丁包版本"(Show patch bundle version used to patch an app),并在源补丁包被删除时保留已应用补丁(Preserve applied patches on patched apps when source patches is deleted)。

补丁选项在数据库中以OptionGroup/Option实体持久化(见 AppDatabase.kt),通过 OptionFields.kt 渲染为布尔、字符串、整数等输入控件。

2.3 通知、公告与更新系统

  • 应用内公告Add announcements,2.0.0-dev.24 起):Manager 通过 API 拉取公告并渲染 Markdown;后续迭代优化了公告字体大小、字间距、列表一致性,并引入未读状态与标签筛选Don't mark all announcements as read on first launch, and set the correct default tags),默认标签为revancedmanager,对应 PreferencesManager.kt 的readAnnouncementsselectedAnnouncementTags
  • 更新检查:启动时检查更新(check for updates on startup)、推荐版本校验(check if the version being used is the recommended version)、更新界面展示发布日期与补丁数量(2.5.0Show release dates and patch count);
  • 预发布开关:Manager、Patches、Downloader 三套预发布偏好分别独立(Toggle to use pre-release versions of ReVanced Manager / ReVanced Patches),并在切换时即时重拉补丁包(Instantly re-fetch patch bundle on pre-release preference update)。这些开关通过useManagerPrereleasesusePatchesPrereleasesuseDownloaderPrerelease三个布尔偏好实现,并作用于 ReVancedAPI.kt 的请求路径(追加/prerelease后缀)。

三、底层架构:补丁执行与安装链路源码级解读

3.1 PatcherWorker:前台通知 + WakeLock 保障后台执行

打补丁是耗时任务,Manager 使用 AndroidX WorkManager 的CoroutineWorker实现 PatcherWorker.kt。其中两个细节直接对应 changelog 中的修复条目:

  • 前台服务通知(对应**patcher:** add notification and wakelock to worker):getForegroundInfo()创建revanced-patcher-patching通知渠道并返回ForegroundInfo,避免后台执行被系统杀死;
  • PARTIAL_WAKE_LOCK(对应Screen turns off while patching due to wrong WakeLock):doWork()中获取PARTIAL_WAKE_LOCK并持有最长 10 分钟,防止打补丁过程中屏幕熄灭导致任务被挂起。

Worker 还承担了临时 APK 清理逻辑:仅当输入 APK 来自本地临时文件且用户未授予 Root 时删除输入文件,因为 Root 挂载安装后仍需要该文件(见finally块)。

3.2 Session:三阶段补丁管线

Session.kt 是补丁执行的最小封装,其run()方法清晰呈现 ReVanced Patcher 的三阶段管线:

  1. ReadAPK:读取输入 APK,初始化 Patcher(patcher(apkFile, temporaryFilesPath, frameworkFileDirectory, aaptBinaryPath));
  2. ExecutePatches:逐个执行选中的补丁,并通过applyPatchesVerbose中的onEvent回调把每个补丁的完成/失败状态上报为ProgressEvent.Completed/ProgressEvent.Failed,同时利用ensureActive()保证取消响应;
  3. WriteAPK:将 Patcher 结果写入result.apk,再移动到输出路径。

minLogLevel参数对应偏好min_patcher_log_level(默认 INFO,见 PreferencesManager.kt)。

3.3 双运行时:进程内协程 vs 独立进程

2.0.0 引入了外部进程运行时add external process runtime,对应use_process_runtime偏好,默认关闭)。在 PatcherWorker.kt 中可以看到二选一逻辑:

  • CoroutineRuntime:与 Manager 同进程执行;
  • ProcessRuntime:通过 AIDL 把补丁任务放入独立进程执行,隔离崩溃与内存压力,进程内存上限由process_runtime_memory_limit(默认 700 MB)控制。

与此相关的修复包括:patch count remaining at zero when using process runtimeBusError when running 32b binary on armv8 with compatibility(armv8 兼容模式下运行 32 位二进制触发 BusError,2.6.0 修复)以及**Updater:** Handle session death

3.4 Root 安装:挂载式模块安装机制

Root 安装(root installationImprove root installationMount install)在 RootInstaller.kt 中实现,核心思路是不直接替换系统应用,而是以 Magisk 模块 + bind mount 方式覆盖 APK

  • 安装时把补丁后 APK 与模板脚本(service.shmodule.prop,位于 app/src/main/assets/root/)写入/data/adb/modules/$packageName-revanced/,并将模板中的__PKG_NAME____VERSION____LABEL__占位符替换为实际值;
  • 通过mount -o bind把模块内 APK 挂载到原应用 APK 路径(mount()/unmount()方法),实现无需卸载原应用即可"替换";
  • PatcherWorker在重新打补丁前会先卸载已挂载的旧版本(对应Mount install修复)。

3.5 签名与密钥库

打补丁完成后,Worker 调用keystoreManager.sign(patchedApk, output)完成签名(PatcherWorker.kt)。changelog 中相关修复包括:keystore import/exportimprove keystore import error handling and show toast,以及一次重要的密钥库迁移修复(Migration of keystore, by fixing mislabeling of alias as cn)——该问题把证书的cn字段误当作别名处理,导致旧密钥库迁移失败。

四、下载器插件系统:从单一下载到插件化

4.1 插件化架构的演进

下载器是 Manager 获取待修补 APK 的通道,其演进路径在 changelog 中清晰可见:

  1. 基础下载器app downloaderAdd downloader plugin system):引入下载器插件 API;
  2. 多下载器支持Allow multiple downloaders per APK):每个 APK 可选择不同下载器,修复Source list crash when using multiple downloaders
  3. 下载器源系统Downloader source systemfinish implementing the sources system):下载器本身也从"源"加载,形成可插拔生态;
  4. Fragment 化 UIAdd support for writing downloader UI with fragments):下载器可提供自定义界面,相关 AIDL 接口位于 api/src/main/aidl/app/revanced/manager/downloader/webview/;
  5. 信任机制简化:Room 数据库迁移删除了trusted_downloaders表(见 AppDatabase.kt 的DeleteTrustedDownloadersAutoMigrationSpec)。

4.2 运行时代码结构

  • LoadedDownloader.kt:运行时装载的下载器封装,包含包名、类名、名称、Scope实现与Downloader<Parcelable>实例;
  • DownloaderRepository.kt:管理下载器列表、装载与 parcel 数据解包;
  • PatcherWorkerSelectedApp.Search分支会遍历已装载下载器,逐个尝试获取目标版本 APK,并通过GetScope回调处理需要用户交互(如登录)的下载流程。

五、数据库迁移:Room 5 个版本的演进

AppDatabase当前版本为5,启用exportSchema,迁移记录保存在 app/schemas/app.revanced.manager.data.room.AppDatabase/(1.json ~ 5.json)。changelog 中Missing database migration file的修复表明项目严格依赖自动迁移机制,而remove the unique constraint for patch bundle names则对应实体约束的调整。整体演进如下:

迁移内容(可推断)
1 → 2基础实体演进
2 → 3删除trusted_downloaders表(AutoMigrationSpec 明确标注)
3 → 4补丁选择/选项相关调整
4 → 5下载器源系统等新实体的引入

Room 迁移文件的完整性与PatcherWorker等生产代码强相关——版本不匹配将直接导致数据库打开失败,这也是 changelog 单独记录迁移文件修复的原因。

六、稳定性、构建与性能专题

6.1 构建链路问题(2.x 高发区)

1.26.0-dev 到 2.0.x 期间,构建相关问题被反复修复,集中反映了 Kotlin/Compose 项目的典型坑:

  • Downgrade AGP to fix build issuesminify crash on building releaseRelease builds not working (properly)
  • Disable ProGuard to fix various patching errors(2.1.0):关闭 ProGuard 以修复打补丁报错——混淆会破坏 ReVanced Patcher 依赖的反射调用;
  • Exclude desktop AAPT and disable R8 optimizationswe actually don't want to exclude reflection symbols:同样围绕反射符号保留问题;
  • Support patching on ARMv7 by updating AAPT2:通过升级内置的 aapt2(app/src/main/jniLibs/ 提供 arm64-v8a / armeabi-v7a / x86 / x86_64 四套 ABI)支持 32 位 ARM 设备;
  • specify multithreadingDexFileWriter in PatcherOptions:为 Patcher 显式开启多线程 Dex 写入。

6.2 日志与问题排查

  • Export more info in logsShow logger details in patcher screen:打补丁界面可展开查看完整日志;
  • allow user to save logsadd ability to share debug logs:支持保存与分享调试日志,便于反馈问题;
  • add newlines to debug logs:修复日志换行缺失;
  • Show stacktrace in installer ui:安装失败时展示堆栈。

6.3 性能优化

  • Patcher 侧(2.6.0):Silence trace logs to fix GC thrashing and OOM——静默 trace 日志以缓解 GC 抖动与 OOM,是典型的"日志即性能问题"案例;
  • UI 侧:大量条目场景的缓存与惰性加载优化(Performance impact with lots of app entries等);
  • 网络侧run blocking IO operations in the correct contextrun props flow on correct dispatcher,确保 IO 与协程调度正确。

6.4 无障碍与触觉反馈

  • ExtendedFloatingActionButton无障碍修复(not accessible by screen readers);
  • 触觉反馈(Haptic)体系(Add haptic feedback),并修复Some haptic constant are not workingPlayback Switch's Haptic Feedback
  • 在 2.6.0 中特别处理了 RichTap 触觉硬件崩溃(Ignore RichTap vibrator hardware crash),对应实现见 HapticCheckbox.kt 等组件。

七、给开发者的版本选型与升级建议

  1. 日常使用优先选择 2.6.x:2.6.0 解决了 trace 日志引发的 GC/OOM、armv8 兼容模式 BusError 等关键稳定性问题,2.6.1 又修复了空 locale 崩溃,是 changelog 记录中当前最成熟的版本;
  2. 正在开发下载器插件:参考 2.0.0 之后的下载器源系统与 Fragment 化 UI,AIDL 接口见 api/src/main/aidl/;
  3. 遇到打补丁报错:优先确认是否开启了混淆(2.1.0 已默认关闭 ProGuard),并检查min_patcher_log_level与补丁界面日志输出;
  4. 关注数据库变更:任何涉及 Room 实体的改动都必须补齐app/schemas/下的迁移 JSON,否则升级即崩溃。

结语

app/CHANGELOG.md的 1526 行记录可以看到,ReVanced Manager 的每一次版本跳动背后都是一系列明确的问题驱动改进:UI 层追求更短的操作路径,架构层围绕补丁执行、下载器与安装器三大管线持续重构,稳定性层面则在与混淆、反射、多 ABI、Room 迁移等 Android 生态"老问题"反复博弈。这份 changelog 本身就是理解该项目最好的入门材料——顺着版本号读下去,再对照 app/src/main/java/app/revanced/manager/ 下的源码,即可完整还原其技术演进全貌。

【免费下载链接】revanced-manager💊 Application to use ReVanced on Android项目地址: https://gitcode.com/GitHub_Trending/re/revanced-manager

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 18:13:36

CANN/GE动态AIPP通道方差设置

aclmdlSetAIPPPixelVarReci 【免费下载链接】ge GE&#xff08;Graph Engine&#xff09;是面向昇腾的图编译器和执行器&#xff0c;提供了计算图优化、多流并行、内存复用和模型下沉等技术手段&#xff0c;加速模型执行效率&#xff0c;减少模型内存占用。 GE 提供对 PyTorch、…

作者头像 李华
网站建设 2026/9/10 18:11:56

基于Python的财经新闻自动化采集与ETL入库系统

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

作者头像 李华
网站建设 2026/9/10 18:11:35

企业电脑监控软件免费试用避坑指南:从部署到卸载的选型实测

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

作者头像 李华