云音乐工具箱 (CloudMusicTool)

网易云音乐 Android 客户端的 LSPosed 体验优化模块:去广告、精简界面、收敛弹窗、隐私加固。

当前版本 2.4.12(versionCode 22)。适配网易云音乐 9.6.08 / 9.6.13 / 9.6.15 / 9.6.20(versionCode 9006008 / 9006013 / 9006015 / 9006020)。 与网易官方无任何关联,仅供学习研究和个人设备使用。

仓库:https://github.com/yigenhuobah/cloudmusictool | 下载:Releases | 反馈:Issues

更新日志见 CHANGELOG.md。

兼容性

项 值
目标应用 com.netease.cloudmusic 9.6.08 / 9.6.13 / 9.6.15 / 9.6.20 (versionCode 9006008 / 9006013 / 9006015 / 9006020)
模块包名 io.github.yigenhuobah.cloudmusictool
Xposed API libxposed API 102(minApiVersion=102 / targetApiVersion=102)
系统要求 Android 10+(minSdk 29)
框架 支持 API 102 的 LSPosed
架构 纯 Java 17 + XML + Material 3,无 Kotlin/Compose

安装

  1. 安装 cloudmusictool-<version>.apk。
  2. 在 LSPosed 管理器中启用「云音乐工具箱」,作用域勾选「网易云音乐」。
  3. 打开模块 App,确认状态卡显示「已激活」(首次可能需要启动一次网易云)。
  4. 按需开启功能,修改后重启网易云音乐生效。

界面

底栏 4 tab(设置 / 实验 / 诊断 / 关于)+ 二级页:

  • 设置(默认 tab):四态状态卡(正在连接框架… / 未激活 / 框架已连接 / 已激活)、异常横幅、功能开关、模块级设置(隐藏桌面图标)、恢复默认、页脚;「首页定制」入口在本 tab。
  • 首页定制(二级页,工具栏带返回箭头):发现页推荐卡片、顶部频道、底部导航的保留清单;「我的」页自定义背景。
  • 实验:只读展示目标进程命中的 ABTest,支持白名单内单 key 强开。
  • 诊断:逐功能显示 编号 标题 · registered · hit N · skip 原因,无数据 —;页首刷新时间,页尾刷新与复制。
  • 关于:模块版本、目标应用、源码、四模块互链、免责声明、MIT 许可证。

tab 切换用 hide/show 保留各自滚动位置;非设置 tab 按返回先回设置 tab,再按才退出。状态卡只有四种状态,版本不匹配与多功能失败通过红色异常横幅提示,不新增第五态。

功能

默认值:AD/UI 默认开,PV/EN/EX 默认关;blocked 项一律默认关。所有开关均可在对应分组单独关闭。

AD 广告净化(默认开启,9 项)

ID 功能 说明
AD-01 开屏广告跳过 判定、数据源、落地页三层拦截 + 摇一摇 + 免广实验分支
AD-02 运营弹窗屏蔽 启动时的运营/营销弹窗,保留一键登录
AD-03 广告上报与外跳拦截 广告统计上报、静默拉起外部 App、曝光预请求
AD-04 搜索广告净化 搜索起始页广告位、搜索结果大图/中图广告
AD-05 广告预加载裁剪 冷启动广告入口、播客激励广告预加载
AD-06 首页信息流广告 Banner.isAdBanner 闸门与推荐流推广卡片
AD-07 评论区广告 评论条目广告字段、评论推广条、带货标签
AD-08 播放页广告 黑胶广告层、送礼/活动贴纸、曝光兜底
AD-09 音频贴片广告 音频贴片、播客视频广告(含 :play 进程)

UI 界面精简(默认开启,UI-06 除外,15 项)

ID 功能 说明
UI-01 更新弹窗屏蔽 版本检查、强更弹窗、应用内下载入口
UI-02 跳过启动延迟 去掉红屏人为等待
UI-03 首页模块净化 按 blockCode 隐藏发现页卡片;同步过滤首页 MMKV 缓存
UI-04 顶部频道管理 按保留清单真实删除顶部 tab 与页面;至少保留 1 个
UI-05 底部导航精简 按保留清单过滤真实四项底栏
UI-06 侧栏抽屉精简 暂不支持:当前版本未找到可靠的抽屉数据挂载点
UI-07 引导与气泡屏蔽 推送/评分/VIP/直播/底栏气泡、青少年弹窗
UI-08 禁止自动播放 冷启动、信息流、Banner、蓝牙、4G MLog 自动播放
UI-09 关闭头像挂件 个人主页/评论区头像装饰
UI-10 播放页提示治理 评论气泡、推荐歌曲提示、卡顿/网络错误弹窗、激励广告浮层
UI-11 搜索热词轮播 关闭搜索框运营热词
UI-12 播客与 AI DJ 引导 FM/听书/AI DJ 引导
UI-13 小组件与推送引导 添加小组件、推送引导弹窗
UI-14 歌词页推广 歌词底部 Hint、选项气泡、歌词视频弹窗
UI-15 云村与直播推广 直播推广位、云村发布/搜索气泡

PV 隐私保护(默认关闭,6 项)

ID 功能 说明
PV-01 OAID 与设备追踪拦截 OAID 上传与启动任务
PV-02 日志写盘任务屏蔽 NeedLogToFileTask / NBLogTask
PV-03 启动任务黑名单 按 taskName/类简名跳过非必要启动任务
PV-04 APM 上报抑制 抑制 logApm / forceApmUpload(不拦初始化)
PV-05 统计数据上报抑制 记录统计 key,并关闭 LogMonitorConfigManager 监控开关
PV-06 剪贴板读取拦截 全局 ClipboardUtils 入口返回 null

EN 功能增强(默认关闭,1 项)

ID 功能 说明
EN-01 我的页自定义背景 本地图片全屏背景;仅本机可见,不改变会员状态

EX 实验功能(默认关闭,2 项)

ID 功能 说明
EX-01 强制深色模式 强制开启夜间深色主题,可能与宿主主题资源冲突
EX-02 启动任务编排 白名单任务优先级/线程/降级编排

其他(1 项)

项 说明
隐藏桌面图标 隐藏后桌面与应用抽屉不再显示图标;桌面入口由 activity-alias 承载,隐藏只禁用 alias,MainActivity 保留 MODULE_SETTINGS 入口,可从 LSPosed 管理器重新打开本页恢复

诊断与数据通道

目标进程 HookState -> StatusProvider.call("report")(校验 UID)
  -> 模块 App hook_status -> 诊断页
  • StatusProvider 每次 call 校验 Binder.getCallingUid() 属于目标应用,其他 UID 拒绝。
  • 回传内容仅计数、挂载状态与 skip 原因;payload 在 Provider 边界按结构白名单整体校验(根键 / Feature 名 / 字段集 / 条数 ≤800 / 字符串 ≤256 / 总量 ≤64KB),不合拒绝。
  • 设置页不显示逐功能诊断;切到诊断 tab 或 onResume 时刷新,不自动轮询。
  • 异常横幅条件:目标版本不匹配,或已启用且明确失败功能数 ≥ 2。

构建

环境:JDK 21(构建用;Java source/target 仍为 17)、Android SDK Platform 37、Gradle wrapper 8.13、AGP 8.13.2。

# 单元测试(含 ProfileExportTest,导出 app/build/profile9608.json、profile9613.json、profile9615.json 与 profile9620.json)
./gradlew :app:testDebugUnitTest

# 挂载点体检(按 APK versionCode 自动选择 9608/9613/9615/9620 profile;
# 输出 OK/GONE/ERROR,并校验 DexKitAnchors;--skip-anchors 可跳过锚点)
bash tools/check-mounts.sh --apk /path/to/base.apk --dexsql /path/to/dexsql

# 发版(挂载点门禁需要宿主 APK + dexsql;缺失会阻断,--skip-mounts 可显式跳过)
bash tools/release.sh --host-apk /path/to/base.apk --dexsql /path/to/dexsql

# debug
./gradlew :app:assembleDebug

# release(需要根目录 keystore.properties 与 .jks)
./gradlew :app:assembleRelease

产物:

  • app/build/outputs/apk/debug/app-debug.apk
  • app/build/outputs/apk/release/cloudmusictool-<version>.apk

依赖:

  • compileOnly io.github.libxposed:api:102.0.0
  • implementation io.github.libxposed:service:102.0.0
  • implementation org.luckypray:dexkit:2.3.0(硬编码失败时兜底,已启用 legacy JNI 打包)
  • AppCompat / Material / androidx.preference
  • 单测:JUnit 4.13.2 + org.json:json;当前 491 个用例(:app:testDebugUnitTest)

已知限制

  • 适配版本:9.6.08 / 9.6.13 / 9.6.15 / 9.6.20。其他版本默认 best-effort 继续挂载(与 QuietBox 语义一致),功能可能失效,状态卡/横幅会提示未适配。
  • 9.6.20 适配状态:2026-11-05 对 9.6.20 base.apk 完成 143/143 挂载点静态体检(16/16 DexKit 锚点),未做真机逐功能回归。PV-05 的 d/e 已合并到 c()Z 并通过 profile.remove 删除;PV-01 从 o(String) 迁到 m(String) 上传入口,属语义迁移需真机验证;其余 9.6.15 坐标复用 base。
  • 广告由服务端下发,模块只能阻止展示/上报,不能阻止接口请求。
  • 宿主存在 Tinker 风格热补丁,补丁可能替换被 hook 的实现。
  • 9.6.13 / 9.6.15 适配状态:9.6.13 已在 2.4.4 真机验证;9.6.15 复用 9.6.13 Profile,2026-10-29 对 9.6.15 base.apk 完成 145/145 挂载点静态体检, 并在真机(网易云 9.6.15)确认 installed=134/134、failed=0、版本横幅消失; 未做 9.6.15 的逐功能效果回归。UI-03 按 Block.positionCode 过滤 MixContainerData.getResources()(含 NativeBlock / RnBlock 兜底); UI-05 过滤 tf0.o$a#y 入参(Profile 门控);EN-01 hook MyMusicProxyFragment#kc()Z 强制原生页(9.6.08 回退 oc()Z)。三项均挂 运行时 ClassLoader bootstrap(Tinker 兼容),并校验运行时 loader 可加载宿主类。
  • 底栏无法去掉「首页」Tab:9.6.13/9.6.15 主页面初始化依赖首页,强行删除 会导致启动卡死;保留清单未包含首页时结果为「首页 + 保留清单」。
  • UI-03 新 code 需手动勾选:9.6.13/9.6.15 首页新增的 PAGE_RECOMMEND_SEARCH_TOP_BANNER / SEARCH_CHANNEL_ENTRY / MORE_RCMD 等 block code 不在旧清单中,需要在首页定制里勾选对应项才会隐藏。
  • 清除「我的页背景」后 validType=4 不回滚:宿主侧注入不会随清除撤销, 清除后如仍显示背景可重启网易云(与 2.4.2 一致)。
  • 诊断数据 TTL 为 10 分钟且不发送心跳;目标进程空闲超过 10 分钟时诊断页显示 「数据已过期」,这是设计内的「未知」状态。异常横幅只统计 critical 挂载失败。
  • UI-06 侧栏抽屉无可靠挂载点,保持 blocked,设置页置灰。
  • 部分 UI 挂载点没有 DexKit 锚点,只能精确类名匹配;宿主改名时对应子项报告缺失。
  • DexKit 兜底依赖 release 的 legacy JNI 打包;旧版本/改版仍可能定位失败。
  • Hook 健康度通过 StatusProvider 回写;MIUI 等系统可能拦截目标进程冷启动该 provider, 此时仅在 logcat 输出,诊断页显示「暂无目标进程回写」。
  • PV-05 会记录统计上报并关闭 LogMonitorConfigManager 的监控开关,不是纯只读。
  • 不触碰安全/风控/设备 ID,不绕过付费、VIP、DRM、版权区域限制。

同系列模块

隐私

模块不联网、不收集、不上传任何账号或使用数据。 设置界面只通过 LSPosed 的 remote preferences 与本机目标进程通信。 统计观测(PV-05)只写 logcat,不落盘、不外传。

免责声明

本项目为开源学习项目,所有代码仅供学习研究、逆向工程实践和个人设备体验改善。 严禁用于商业用途、付费破解或绕过版权保护。使用风险由使用者自行承担。 与网易云音乐官方无任何隶属或背书关系。

参考

  • libxposed API 102 规范(Maven Central io.github.libxposed:api:102.0.0)
  • DexKit(org.luckypray:dexkit)

Releases

2.4.12

Stable

11/5/2026, 4:18:32 PM

新增

  • 网易云 9.6.20(9006020)适配:27 个 @9.6.20 坐标变体(含类改名 fw0.e/gu0.e→lu0.e、utils.jn→utils.vn、utils.sg→utils.eh、utils.i2→utils.t2、nb2→yb2、tf0→wf0、rf0→uf0、mt0→rt0、ur0→zr0、wr0→bs0、iq→kq、en2→on2 等),candidates 保留全部历史类名,避免 9.6.20 中同名无关类被误命中。
  • profile.remove 构建能力:anchors.json 的 profile 可声明要删除的 mount id;AnchorTable、tools/check-mounts.sh 与 tools/gen_anchors.py 同步实现并在 build 期严格校验。9.6.20 用它删除 PV-05 已合并进 c()Z 的 d/e 两条解析路径。
  • 运行时 Profile9620:复用 Profile9615 基表(145),移除 d/e 后原位应用 27 个覆盖,得到 143 个挂载点;ProfileRegistry/VersionGate 自动识别 9006020。

修复

  • MineBackgroundHooks 的 jc 分支门控:9.6.20 的 kc()Z 映射为 jc()Z,原代码按字面量 "kc" 判断会把 jc 当成 oc 回退,导致日志标签错误且 sg/hc 探针不安装;改为比较 Profile 映射后的方法名。探针调用方识别同时匹配 utils.eh。
  • StatisticHooks 对已移除 d/e 的误报:活动 Profile 不存在 LogMonitorConfigManager#d/#e 时不再查找,9.6.20 诊断页不会出现两条假的非 critical 缺失;9.6.08/9.6.13/9.6.15 行为不变。

构建

  • tools/gen_anchors.py 重新生成 209 个 AnchorKeys 常量(DexKitAnchors 字符串不变)。
  • 9.6.20 全量静态体检 143/143 挂载点、16/16 DexKit 锚点通过;新增 Profile9620OverrideCoverageTest 锁定 27 个覆盖不静默 miss。

已知限制

  • 9.6.20 仅完成静态验证(dexsql + check-mounts),未做 LSPosed 真机逐功能回归;release 前需在真机确认诊断页 installed/failed。
  • PV-01 从 o(String) 迁到 m(String) 上传入口是语义迁移(旧 jsonParseOptAdStartInfoUpload 解析壳在 9.6.20 消失),置信度中,需真机验证 OAID 上报拦截。9.6.20 仍存在无参 MusicOaidUploadManager.o()V(由 AppIdleInitTask$b0.invoke 调用,且不转调 m(String)),本挂载点不覆盖该入口,真机验收需单独确认这条路径。
  • 其余 9.6.15 坐标复用 base,仅做类名+签名级校验,未逐条证明语义不变。

Assets

4

2.4.11

Stable

11/5/2026, 12:25:04 PM

修复

  • 配置读取逐键容错:Config.load 对每个开关、集合与 AB 覆盖独立 try/catch;单个坏值只 WARN 并回退该 key,不再中止后续读取。
  • 新增 config_version:开关写入与恢复默认在同一次 commit 写入版本 1;读到更高版本只 WARN,不重置配置。
  • 设置页新增「恢复默认」:二次确认后写入全部默认值、移除集合/AB/自检辅助键并回读校验;远端不可用或校验失败会明确提示,不假装成功。
  • 锚点表校验 schemaVersion:版本不是 1 时整表 fail-open 并 WARN,避免按错误字段猜读。

构建

  • CI 改为检出 xposed-core 并运行 tools/preflight.sh;新增 xposed-core 周度跨仓漂移检查。

已知限制

  • 网易云 9.6.20(9006020)尚未适配:静态锚点 OK=116 GONE=29、运行时 installed 87/116。当前仍只声明 9.6.08 / 9.6.13 / 9.6.15,其他版本 fail-open 并在界面提示。

Assets

4

2.4.9

Stable

11/2/2026, 12:14:41 PM

修复

  • UI-04 顶部频道过滤导致「我的 → 最近」闪退(issue #5):MusicTabLayout.addTab 兜底原先按「不在保留清单里」删 tab,但该类被「我的音乐 / 最近播放」等页面复用;误删后 TabLayout 子 View 数与 PagerAdapter 页数不一致,populateFromPagerAdapter 抛 IndexOutOfBoundsException: index=2 count=1。现在兜底只作用于首页 tab 容器实例,并且只移除本次数据层真正过滤掉的标题。
  • 新增 TopTabHooksTest 回归用例:记录删除标题、非首页 MusicTabLayout 一律放行。

Assets

4

2.4.8

Stable

11/1/2026, 9:55:52 AM

诊断轮(内置诊断 + 对齐,27 项工作项全修)。明细见仓库 CHANGELOG 对应条目与提交记录。

新增

  • 崩溃自动捕获:模块安装时包装宿主未捕获异常处理器(透传原 handler,不影响应用自有上报),最近 3 条崩溃(时间/线程/异常类+前 2 帧)随诊断回传,诊断页新增「最近崩溃」卡片——报障不再需要 adb。
  • 导出诊断包:诊断页新增分享按钮,一键聚合模块版本/系统/框架 API/目标版本/功能状态/最近命中/最近崩溃,走系统分享面板。

修复

  • 「我的页」自定义页补 onDestroy 清理(WriteGate + 在途刷新作废)。

说明

  • crash 通道为 HookState JSON 根级 crashes 数组;QB/QM/TB 为 crash0/1/2 平铺键——载体差异源于回传协议不同,语义同构(最近 3 条、240 字符截断、空串清残留)。

Assets

4

2.4.7

Stable

11/1/2026, 6:44:31 AM

四模块深度审查修复轮(130 项发现,本模块 53 项中 52 项修复、1 项经实跑证伪豁免)。全量明细见仓库 CHANGELOG 对应条目与提交记录。

修复

  • 9.6.15 版本门控失配(high):BottomTabHooks/MineBackgroundHooks 不再用 versionCode == 9006013 判等,9.6.15 恢复 UI-05 底栏过滤与 EN-01 全屏链路;TargetProfile.findMethodSpec 修正改名后挂载点的 critical 判定。
  • 会话协议:session 改为身份比较(带进程随机后缀),时钟回拨不再整批丢弃回传;未来时间戳超过 5 分钟判过期。
  • 诊断口径:installer 异常计入 failed/criticalFailed,失败横幅不再漏报整体失效;DexKit native 加载与扫描失败增加负缓存,未适配版本不再主线程全盘扫描。
  • hook 语义:chain.proceed() 恢复单次调用(移出 try,禁止 catch 内二次 proceed);配置写回补 generation 回滚;hit 限流键收敛、hookNull 返回类型校验。
  • 其余:JSON 过滤支持对象级 blockCode、搜索广告卡隐藏、启动延迟重复投递修复,以及测试质量与死代码清理。

Assets

4

2.4.6

Stable

10/31/2026, 1:37:25 PM

UI-03 首页定制新增两个可勾选项。

新增

  • 首页定制新增「搜索频道入口」「为你专属推荐(更多推荐)」两个可勾选项:
    对应网易云 9.6.13 首页 scan 日志中的 PAGE_RECOMMEND_SEARCH_CHANNEL_ENTRY
    与 PAGE_RECOMMEND_MORE_RCMD 两个 block code,追加在选项列表末尾,
    不影响旧选项索引;新增对应纯 JVM 单测锁定匹配行为。

注意

  • 这两个 block 只在宿主下发对应 AB / 推荐流时存在。部分账号的首页数据流中
    不含它们(9.6.15 真机实测 UI-03 cache scan ... no-match),勾选后可能
    没有可观察效果;选项只影响 UI-03 的过滤清单,不会误伤其他 block。

验证

  • 单测 257 个用例通过(0 失败 / 0 跳过);lint 0 error。
  • 真机(25102RKBEC / 网易云 9.6.15):2.4.6 覆盖安装后状态卡
    「目标版本 9.6.15 · 已注入目标应用」,profile mounts=145、
    runtime hooks installed 4/4;两个新选项可勾选并持久化;
    当前账号首页数据流不含这两个 block,端到端 filtered 不可构造;
    AD-01、UI-02、EN-01、PV-01~06 回归通过,无 FATAL/ANR。

Assets

4

2.4.5

Stable

10/29/2026, 2:20:52 PM

深度代码评审第 4 轮(Phase 2–5):调度、配置写入、首页/背景热路径与诊断链路
加固,并新增网易云 9.6.15 兼容。

新增

  • 配置写入结果与异步提交(Phase 3):ConfigStore 引入 WriteResult
    (SAVED / REJECTED / UNAVAILABLE / FAILED),开关与多选写入改为
    后台单线程队列 + 异步 commit,真实结果回主线程。框架未连接时设置页、
    首页定制的开关置灰并提示;远端拒绝时开关/多选回滚并提示「保存失败,
    设置未生效」。设置页、实验页、首页定制的 remote prefs 读取与桌面图标
    组件状态读写全部移出主线程;桌面图标开关失败时回滚并提示。
  • 首页 block token 缓存(Phase 4):HomeBlockHooks 按 block 身份
    (WeakHashMap 弱键)缓存已提取的 positionCode / moduleKey,滚动时不再
    重复反射与正则;只有 String、org.json、Map/Collection 才序列化,任意
    宿主对象不再调用不可控的 toString。
  • 「我的」页背景源指纹(Phase 4):共享目录不可读、走 Provider 兜底时,
    通过 StatusProvider.query 读取内部图片 length / lastModified 指纹,
    换图或清除后能及时让缓存失效。
  • 运行时 ClassLoader 校验(Phase 4):RuntimeHookBootstrap 在安装运行时
    UI hook 前用 3 个宿主类探测 ClassLoader;Tinker 中间态或异常 loader 不执行
    installer 并重置标志,等后续 Activity 重试,避免 hook 挂在无效 loader 上。
  • 诊断会话与新鲜度(Phase 5):回传新增 session(目标进程启动时刻);
    模块侧丢弃迟到的旧会话整包回写;超过 10 分钟没有新回写时诊断页标记
    「数据已过期」,不再把旧快照当成健康数据。
  • 工具链:check-mounts.sh 记录 APK 路径/大小/mtime/SHA-256,同路径
    替换 APK 时丢弃旧临时结果;release.sh 在未安装 gh 时跳过官方仓资产
    SHA-256 校验并明确告警。

修复

  • 冷启动首报 context 未就绪:目标进程 context 未就绪时,
    TargetProcessPublisher 原先直接丢弃本次状态快照,诊断页在无后续事件时
    可能长期为空。现改为按 1s/2s/4s 有界重试最多 3 次,同一通道只保留一条
    重试链;成功、短路或重试耗尽都会取消在途任务。快照幂等,重复发送不会
    产生副作用,仅修复回传时机。
  • Profile 映射签名校验:HookKit 使用 Profile 映射方法前校验参数与返回
    类型;不匹配时输出 warn 并回退常规查找,避免挂到同名的错误重载方法。
  • DexKit 弱缓存:bridge 与 class 缓存的值改为 WeakReference。此前
    WeakHashMap 的弱键被强 value 反向引用,Tinker 热修 ClassLoader 无法回收。
  • 重试取消与单调时钟(Phase 2):TargetProcessPublisher 在发送成功、
    短路或重试耗尽时取消已排队的重试任务,避免状态已回传后迟到任务再次发送;
    PublishThrottle 的窗口判定改为 synchronized,消除「关窗消费 pending」
    与并发 decide 的竞争;生产时钟改用 nanoTime 单调毫秒,墙钟回拨不再吞
    事件、向前跳变不再重复发送。
  • ExperimentState 超长条目(Phase 2):key / group / source 任一超过协议
    上限(256 字符)时整条跳过并只告警一次。StatusProvider 对超长字符串是整包
    拒绝,跳过单条可保留其它 experiments 数据。
  • 「我的」页背景共享 Bitmap:清除背景时不再主动 recycle 进程级共享
    位图,只清引用交给 GC,修复其它页面继续绘制时的
    Canvas: trying to use a recycled bitmap 崩溃。
  • 失败横幅误报(Phase 5):failedFeatureCount 只统计主进程、TTL 内、
    已启用且「expected > 0 且 installed <= 0」或 criticalFailed > 0 的功能;
    普通 lastFailure 只作诊断。expected=0 的功能(如实验面板)不再计入。
  • 设置页旧快照覆盖(Phase 3):后台读取结果用 generation 丢弃过期快照;
    用户刚修改的开关/多选不会被更早的读取结果回写覆盖。

诊断

  • 诊断页数据来源新增「数据已过期:超过 10 分钟未收到目标进程回写」。
  • 回传 payload 根键白名单新增 session;迟到的旧会话回写记录
    status report ignored: stale session。
  • Profile 映射签名不匹配、运行时 loader 不可用、experiments 条目超长均输出
    明确的 warn 日志,便于定位适配问题。
  • 异常横幅只认 critical 挂载失败,可选挂载点改名不再把整个功能判死。

兼容

  • 网易云 9.6.15:9.6.15(versionCode 9006015)复用 9.6.13 的挂载点集合;
    2026-10-29 对 9.6.15 base.apk 全量体检 145/145 OK。版本门禁与「关于」页
    展示 9.6.08 / 9.6.13 / 9.6.15;未适配版本仍 fail-open。

已知限制

  • 底栏保留清单无法去掉「首页」Tab(9.6.13/9.6.15 主页面初始化依赖首页,
    强行删除会导致启动卡死)。
  • UI-03 的隐藏清单基于旧版 block code;9.6.13/9.6.15 首页新增的
    PAGE_RECOMMEND_SEARCH_TOP_BANNER / SEARCH_CHANNEL_ENTRY / MORE_RCMD
    等 code 需要在新版首页定制里勾选对应项才会隐藏。
  • 「我的页背景」清除后宿主侧 validType=4 注入不会回滚(与 2.4.2 一致),
    清除后如仍显示背景可重启网易云。
  • 9.6.15 复用 9.6.13 Profile,目前只完成挂载点静态体检,未做 9.6.15 单独
    真机验收;如 9.6.15 后续小版本改动类/方法坐标,需要重新体检。
  • 诊断数据 TTL 为 10 分钟且不发送心跳:目标进程空闲超过 10 分钟会显示
    「数据已过期」,这是设计内的「未知」状态,不是故障。
  • 异常横幅只统计 critical 挂载失败;非 critical 子项失败仅出现在诊断页,
    不会触发横幅。

验证

  • :app:testDebugUnitTest:252 个用例通过;:app:lintDebug、
    :app:assembleRelease 通过。
  • 9.6.15 挂载体检 145/145 OK(profile9613.json + --allow-version,
    RESULT: OK=145 GONE=0 ERROR=0)。
  • tools/verify-apk.sh PASS:versionCode=15 / versionName=2.4.5,签名证书
    SHA-256 eea85cac2aee030a28a2fe1e6f5b4e3e3c9448b674e53ec5bf88c3ea09d08925,
    R8 keep 与 Xposed 元数据全部通过。
  • APK:app/build/outputs/apk/release/cloudmusictool-2.4.5.apk,
    4,253,165 字节(约 4.06 MiB),SHA-256
    7184566341875033ad704208459624a9a7dd817ced708564cb5edd430b6ad62e。

Assets

4

2.4.4

Stable

10/26/2026, 5:26:30 PM

网易云 9.6.13 三项适配(UI-03 / UI-05 / EN-01 第二层)。三项均已在真机
25102RKBEC / Android 17 / LSPosed 2.2.1 / 网易云 9.6.13 验证。

修复

  • 9.6.13 UI-03 首页模块净化:MixContainerData.getResources() 的元素是
    com.netease.luna.cm.container.Block,旧逻辑只认 DslBlock#getDslWrapperModel,
    对 9.6.13 首页混排的 NativeBlock / RnBlock 完全不命中。现主匹配改为
    Block.getPositionCode(),DslBlock 保留 originData 正则兜底,NativeBlock
    补充 nativeData / originServerData 兜底;隐藏清单新增 9.6.13 的 6 个
    block code(PAGE_RECOMMEND_BANNER_0 / GREETING / NOTE /
    PODCAST_NARROW_SCENE / SEARCH_TOP_BANNER / SECONDARY_TAB)。
    getBlockCodeOrderList() 同步按隐藏清单过滤(只影响下一次分页请求)。
    真机验证:配置的旧 30 项 code 命中时首页顶部对应卡片消失
    (resources filtered 9/9)。
  • 9.6.13 UI-05 底部导航精简:9.6.13 底栏列表构建点是
    tf0.o$a#y(List<BottomTabInfoVO>, Z);旧的 rh0.c.c 返回的是
    List<Drawable>(drawable 工厂),过滤它只会让图标错位、不能删 tab。
    现改挂 tf0.o$a#y 过滤入参,state 与 drawable 同源缩短;tf0.o$a 为
    9.6.13 专属挂载点,按 Profile 门控(9.6.08 不查找,避免诊断误报)。
    首页 Tab 始终保留:网易云主页面以首页为初始 tab,把首页从底栏删掉会让
    导航初始化卡住、启动页一直不消失(真机复现并修复)。保留清单不再包含首页时
    结果为「首页 + 保留清单」。
    真机验证:保留 {搜索, 关注} 时底栏为「首页 / 搜索 / 关注」
    (filtered from 4 to 3 tabs),正常进入首页。
  • 9.6.13 EN-01 我的页自定义背景(第二层调度点):MyMusicProxyFragment
    类并未消失——9.6.08 的 oc()Z(RN 门禁)在 9.6.13 改名为 kc()Z,
    而同名的 oc()V 只负责启动协程,旧 hook 对它返回 false 完全无效。
    现改为 hook kc()Z 返回 false 强制原生页(9.6.08 仍回退 oc()Z),
    并新增只读探针记录 sg.s() 结果与 hc() 最终创建的 Fragment。
    修复 9.6.13 已失配的反射(pe() → pe(Activity);删除 9.6.13 不存在的
    W1(boolean) / kd(String) 分支,9.6.08 保留原路径)。
    真机验证:kc=false 强制原生页、sg.s=true、
    hc fragment=MyMusicFragmentV4、本地背景贴图与内容区 scrim 全部生效。
  • 共享基础设施(三项共用):9.6.13 运行时使用 Tinker
    DelegateLastClassLoader(tinker_classN.apk),模块启动时的 ClassLoader
    与运行时不同。现提供 RuntimeHookBootstrap 在首个 Activity#onCreate
    用运行时 ClassLoader 统一安装 UI-03 / UI-05 / EN-01(UI-04 已在 2.4.3
    使用同机制);MountResolver 缓存按 ClassLoader 隔离;HookState 新增
    entry(入口调用)计数并区分 hit(过滤生效)计数,运行时安装后重算
    unavailable。
  • 诊断:getBlockCodeOrderList / getResources / getBlockList /
    底栏列表构建入口均记录 entry;getResources 无命中时按 10 秒限流打印
    block 运行时类型与 positionCode 样本,便于后续版本适配。

已知限制

  • 底栏保留清单无法去掉「首页」Tab(9.6.13 主页面初始化依赖首页,
    强行删除会导致启动卡死);首页定制页新增的「云村 (social)」「发布
    (publish)」按 tabCode 匹配 9.6.13 新增 tab。
  • UI-03 的隐藏清单基于 9.6.08 的 30 个 block code;9.6.13 首页出现了
    PAGE_RECOMMEND_SEARCH_TOP_BANNER / SEARCH_CHANNEL_ENTRY /
    MORE_RCMD 等新 code,需要在新版首页定制里勾选对应项才会隐藏。
  • 「我的页背景」清除后宿主侧 validType=4 注入不会回滚(与 2.4.2 一致),
    清除后如仍显示背景可重启网易云。

验证

  • :app:testDebugUnitTest:195 个用例通过(新增 MountResolver ClassLoader
    隔离、HookState entry/unavailable、UI-03 block 匹配、UI-05 过滤与
    Profile 门控、EN-01 调度点选择);:app:lintDebug 通过。
  • 9.6.13 挂载体检 145/145 OK;9.6.08 挂载体检 142/142 OK。
  • 真机 25102RKBEC:冷启动 runtime hooks installed: 4/4,UI-03 / UI-05 /
    EN-01 hook 链路全部命中,无 FATAL / ANR / hook failed。

Assets

4

2.4.3

Stable

10/25/2026, 9:49:05 AM

修复

  • Issue #4:9.6.13 顶部频道管理(UI-04)不生效:网易云运行时使用 Tinker
    热修 ClassLoader,模块启动时挂载的是 base 副本,导致 UI-04 钩子全部
    “registered 但零命中”。现改为在首个 Activity#onCreate 用运行时
    ClassLoader 安装 UI-04 钩子,并补充 ArkFragmentV2 / arkview.ArkFragment
    数据链路覆盖。真机 9.6.13 验证:保留「心动/推荐」时顶部只剩这两个频道。
  • EN-01 9.6.13 入口适配(第一层):fullScreen 注入入口整包改名
    pc2.* → nb2.*,新增 BgInfoParser / BgStore 覆盖,避免 9.6.13 上
    EN-01 类定位失败。9.6.08 不受影响。

已知问题(本次未修复)

  • 9.6.13 上 UI-03 发现页推荐卡片隐藏仍不生效,首页卡片未按配置过滤。
  • 9.6.13 上 UI-05 底部导航保留仍不生效,底栏 tab 未按配置裁剪。
  • 9.6.13 上 EN-01 我的页自定义背景仍不显示:MyMusicProxyFragment
    类已消失(只剩 MyMusicFragmentV3/V4),页面架构变化,第二层调度点待
    重新逆向;9.6.08 不受影响。
  • 以上三项已记录,下一版继续处理;如急需可在 Issue 中补充诊断页截图和
    网易云版本号。

验证

  • :app:testDebugUnitTest:166 个用例通过;:app:lintDebug、
    :app:assembleRelease 通过。
  • 9.6.13 挂载体检 142/142 OK;真机 25102RKBEC 冷启动验证:保留
    「心动/推荐」时顶部只剩这两个频道,清空后恢复全部 6 个。

Assets

1

2.4.2

Stable

10/25/2026, 6:50:19 AM

深度代码评审第三轮:调度/管线重构与热路径性能;附带 Issue #1 修复。

修复

  • 「我的」页自定义背景整页透出(Issue #1):根因是宿主 gd() 要求背景
    图经官方加载器真实加载完成才给内容区设半透明遮罩,模块贴图的本地路径
    走不通该链路。现于背景贴图后主动应用官方同款 scrim(0x1AFFFFFF),
    清除背景时回调宿主恢复;gd() 双签名兼容 9.6.08/9.6.13。已知限制:
    网易云 9.6.13 起「我的」页架构调整,EN-01 整条链待下一版适配
    (9.6.08 不受影响)。
  • 诊断回传改领先+尾沿调度并收敛为共享管线:TargetProcessPublisher 统一
    HookState 与 ExperimentState 两套回传(共享执行器/Context 反射缓存/authority),
    窗口内状态变化不再丢失,最后一次变化必随尾沿上报——冷启动后诊断页
    数分钟级延迟的问题根治;实验通道首事件改为立即发送。
  • AbTest 定位并入 HookKit 主管线(获得 Profile 参数消歧/旧名映射;DexKit
    兜底待锚点补充后自动生效);EN-01 全部类定位改走 HookKit,失败进入
    诊断页(原仅 logcat 可见)。

变更

  • HookKit 返回类型校验收紧:skipVoid 现要求精确 void 返回(全仓 26 个
    skipVoid 站点已逐一审计确认为 void 后收紧),9 个文件的逐处样板检查
    收敛为 installVoidByName/installConstFalse 中心助手。
  • 「我的」页 hook 的反射样板与 sampleSize 手工副本删除;set 型配置与
    强开映射解析收敛为 PrefsSetCodec/ForceMapCodec 单一实现;目标包名
    常量收敛到 Config.TARGET_PACKAGE。

性能

  • MMKV 读取 hook 零分配快路径:mmapID 按实例缓存(每读 1 次反射→0)、
    相关性判定改首字符预筛+regionMatches(最坏 240B/读分配→0)、黑名单为空
    时连查表都不进。基准前后对照见评审产物。
  • hit 限流键与 detail 解耦:被限流的命中不再拼字符串/进锁;限流表
    超 512 条自动清空重建,消除长会话无界增长。

验证

  • :app:testDebugUnitTest:165 个用例通过(2.4.1 为 140);两波七组经
    全站点审计门、补丁回放与基准复测验收;Issue #1 附带 3 个新用例。

Assets

1

2.4.1

Stable

10/24/2026, 9:46:04 AM

深度代码评审第二轮修复(协议/并发/性能)。

修复

  • 回传协议边界真强制:StatusProvider 落盘前对两种通道按结构白名单整体校验
    (根键 / Feature 名 / 字段集 / 条数 ≤800 / 字符串 ≤256 / 总量 ≤64KB),不合拒绝;
    退役与真实协议脱节的 reg./hit./skip. 白名单死抽象。
  • 「我的」页背景三连修:external 共享副本写入改 tmp+rename 原子替换;
    clear()/syncExternal() 与导入共用单线程队列 FIFO 串行,消除「清除被在途
    导入撤销」「导入报成功但文件已清空」等交错终态;目标进程位图缓存按源文件
    指纹失效,换图/清除后即时生效,不再需要强杀网易云。
  • PV-03 启动任务黑名单套用核心任务保护名单(与 EX-02 共享同一来源),
    用户配错黑名单不会误杀受保护启动任务。
  • AbTest 挂载失败进入诊断页(原仅 logcat 可见);删除 EN-01 无消费死坐标。
  • JsonFilter 零删除快路径:延迟序列化 + 零删除原引用返回 + 嵌套串廉价预门;
    实测 500KB 零命中 18.8ms → 0.19ms(≈98×),过滤语义不变。
  • 死代码清理:VersionGate.shouldProceed(恒真)、DexKitAnchors.of、
    ProfileRegistry.clearActive、HookState.markNotFound 旧重载、
    MineBackgroundStore.calculateInSampleSize 包装。

变更

  • ExperimentFragment 改用 StatusProvider.readExperiments 单一读取入口。

验证

  • :app:testDebugUnitTest:140 个用例通过(2.4.0 为 123);七组修复经
    变异验证、补丁回放与独立基准复测验收。
  • 真机(网易云音乐 9.6.13 / versionCode 9006013,KernelSU + LSPosed,与第三方模块
    共存环境)冷启动验证:136 挂载全部注册、进程稳定无 FATAL、回传协议零拒绝。
    注:x86_64 模拟器上宿主防篡改库(libpoison.so)有启动崩溃复现,与本版改动的
    关联未证实(真机不重现),待模拟器环境恢复后复查。

Assets

1

2.4.0

Stable

10/23/2026, 8:02:59 PM

底栏导航回归 + 适配网易云音乐 9.6.13(fail-open 版本门禁,versionCode 10)。

新增

  • 底栏 4 tab 导航:设置 / 实验 / 诊断 / 关于四个顶层 tab 常驻底栏,切换用
    hide/show 保留各 tab 滚动位置;「首页定制」保留为二级页(从设置页进入,
    带返回箭头,进入时隐藏底栏,返回后恢复)。首页定制页移除冗余的
    「仅本机可见」说明(功能表已有同一描述)。
  • 适配网易云音乐 9.6.13(versionCode 9006013):新增 Profile9613 挂载点总表,
    与 Profile9608 双档案并存,ProfileRegistry 按目标 versionCode 自动选择;
    相对 9.6.08 的混淆漂移共 34 个挂载点重定位(按 mount id 的 overrides 表 +
    hint 第三参等分片级差异),并新增 Profile 感知的方法名映射(hook 文件写死的
    9.6.08 混淆名按活动 Profile 换算成实际方法名)。9.6.08 仍受支持。
  • fail-open 版本门禁:未适配/未知版本不再因版本不匹配整体跳过 hook:
    active Profile 置空后回退硬编码挂载点 best-effort 安装(与 QuietBox 语义一致),
    状态卡/异常横幅提示未适配;移除 allow_unsupported_version 开关。

变更

  • 工程整备:新增 tools/release.sh(一键发版:预检 → 构建 → 校验 → 归档 →
    可选 tag / Release / 官方仓同步)、tools/verify-apk.sh(Xposed 元数据 / scope /
    R8 keep / Manifest / 版本号 / 签名证书校验)、tools/preflight.sh(JDK 21 + SDK +
    单测 + lint 预检)、CI(test + lint);接入 JaCoCo 覆盖率报告;新增 prefs/Feature
    一致性与 Hook 注册表等单测;appcompat 1.8.0 / material 1.14.0;构建基线 JDK 21
    (Java 字节码仍 17)。
  • 移除未使用的 compileOnly io.github.libxposed:annotation:1.0.0 依赖:
    全部源码零引用,compileOnly 不进入 APK,删除不影响功能与产物。
  • tools/check-mounts.sh 支持双档案:期望 versionCode 取自所选 profile JSON
    (9608 / 9613 各自携带),不再硬编码单一版本号。

修复

  • StatusProvider 上报 type 只认 mounts/experiments,未知 type 一律拒绝,
    防止绕过 mounts 通道的主进程门禁覆盖主进程快照。
  • EX-02 启动任务编排改用 installOne 传入的会话级 config 快照,不二次 Config.load。
  • ConfigStore 读取 Set 时空串视为未设置回退默认值,与 Config.loadSet 一致。
  • 主界面 tab 切换的刷新挂在事务 runOnCommit 之后,落在真正切到的新 tab 上。

验证

  • :app:testDebugUnitTest:123 个用例通过;:app:lintDebug、
    :app:assembleRelease、bash tools/preflight.sh、bash tools/verify-apk.sh 通过。
  • 模拟器(网易云 9.6.13 / versionCode 9006013)运行时:115 registered / 0 skip /
    10 mapped,无 FATAL。
    APK: cloudmusictool-2.4.0.apk
    versionCode: 10
    大小: 4,231,517 字节
    SHA-256: a378b3eeb5658f12d2d39efc3a1017ea926d345f33ddf865366bcdd27209e7de

Assets

1

2.3.0

Stable

10/23/2026, 2:15:02 PM

云音乐工具箱 2.3.0(versionCode 9),适配网易云音乐 9.6.08。

新增

  • 隐藏桌面图标:主设置页「其他」分组新增开关。桌面入口改由 activity-alias 承载,隐藏只禁用 alias,MainActivity 保留 LSPosed MODULE_SETTINGS 入口,可从 LSPosed 管理器重新打开设置页恢复,不会自锁。状态以系统组件状态为准,外部改动(adb / 清数据)回到本页自动同步。感谢 @Z2549 的 PR #3。

变更

  • 主设置页在 EX 分组之后新增「其他」分组,用于不属于 AD/UI/PV/EN/EX 的模块级设置。

验证

  • :app:testDebugUnitTest:64 个用例通过。
  • :app:lintDebug、:app:assembleRelease 通过。
  • 模拟器 emulator-5554(Android 15 / API 35):2.2.0 → 2.3.0 覆盖升级、隐藏/恢复、DONT_KILL_APP 不杀进程、隐藏态冷启动、外部组件状态同步、无 FATAL,全部通过。
  • 真机 25102RKBEC(Android 17 / MIUI / LSPosed 2.2.1):2.2.0 → 2.3.0 覆盖升级、MIUI 桌面图标真实移除与恢复、DONT_KILL_APP 不杀进程、LSPosed 管理器入口可打开设置页、无 FATAL。
  • 真机当前网易云为 9.6.10(模块仅适配 9.6.08),设置页会显示版本未适配警告;隐藏桌面图标不依赖宿主版本,不受影响。
  • 发布签名证书 SHA-256 与 2.2.0 一致。

APK: cloudmusictool-2.3.0.apk,3,873,662 字节
SHA-256: 9ae6276f2639a6c9935dad0349c9b3d8083d282b807ccff08805e6506c9a1e6a

Assets

1

2.2.0

Stable

10/22/2026, 5:11:51 PM

云音乐工具箱 2.2.0(versionCode 8),适配网易云音乐 9.6.08。

新增

  • 诊断页:逐功能显示 编号 标题 · registered · hit N · skip 原因,无数据 —;页首显示回写时间,页尾提供刷新与复制诊断信息。
  • 关于页:模块版本、目标应用、源码、四模块互链(当前模块标注「(当前)」)、免责声明与 MIT 许可证;链接可点击打开。
  • 异常横幅:目标版本不匹配,或已启用且明确失败功能数 ≥ 2 时显示;不新增第五种状态卡状态。

变更

  • 导航重构:移除 4 Tab 底栏,改为单 Activity + MaterialToolbar + FrameLayout;主页面为设置页,首页定制、实验、诊断、关于为二级页,返回保留主页面滚动位置。
  • 状态卡:只保留「正在连接框架… / 未激活 / 框架已连接 / 已激活」四态;删除「目标版本未适配」第五态。
  • 功能重编号:33 项统一为 AD-01AD-09、UI-01UI-15、PV-01PV-06、EN-01、EX-01EX-02;remote prefs key 不变。
  • 默认值:AD/UI 默认开,PV/EN/EX 默认关;UI-15 云村与直播推广改为默认开。
  • 构建基线:AGP 8.13.2、compileSdk 37、minSdk 29、targetSdk 36、JDK 17、Gradle 8.13。
  • 文案:用户可见文案全部迁入 strings.xml,统一前缀,去除人称与默认值重复描述。

验证

  • 57 个单测通过;debug/release 构建、lint 通过。
  • 真机 25102RKBEC(Android 17 / LSPosed 2.2.1 / 网易云 9.6.08):模块 App 启动正常,状态卡「已激活」,诊断页显示新编号,关于页四模块互链正常,首页定制 UI-16 设置正常;无 FATAL。
  • 2.2.0 之前的条目保留发布时的旧编号。

APK: cloudmusictool-2.2.0.apk,3,868,902 字节
SHA-256: a37e2fdcd78f01ea8005482f0f6ed74b9da9f7653100181eb4b11a920602b163

Assets

1

2.1.0

Stable

10/22/2026, 4:21:11 PM

云音乐工具箱 2.1.0(versionCode 7),适配网易云音乐 9.6.08。

新增

  • UI-16 我的页自定义背景(默认关闭):在模块 App「首页定制」选择本地图片,
    压缩后存入模块私有目录,并同步一份到
    Android/media/<模块包名>/mine_background.jpg。
  • 启用后「我的」页强制走原生 MyMusicFragmentV4,复用官方全屏背景链路:
    把 UserBackgroundInfo.validType 注入为 4(FullScreen),gh2/b 渲染全屏图,
    本模块再把本地图片追加到 headerBgContainer。
  • 注入点:Profile#setUserBackgroundInfo / setMineUserBackground、
    pc2.e$a#B、pc2.f#g/s。只改渲染决策输入,不读写 vip / showEntrance。

验证

  • 真机 25102RKBEC(Android 17 / LSPosed 2.2.1 / 网易云 9.6.08):
    UI-16 挂载、强制原生 V4、validType=4 注入、头部全屏背景均通过。
  • 内容卡片保持主题深色,未完全透出;已接受。
  • 关闭 UI-16 / RN 分支恢复:已回归通过(2026-10-23)。关闭后重启网易云,
    日志出现 CloudMusicRNFragment,默认「我的」页恢复、无自定义背景、无崩溃。
  • 单测 41 项、release 构建、签名校验通过。

构建

cloudmusictool-2.1.0.apk,versionCode 7,3,910,458 字节。

SHA-256: 0c4d418862ce2c07f6ca0a2e0b7007be8156c2257bc7a05a17bd584ad494258b

完整说明见仓库 CHANGELOG.md。

Assets

1

2.0.1

Stable

10/20/2026, 2:37:20 PM

云音乐工具箱 2.0.1(versionCode 6),适配网易云音乐 9.6.08。

改进

  • 「可强开实验」为 22 个 key 增加中文名与一句话说明(如 tabMerge → “Tab 合并”,home-headframe → “首页头图”)。
  • 新增分组说明:c 通常为对照组,t/t1~t4 为不同实验组;具体行为由服务端配置决定。
  • 未改变强开/白名单逻辑与默认值。

验证

  • 真机实验页已显示中文标题、说明与分组帮助;无崩溃。
  • 单测、lint、release 构建通过。

完整说明见仓库 CHANGELOG.md 与 docs/phase2/。

Assets

1

2.0.0

Stable

10/20/2026, 2:27:45 PM

云音乐工具箱 2.0.0(versionCode 5),适配网易云音乐 9.6.08。

架构升级

  • Profile / MountSpec / MountResolver:133 个挂载点集中到 Profile9608,支持多候选类名、参数/返回类型校验、DexKit 结构/锚点兜底。
  • 版本门禁:改为 versionCode + ProfileRegistry;未适配版本按 allowUnsupported best-effort,按功能降级。
  • Hook 健康度:expected = attempted;degraded 由 critical 挂载点失败驱动,unavailable 为 installed == 0;状态卡/诊断卡显示一致。
  • check-mounts v2:从 Profile 自动生成检查项,断言 versionCode、类/方法存在、method_kind IS NOT NULL、参数/返回类型精确匹配。

行为等价

  • 9.6.08 冷启动 110 条 registered 与 1.2.0 逐行一致,关键 hit 一致。
  • 133 个挂载点 check-mounts 全 OK;状态卡 104/104、degradedFeatures=0、无 FATAL/ANR。

兼容性

  • 仅承诺 9.6.08。新增版本 = 新增 Profile 分片 + 跑 check-mounts,不承诺任意版本自动兼容。

已知限制

  • UI-04 仍不支持。
  • 部分 UI 类没有可靠的 DexKit 字符串锚点,只能精确类名匹配;类改名需人工补 Profile。
  • 1.2.0 的未自然触发项(AD-09/UI-10/UI-12/UI-13/UI-14)状态不变。
  • Profile 解析失败会回退硬编码,回退路径的 critical 判定依赖 Profile 是否收录该坐标。

完整验收记录见仓库 docs/phase2/2.0.0-VERIFY.md 与 docs/phase2/2.0.0-REVIEW.md。

Assets

1

1.2.0

Stable

10/20/2026, 1:30:51 PM

云音乐工具箱 1.2.0(versionCode 4),适配网易云音乐 9.6.08。

新增

  • 实验页(第 4 个 Tab):只读展示实际命中的 ABTest(key / 分组 / 来源 / 次数),数据由目标进程经 StatusProvider 回写。
  • 白名单强开:22 个 curated 体验 key,单 key 选择 c/t/t1/t2/t3/t4;已探测但未收录的 key 可手动「提升为强开」;黑名单 key 显示「禁止强开」。
  • 一键恢复默认:清空所有强开配置,重启网易云生效。

安全边界

  • 精确白名单 + 黑名单:VIP/付费/版权/音质/试听/订单/地区/青少年/登录/Cookie/鉴权/风控/免流/免广告,以及 boot-、kv-/fh-kv-、wait-task-、cold-start- 等前缀。
  • 强开只改 abtestgroup,不改 status/clientConfig(合成对象除外);启动 AB 只读。
  • :play 进程不写实验观测,避免空快照覆盖主进程数据。
  • 框架未连接时明确提示「配置未保存」,不会静默写本地。

验证

  • 真机观测 200 个实验,source 覆盖 libra / old / startup。
  • minibarMarquee=t4、aosApiHttps=t4 强开日志确认;一键恢复后 forceKeys=0,无崩溃。
  • 32 个单测、lint、release 构建通过。

已知限制

  • tabMerge 在 9.6.08 未被查询,无法用它做 UI 分组变化回归。
  • 合成 config 的 clientConfig 为空 Map,checkExperimentWithParam 走默认值;本期不做参数强开。
  • 黑名单 UI 展示已真机确认,但未逐项点选全部黑名单 key。
  • 仅适配 9.6.08。

完整验证记录见仓库 docs/phase2/1.2.0-VERIFY.md 与 docs/phase2/1.2.0-REVIEW.md。

Assets

1

1.1.0

Stable

10/20/2026, 12:47:26 PM

云音乐工具箱 1.1.0(versionCode 3),适配网易云音乐 9.6.08。

收尾

  • DexKit 兜底真正可用:release 启用 legacy packaging,加载顺序为模块 native 目录 → System.loadLibrary → APK 解压到目标 cacheDir;隐藏自检实测 DexKit selftest located=... elapsed=182ms,AD-01 仍命中。
  • Hook 健康度可见:状态卡显示「本次尝试 104 个挂载点,14 项未命中」,诊断卡逐项展示 installed/expected/hit。
  • UI-02 顶部频道真实删除:数据源过滤 + 适配器索引重映射;真机验证 6→1、6→2、空配置回退 6 项,隐藏频道不可点击/滑动。
  • UI-04 下架:删除空转的抽屉配置入口,文案统一「暂不支持」。

新增功能

AD-09 搜索广告净化、AD-10 冷启动广告预加载裁剪、UI-10 播放页提示治理、UI-11 搜索热词轮播、UI-12 播客/AI DJ 引导、UI-13 小组件/推送引导、UI-14 歌词页推广、UI-15 云村/直播推广、PV-06 剪贴板读取拦截、PV-07 启动任务编排。

默认值:AD/UI 默认开启;UI-15、PV-06、PV-07 默认关闭。

已知限制

  • AD-09、UI-10、UI-12、UI-13、UI-14 已注册但未自然触发;UI-15、PV-07 未开启验证。
  • AD-10 已验证冷启动两个任务命中,AdColdBootEntranceTask.init 未命中。
  • UI-02 频道管理页拖拽/删除未回归;仅适配 9.6.08。
  • 不触碰 VIP/付费/版权/地区、青少年模式、登录/Cookie/风控。

完整验证记录见仓库 docs/phase2/1.1.0-VERIFY-A.md 与 docs/phase2/1.1.0-REVIEW.md。

Assets

1

1.0.0

Stable

10/19/2026, 3:19:15 PM

云音乐工具箱 1.0.0

网易云音乐 9.6.08 的 LSPosed 体验优化模块(libxposed API 102)。

功能

广告拦截(默认开启):开屏广告跳过(判定/数据源/落地页三层)、运营弹窗屏蔽、更新弹窗拦截、首页信息流广告、评论区广告、播放页广告、音频贴片与播客广告、广告上报与外部 App 静默跳转。

界面净化(默认开启):首页模块逐项隐藏(30 项真实 blockCode)、底部导航精简、启动延迟跳过、引导气泡/评分/VIP 弹窗治理、自动播放控制、头像挂件关闭。

隐私(默认关闭):OAID 上报拦截、日志写盘屏蔽、启动任务黑名单、APM 上报抑制、统计上报观测。

验证情况

已在 25102RKBEC(Android 17 / LSPosed 2.2.1 / 网易云音乐 9.6.08)真机验证:全部挂载点零失效,广告/界面/隐私核心链路有命中实测。

已知限制

  • 顶部频道保留、侧栏抽屉精简当前版本暂不支持。
  • 网易云版本升级可能导致挂载点失效。

详见 https://github.com/yigenhuobah/cloudmusictool

Assets

1