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.1、2.6.0、2.5.1、2.5.0、2.4.0、2.3.0、2.2.3、2.2.2、2.2.0、2.1.0、2.0.1、2.0.0; - 预发布版:如
2.6.0-dev.13、1.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.38 | 2025-10 ~ 2026-03 | UI 重构、下载器系统、Root 安装等大量功能落地 |
| 主版本升级 | 2.0.0 | 2026-03-14 | feat!破坏性提交,版本号提升至 2.x |
| 2.x 稳定期 | 2.0.1 ~ 2.6.1 | 2026-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 screen、Search 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/perf、improve InstalledAppsScreen caching/perf、Speed 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 filters、filter options for patches):默认关闭(Turn off filters by default),避免干扰默认选择流程; - 必填选项屏幕(
add required options screen):对带必填参数的补丁单独收集输入; - 补丁选项改进(2.6.0
Improve 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),默认标签为revanced与manager,对应 PreferencesManager.kt 的readAnnouncements与selectedAnnouncementTags; - 更新检查:启动时检查更新(
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)。这些开关通过useManagerPrereleases、usePatchesPrereleases、useDownloaderPrerelease三个布尔偏好实现,并作用于 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 的三阶段管线:
- ReadAPK:读取输入 APK,初始化 Patcher(
patcher(apkFile, temporaryFilesPath, frameworkFileDirectory, aaptBinaryPath)); - ExecutePatches:逐个执行选中的补丁,并通过
applyPatchesVerbose中的onEvent回调把每个补丁的完成/失败状态上报为ProgressEvent.Completed/ProgressEvent.Failed,同时利用ensureActive()保证取消响应; - 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 runtime、BusError when running 32b binary on armv8 with compatibility(armv8 兼容模式下运行 32 位二进制触发 BusError,2.6.0 修复)以及**Updater:** Handle session death。
3.4 Root 安装:挂载式模块安装机制
Root 安装(root installation、Improve root installation、Mount install)在 RootInstaller.kt 中实现,核心思路是不直接替换系统应用,而是以 Magisk 模块 + bind mount 方式覆盖 APK:
- 安装时把补丁后 APK 与模板脚本(
service.sh、module.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/export、improve keystore import error handling and show toast,以及一次重要的密钥库迁移修复(Migration of keystore, by fixing mislabeling of alias as cn)——该问题把证书的cn字段误当作别名处理,导致旧密钥库迁移失败。
四、下载器插件系统:从单一下载到插件化
4.1 插件化架构的演进
下载器是 Manager 获取待修补 APK 的通道,其演进路径在 changelog 中清晰可见:
- 基础下载器(
app downloader、Add downloader plugin system):引入下载器插件 API; - 多下载器支持(
Allow multiple downloaders per APK):每个 APK 可选择不同下载器,修复Source list crash when using multiple downloaders; - 下载器源系统(
Downloader source system、finish implementing the sources system):下载器本身也从"源"加载,形成可插拔生态; - Fragment 化 UI(
Add support for writing downloader UI with fragments):下载器可提供自定义界面,相关 AIDL 接口位于 api/src/main/aidl/app/revanced/manager/downloader/webview/; - 信任机制简化:Room 数据库迁移删除了
trusted_downloaders表(见 AppDatabase.kt 的DeleteTrustedDownloadersAutoMigrationSpec)。
4.2 运行时代码结构
- LoadedDownloader.kt:运行时装载的下载器封装,包含包名、类名、名称、
Scope实现与Downloader<Parcelable>实例; - DownloaderRepository.kt:管理下载器列表、装载与 parcel 数据解包;
PatcherWorker的SelectedApp.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 issues、minify crash on building release、Release builds not working (properly);Disable ProGuard to fix various patching errors(2.1.0):关闭 ProGuard 以修复打补丁报错——混淆会破坏 ReVanced Patcher 依赖的反射调用;Exclude desktop AAPT and disable R8 optimizations、we 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 logs、Show logger details in patcher screen:打补丁界面可展开查看完整日志;allow user to save logs、add 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 context、run props flow on correct dispatcher,确保 IO 与协程调度正确。
6.4 无障碍与触觉反馈
ExtendedFloatingActionButton无障碍修复(not accessible by screen readers);- 触觉反馈(Haptic)体系(
Add haptic feedback),并修复Some haptic constant are not working、Playback Switch's Haptic Feedback; - 在 2.6.0 中特别处理了 RichTap 触觉硬件崩溃(
Ignore RichTap vibrator hardware crash),对应实现见 HapticCheckbox.kt 等组件。
七、给开发者的版本选型与升级建议
- 日常使用优先选择 2.6.x:2.6.0 解决了 trace 日志引发的 GC/OOM、armv8 兼容模式 BusError 等关键稳定性问题,2.6.1 又修复了空 locale 崩溃,是 changelog 记录中当前最成熟的版本;
- 正在开发下载器插件:参考 2.0.0 之后的下载器源系统与 Fragment 化 UI,AIDL 接口见 api/src/main/aidl/;
- 遇到打补丁报错:优先确认是否开启了混淆(2.1.0 已默认关闭 ProGuard),并检查
min_patcher_log_level与补丁界面日志输出; - 关注数据库变更:任何涉及 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),仅供参考