静盒 (QuietBox)

一个面向小红书的 LSPosed 模块:去掉广告、收敛弹窗、收紧隐私,让 App 安静下来。

基于 libxposed Modern API 102,纯 Java Hook 实现。

当前版本:0.9.8(versionCode 22)。适配小红书 9.53.0(9530807),静态体检清单 64/64(2026-11-06 实跑)。0.9.8 按 9.53.0 重定位 21 个挂载点(7 SIG / 14 GONE),APK 静态体检 64/64;0.9.7 按 9.52.1 重定位 31 个挂载点(11 SIG / 20 GONE);0.9.6 新增配置逐键容错、config_version 与设置页「恢复默认」;0.9.5 完成失败可见化:全关时仍有诊断/崩溃捕获、安装重试清理失败标记、写回滚保留确认值、字段锚点失败可见、skip 原因列表。0.9.4 新增 EN-04 强制允许保存(默认关,真机验证通过);0.9.3 加入崩溃捕获与导出诊断包;0.9.1 新增 EN-03 实况图去水印(默认关,真机开/关对比验证通过)。0.9.8 已完成 9.53.0 真机冒烟(15 注册 / 3 hit / 0 err),未逐项核对 hook 命中与开关效果。AD-04/AD-05 与 EX-01 离线分支仍未真机验证。只支持 9.53.0,不再支持 9.52.1 及更早版本。

⚠️ 本项目与小红书官方无任何关联,仅供学习、研究和个人设备使用。 使用前请阅读文末的免责声明。

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

更新日志见 CHANGELOG.md。


功能

26 项功能,23 项提供开关(3 项 blocked 不渲染;EX-01 为实验性,未在真实场景实测),每项独立开关。默认值遵循“净化开、敏感关”:广告净化与界面精简默认开启,隐私保护、功能增强、实验功能默认关闭。改动需重启小红书生效(实验页的单项实验约 3 秒生效)。

广告净化(AD)

编号 功能 说明 默认
AD-01 开屏广告跳过 覆盖内嵌 Fragment、独立全屏 Activity、冷启动占位三条路径 开
AD-02 信息流广告过滤 开屏关联广告与服务端下发的普通广告都过滤 开
AD-03 评论广告过滤 隐藏评论区广告组件 开
AD-04 广告外跳拦截 广告落地页不拉起淘宝、京东等外部 App 开
AD-05 搜索广告过滤 搜索结果里不显示广告 开
AD-06 详情页广告条屏蔽 隐藏笔记详情页底部的二跳广告条 开
AD-07 评论带货插入屏蔽 评论区顶部不再插入商品卡 开
AD-08 直播卡过滤 首页信息流按 modelType 过滤直播卡;仅覆盖已验证的首页列表链路,详情连播不覆盖 开
AD-09 带货卡过滤 首页信息流按 modelType 过滤带货卡;仅覆盖已验证的首页列表链路,详情连播不覆盖 开
AD-10 投票卡过滤 首页信息流按 modelType 过滤投票卡;仅覆盖已验证的首页列表链路,详情连播不覆盖 开
AD-11 摇一摇跳转禁用 本版本不可用:广告摇一摇检测在原生引擎侧,Java 层无精确挂载点 关

AD-08/09/10 只挂首页信息流的列表追加、刷新与分页路径(9.53.0 为 hgd.m0#S / hgd.m0#C0 / bgd/s#Sd;9.52.1 为 nfd.m0#S / nfd.m0#C0 / ifd/s#Pd;9.52.0 为 ExploreView#S / ExploreView#C0 / vha/s#Pd),不处理详情页连播;9.51.0 真机曾观察到 modelType=note 与 live_v2 并保留正常笔记,9.53.0 沿用同一链路、尚未真机验证,其他类型原样放行。

界面精简(UI)

编号 功能 说明 默认
UI-01 评分引导弹窗屏蔽 不弹「满意吗 / 去评分」和系统评分 开
UI-02 通知引导弹窗屏蔽 不弹「开启通知」引导;手动开通知不受影响 开
UI-03 满意度调研条屏蔽 详情页不再弹出「对内容满意吗」 开
UI-04 更新弹窗屏蔽 不再弹出版本更新提示 开
UI-05 自动播放 关闭详情页/视频 tab 的自动播放(画质偏好本版本不提供) 开

隐私保护(PV)

编号 功能 说明 默认
PV-01 截图检测关闭 不注册截图监听;手动分享不受影响 关
PV-02 通讯录同步关闭 不上传通讯录,不再有通讯录推荐好友 关
PV-03 复制链接净化 去掉链接里的追踪参数(xsec_token 默认保留,可单独勾选删除) 关
PV-04 埋点抑制 本版本不可用:没有安全的挂载点,强行拦截会影响应用生命周期 关

功能增强(EN)

编号 功能 说明 默认
EN-01 水印策略 保存图片时不带水印 关
EN-02 默认静音 本版本不可用:需求取消,小红书自带自动静音 关
EN-03 实况图去水印 保存实况图(Live Photo)不带水印:静态帧跳过水印绘制,视频走与笔记详情预览同源的本地下载链路(不再请求服务端渲染);会切换实况保存链路,默认关闭 关
EN-04 强制允许保存 对作者关闭保存的笔记强制允许保存;默认关,开启前请自行判断合规风险 关

实验功能(EX)

编号 功能 说明 默认
EX-01 已删除笔记查看 实验性:服务端返回「内容无法展示」错误页时,若同进程里还留有同一 noteId 的上一份详情数据,则继续展示;否则走离线/错误分支,页面可能为空。不伪造内容,未在真实被删笔记场景实测 关
EX-02 AB 测试面板 强开小红书灰度实验。实验页内置 21 个高价值、纯客户端的实验开关(详情页渲染、播放体验、评论键盘等),并展示模块探测到的其他实验 key;未收录项只读,不建议修改。支持把全量 key + 当前探测值导出为 CSV 关

强开的是灰度实验组,不是隐藏福利。部分实验依赖服务端配套数据,可能出现页面空白或崩溃。 请一次只开一项、逐项验证;广告、埋点、直播、服务端调参类实验不提供开关。

PV-03 另有一个子选项「同时删除 xsec_token」,不单独编号,依赖 PV-03 开启。


界面

  • 底栏 4 Tab:设置 / 测试 / 诊断 / 关于,底部导航切换、状态各自保留。
  • 设置 Tab:状态卡 → 异常横幅 → AD/UI/PV/EN/EX 分组 → 恢复默认 → 页脚。
  • 状态卡:只有正在连接框架… / 未激活 / 框架已连接 / 已激活四种状态,副标题显示框架 API、目标版本与 remote prefs 可用性。
  • 异常横幅:仅在目标应用版本未适配,或已启用且 ≥2 个功能明确失效时出现;不新增第五种状态。
  • 测试 Tab:AB 测试面板(EX-02)与全量实验导出。
  • 诊断 Tab:逐功能显示 编号 标题 · registered · hit N · skip 原因,无数据用 —;页首显示刷新时间,页尾提供刷新与复制。
  • 关于 Tab:模块版本、目标应用、源码、四模块互链、免责声明与 MIT 许可证。

设置页不展示逐功能诊断信息,排障细节统一放在诊断 Tab。


环境要求

  • Android 10 及以上
  • 已安装 LSPosed(Zygisk 版,配合 Magisk / KernelSU)
  • 小红书 9.53.0(versionCode 9530807)

其他版本可能只有部分功能生效,甚至完全不生效——模块的 Hook 点依赖具体版本。

安装

  1. 从 Releases 下载 quietbox-x.y.z.apk 并安装。
  2. 打开 LSPosed 管理器,在模块列表里启用「静盒」。
  3. 进入模块的作用域设置,勾选 小红书(com.xingin.xhs)。
  4. 打开「静盒」,确认顶部显示 已激活,且副标题包含 已注入小红书。
  5. 按需调整开关。

常见问题

开关是灰色的? 模块 App 还没绑定到 LSPosed 服务。等一两秒会自动刷新;一直灰着就检查 LSPosed 里模块是否启用、作用域是否勾选。

某项功能没效果? 先看诊断页的逐功能状态,再看 logcat(tag QuietBox):

  • 注册成功会打印 AD-05 registered jl0.f0#o
  • 命中会打印 AD-05 hit search ads removed=3

诊断页显示 skip 或没有注册日志,说明这个版本的挂载点没找到,大概率是小红书升级后内部结构变了。请看「兼容性」。

升级小红书后失效了? 正常现象。模块依赖具体版本的内部结构,升级后需要重新适配。顶部出现「目标应用版本未适配」或「N 项功能未生效」的红色提示时,打开诊断页查看 skip 原因。当前唯一适配版本是 9.53.0,升级小红书后请等待新版本模块,或回退到 9.53.0。

会不会导致封号? 模块不修改账号数据、不拦截网络请求、不上传任何信息。但它确实会 Hook 目标应用进程,理论上存在被检测的可能。是否使用、是否用于主账号,请自行评估并承担风险。

和同类模块冲突吗? 同时使用多个 Hook 同一应用的模块可能互相覆盖。建议只保留一个。

需要给静盒加自启动白名单吗? 不需要。功能开关通过 LSPosed 的 remote preferences 传递。诊断与 AB 探测数据由小红书进程单向写入模块 App 的本地 ContentProvider,只在本机展示,不联网、不上传。


隐私

  • 不申请网络权限,App 本身无法联网。
  • 无统计、无遥测、无崩溃上报、无后台服务。
  • 不读取、不上传任何用户数据。
  • 所有逻辑都在本机目标进程内完成。
  • 诊断数据只写入模块 App 的本地存储(status_report),AB 探测结果只写入 ab_report,均仅用于界面展示。
  • 模块只在 LSPosed 中勾选的应用里生效。

兼容性

项目 状态
小红书 9.53.0(9530807) 已适配:21 个挂载点重定位(7 SIG / 14 GONE),静态体检清单 64/64(2026-11-06);已完成真机冒烟(15 注册 / 3 hit / 0 err),尚未真机逐项确认,请按诊断页核对 registered/hit
小红书 9.52.1(9521801)及更早 不再支持:不阻断运行(fail-open),横幅提示「未适配」,大部分功能可能失效
Android 10 及以上(minSdk 29) 支持;运行记录覆盖 Android 15(模拟器)与 Android 17(0.8.0 核心回归、0.8.1 诊断修复复验),其余版本未逐一验证
LSPosed(API 102) 支持

已知限制

  • AD-05 只过滤搜索结果中 alioth.entities.i 广告实体,品牌广告卡不在覆盖范围。
  • EN-03 开启后实况保存走预览同源视频:宿主后续若改保存链路(如下线 livePhotoVideoPath)可能失效,因此默认关闭。
  • EX-01(已删除笔记查看)与 AD-04(广告外跳拦截)未真机验证,不据此宣称通过。
  • 小红书 9.52.1 不再支持,请升级到 9.53.0(9530807)。

0.8.1 已修复 0.8.0 的「N 项功能未生效」误报;0.9.0 进一步区分 critical skip 并加入会话标识、TTL 与心跳,只有类级主锚点缺失才会触发失败横幅。

相关模块

四个模块使用统一的设计与工程规范,可分别独立安装:

从源码构建

# 依赖缓存放 D 盘(按需修改)
set GRADLE_USER_HOME=D:\gradle-home

gradlew assembleDebug      # 调试包
gradlew assembleRelease    # 正式包,产物名 quietbox-<版本>.apk

release 读取仓库根目录的 keystore.properties 签名(该文件不入库)。缺失或 storeFile 未配置时,release 任务在执行前直接失败,不会回退 debug 签名,也不会产出未签名包。

工具链:Gradle 8.13(wrapper) · AGP 8.13.2 · compileSdk 37 · minSdk 29 · JDK 21(构建);字节码 source/target 仍为 17。 当前单测 256 项,./gradlew :app:testDebugUnitTest 可复跑;lint 0 errors / 23 warnings。 首次构建需要自己提供 local.properties(sdk.dir=<SDK 路径>)。

许可证

MIT License

免责声明

  • 本项目仅供学习、研究和个人设备使用,不得用于商业用途、二次售卖或批量分发。
  • 本项目与小红书及其运营方无任何隶属、授权或合作关系,也未获得其认可。
  • 本项目不包含目标应用的任何代码、资源或商标素材;不修改目标应用安装包;不拦截网络请求;不提供代理、后台服务或常驻进程。
  • 使用本模块可能违反目标应用的用户服务协议。请自行确认使用场景在当地法律和协议下是否合规。
  • Hook 系统或应用行为可能导致应用异常、崩溃、数据丢失或设备不稳定。所有风险由使用者自行承担,作者不对任何直接或间接损失负责。
  • 请从本仓库的 Releases 下载,不要使用来路不明的改包或二次分发包。
  • 本项目不保证任何功能效果,也不承诺持续更新。
  • 如权利人认为本项目侵犯其权益,请通过 Issue 联系,作者会立即停止分发并删除相关内容。
  • 下载后请于 24 小时内删除。如不同意以上任何一条,请不要下载或使用。

Releases

0.9.8

Stable

11/5/2026, 5:14:35 PM

适配

  • 小红书 9.53.0(9530807):按 9.53.0 APK 重新定位 21 个挂载点(7 SIG / 14 GONE),覆盖 AD-01/02/04/05/08、PV-03、EN-01/03、EX-01/02。
  • 锚点表 appVersion/versionCode 更新为 9.53.0 / 9530807;AnchorKeys 的 64 个锚点 key 与 6 个 classes key 不变。
  • VersionGate 支持版本改为 9.53.0(9530807);tools/check-mounts.sh 的版本提示同步。

兼容性

  • 静态体检 64/64(2026-11-06 实跑:methods 64/64、classes 6/6)。
  • 9.52.1(9521801)不再支持:fail-open 运行并显示「未适配」横幅,大部分功能可能失效。

已知限制

  • 本版仅完成静态 dexsql/check-mounts 验证,未在 9.53.0 真机逐项核对 hook 命中与开/关效果;发布前请按诊断页确认 registered/hit。
  • EN-03 需真机确认实况保存仍走 bt9.j#b(同版另有 qh7.a 字段路径,若宿主改走该路径,字段 e/h 会失配)。
  • EN-01 的 11 参入口 index 5/10 语义沿用自 9.52.0 反汇编,9.53.0 仅做静态形状比对。

Assets

4

0.9.7

Stable

11/5/2026, 4:21:33 PM

适配

  • 小红书 9.52.1(9521801):按 9.52.1 APK 重新定位 31 个挂载点(11 SIG / 20 GONE),覆盖 AD-01/02/04/05/06/07/08、UI-01/02/03、PV-03、EN-01/03、EX-01/02。
  • 锚点表 appVersion/versionCode 更新为 9.52.1 / 9521801;AnchorKeys 的 64 个锚点 key 与 6 个 classes key 不变。
  • VersionGate 支持版本改为 9.52.1(9521801);tools/check-mounts.sh 的版本提示同步。

兼容性

  • 静态体检 64/64(2026-11-05,临时镜像仓实跑:methods 64/64、classes 6/6)。
  • 9.52.0(9520807)不再支持:fail-open 运行并显示「未适配」横幅,大部分功能可能失效。

已知限制

  • 本版仅完成静态 dexsql/check-mounts 验证,未在 9.52.1 真机逐项核对 hook 命中与开/关效果;发布前请按诊断页确认 registered/hit。
  • EN-03 需真机确认实况保存仍走 ss9.j#c(同版另有 qh7.a 字段路径,若宿主改走该路径,字段 e/h 会失配)。
  • EN-01 的 11 参入口 index 5/10 语义沿用自 9.52.0 反汇编,9.52.1 仅做静态形状比对。

Assets

4

0.9.6

Stable

11/5/2026, 12:28:17 PM

修复

  • 配置读取逐键容错:单个开关值损坏只回退该 key,不再把整组配置丢回默认值。
  • 新增 config_version:开关写入与恢复默认在同一次 commit 写入版本 1;读到更高版本只 WARN。
  • 设置页新增「恢复默认」:写入全部默认值、移除 X-Sec-Token/AB 覆盖辅助键,并同步清理本地 AB 镜像;回读校验失败会明确提示。
  • 锚点表校验 schemaVersion:版本不是 1 时整表 fail-open 并 WARN。

构建

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

已知限制

  • 小红书 9.52.1(9521801)尚未适配:2026-11-05 静态体检 33/64(11 SIG / 20 GONE)。当前只声明支持 9.52.0,其他版本 fail-open 并在界面提示。

Assets

4

0.9.4

Stable

11/1/2026, 12:06:59 PM

新增

  • EN-04 强制允许保存(默认关闭):解除「作者关闭下载」限制。两道门同时处理:MediaSaveConfig#b()(旧门,长按/反馈面板)与 FunctionSwitch#a()(新门,分享面板权限数组,仅对 image_download/video_download 放行)。设置页注明合规提示,请尊重创作者意愿。

Assets

4

0.9.3

Stable

11/1/2026, 9:56:06 AM

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

新增

  • 崩溃自动捕获 + 导出诊断包:诊断页展示最近 3 条宿主内崩溃,新增分享按钮一键导出诊断文本(报障无需 adb)。

修复

  • 24 处主锚点 findClass 标注 critical:主锚点类缺失会计入失败横幅,不再只记 skip(有兜底/探针的 8 处保持可选)。
  • ScreenShotHooks.bindOuter 改回原子占位,消除双线程重复 install 的竞态窗口。

说明

  • 会话语义统一为「同会话兼容 + 身份比较」(删除 isStaleSession,旧版本无 session 回传不再整批丢弃);常量统一 MAX_FUTURE_SKEW_MS。

Assets

4

0.9.2

Stable

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

四模块深度审查修复轮(130 项发现,本模块 27 项中 25 项修复、2 项经复核豁免)。全量明细见仓库 CHANGELOG 对应条目与提交记录。

修复

  • 会话协议:session 改为身份比较(带进程随机后缀),时钟回拨不再整批丢弃回传;未来时间戳超过 5 分钟判过期。
  • 诊断口径:水印关键锚点缺失计入 skip,安装异常上报 critical;findClass 缺类默认降级为可选、主锚点逐点标注(进行中,见报告)。
  • AB 实验:coerce 类型校验、provider 拉取失败不再用启动快照覆盖运行期改动、面板导出转义。
  • 设置页:refresh 不再污染「最近确认落盘值」,保存失败回滚不再覆盖更新的修改;子选项依赖交回 android:dependency。
  • 其余:剪贴板净化保留 htmlText、服务断开即时刷新、死代码与测试质量清理。

Assets

4

0.9.1

Stable

10/31/2026, 1:49:08 PM

新增 EN-03 实况图(Live Photo)保存去水印(Issue #3 承诺项),已真机验证。默认关闭:开启后会切换实况保存链路。

新增

  • EN-03「实况图去水印」,默认关闭,需在设置页手动开启:
    • p32.h#a(1) → false(ConfigCenter android_feature_close_switch_by_code,dexsql
      反汇编确认 zm7.j#c 内 const 1 传入):实况视频强制走旧链路 g42.e#d(url, Z),
      直接下载与笔记详情预览同源的 dg7.h.g(livePhotoVideoPath),不再请求
      POST /api/sns/v1/note/live_photo/save 服务端渲染视频(可能带烧录水印);
    • dg7.h(FeedbackDownloadImage)的 e/h(disableWaterMark / disableAiWaterMark)
      在 zm7.j#c before 反射置 true:静态帧复用 EN-01 的 Canvas 跳绘路径
      (jn6.i → jn6.j#a),同时绕过 jn6.i 的 fail(-4) 守卫;
    • 挂载点选择 p32.h#a 而不是 hook 新链路响应类 zp8.a#d() 换 URL:后者与 dg7.h
      无引用关系、需跨 hook 传状态、时序脆弱;前者是链路分叉的唯一判定点,无状态。
      其余 code 一律 proceed 原值,不影响其他功能的关闭开关判断。
  • tools/check-mounts.sh MOUNTS 清单 58 → 62 项:新增 zm7.j#c(3 参)、p32.h#a(1 参)
    两个功能挂载点,补 dg7.h#<init>(8 参,锁定 e/f/g/h 字段形状) 与 g42.e#d(2 参)
    两个链路形状锚点;对小红书 9.52.0 体检 62/62 OK,GONE/SIG=0。
  • 新增 LivePhotoWatermarkHooksTest(8 项);FeatureTest 同步 24 → 25、
    ReportProtocolTest 键数 72 → 75。

验证

  • testDebugUnitTest 116 项全部通过(0 失败 / 0 跳过);lintDebug 0 errors /
    23 warnings(均为既有 warning);tools/verify-apk.sh 17 项全部通过。
  • 真机 25102RKBEC / 小红书 9.52.0:同一条实况笔记开/关对比——EN-03 开 → 3/3 段内嵌
    视频无水印,关 → 3/3 段有「小红书」logo + 小红书号水印;静态帧两组均无水印
    (EN-01 覆盖);批量保存 11 张 JPG 全部含 MotionPhoto 元数据;无崩溃、无 -4 失败、
    无 FATAL/ANR;日志证实 p32.h#a(1)→false 与 dg7.h.e/h set=2 均命中,
    zm7.j#c 在 9.52.0 实况保存路径真实执行。

已知限制

  • 开启后实况保存走预览同源视频:宿主后续若改保存链路(如下线 livePhotoVideoPath),
    本功能可能失效或回退到带水印的新链路。
  • p32.h#a(1) 强制 false 会作用于该 code 的所有读点(当前无全量 xref 手段),
    真机验证未观察到其他功能受影响。
    APK: quietbox-0.9.1.apk
    versionCode: 15
    大小: 2,909,422 字节
    SHA-256: 2978745940c78097e8ad273f0f50a7d518613d1b443474bb79b9a84aefe4a9c6

Assets

4

0.9.0

Stable

10/29/2026, 2:29:00 PM

适配小红书 9.52.0(9520807)。master 只支持 9.52.0,不再支持 9.51.0:旧版本仍会 fail-open 运行并提示「未适配」,但挂载点未按旧版维护,大部分功能可能失效。

适配

  • 小红书 9.52.0 全量适配:按 9.52.0 APK 用 DexSQL 结构比对(方法体/签名形状一致)重定位 17 个 GONE/SIG 挂载点(14 个唯一锚点,信息流三项在 AD-02 与 AD-08/09/10 两处登记):
    • 信息流:l8d/m0#Q/#A0/#e0 → ExploreView#S/#C0/#g0;g8d/s#Yd → vha/s#Pd
    • 外跳汇聚:k1e/i0#b → XYWebViewUtil#b
    • 剪贴板:u0b/e#b → jv8/e#b;复制链接收口 o92/q#a → redutils/q#a
    • 水印:ce8/j#a → jn6/j#a;ce8/i#i → jn6/i#i(旧 ce8 类名被 R8 复用给无关 lambda)
    • 搜索广告:hl0/f0#o → pc0/c0#o
    • EX-01:sr9/o#invoke → yr7/o#invoke
    • AB:tq/h#f/#b → XYExperimentImpl#f/#b;mb6/o#l → XYConfigCenterImpl#l
  • VersionGate 适配版本改为 9.52.0 / 9520807;tools/check-mounts.sh 的 MOUNTS 表与版本提示同步到 9.52.0,58 项全部补上参数个数(签名形状)校验。
  • EX-01 取值改为 NoteFeed 字段优先(modelType/id),旧混淆 getter c1/u0 仅作兜底:9.52.0 中这两个 getter 的返回类型已被 R8 改掉。

修复

  • EX-01 使用 PASSTHROUGH 异常模式:hook 内抛出 IOException 时原样传给宿主调用方,让 RxJava 走 onError 的离线/错误分支;其余 hook 仍保持 PROTECTIVE。
  • 旧会话诊断残留:HookState.enable 现在创建空 State,已启用但安装阶段完全没有 touch 的功能也会回传空 reg/skip,清掉上一会话的旧 skip;水印挂载点全部缺失时改用 markNotFound 记录。
  • 诊断回传区分 critical skip:只有类级主锚点缺失才计入失败横幅,方法级 skip 只用于诊断展示,避免可选方法改名就把整个功能判死。
  • 回传增加 meta.session 会话标识与 meta.updated_at 落盘时间:新会话首次写入前清空上一会话的 reg/hit/skip/crit,迟到的旧会话整批丢弃,不能覆盖新会话。
  • 回传增加 10 分钟 TTL:超时未更新按「未知」处理,失败计数归零;内容无变化时每 60 秒发一次心跳刷新 meta.updated_at,避免正常会话被误判过期。
  • provider 调用改为有界单线程池 + 2 秒超时(超时取消),模块 App 卡死时不会永久阻塞诊断线程;失败仍按 60 秒退避。
  • PV-03 只净化小红书链接:仅 xiaohongshu.com / xhslink.com / xhslink.cn / xhs.cn 及其子域,或 label 为 ug-share-copy-link 的复制生效;未知 host 与非 http(s) 文本原样放行,避免用户复制外部链接时误删 sid 等通用参数。
  • PV-03 参数名解码改用 JDK URLDecoder,不再依赖 android.net.Uri#decode(JVM 单测里是 stub)。

变更

  • Phase 3 配置写入:ConfigStore / AbConfigStore 的 commit() 统一排到后台单线程(ConfigWrites),主线程不再做磁盘/binder I/O;remote prefs 不可用时直接拒绝,不再回退本地冒充成功。
  • 写入结果以真实 commit() 为准:设置页与 AB 面板先乐观显示,失败回调回滚 UI 并 Toast;每个 key 用写入序号防止旧回调覆盖新状态;store 在同一 service 实例内复用,换绑后重建。
  • 设置页后台 I/O:状态卡读取、failedFeatureCount 统计与 AB 全量导出均移出主线程,结果回主线程并校验序号/目标版本,避免旋转或重复刷新时旧结果覆盖新界面。
  • tools/check-mounts.sh 缓存指纹改为 APK 路径 + 大小 + mtime + SHA-256:同路径替换 APK 或旧版只有路径的 META 都会自动重建缓存。
  • 修正 CHANGELOG 中 0.8.1 的 APK SHA-256 记录。

验证

  • ./gradlew :app:testDebugUnitTest :app:lintDebug :app:assembleRelease --no-daemon 通过:单测 108 项全部通过(0 失败 / 0 跳过);lint 0 errors / 23 warnings(均为既有 warning)。
  • tools/verify-apk.sh 17 项全部通过:versionCode=14、versionName=0.9.0、签名证书与 APK SHA-256。
  • tools/check-mounts.sh 对小红书 9.52.0 体检:58/58 OK,GONE/SIG=0。
  • 本版本尚未真机验证,所有 hook 需按 docs/DEVELOPMENT.md 逐项回归;EX-01 与 AD-04 本轮未在真机覆盖。

已知限制

  • AD-05 只过滤搜索结果中 alioth.entities.i 广告实体,品牌广告卡不在覆盖范围。
  • EX-01 真实被删笔记场景、AD-04 广告外跳未真机验证,不据此宣称通过。
  • 小红书 9.51.0 不再支持,请升级到 9.52.0(9520807)。
    APK: quietbox-0.9.0.apk
    versionCode: 14
    大小: 2,907,238 字节
    SHA-256: c780fb14e00654db5bb4cfa162e069274302be76e4484646c15d0dd2dc74452d

Assets

4

0.8.1

Stable

10/27/2026, 5:18:20 PM

修复旧会话诊断数据残留导致「N 项功能未生效」误报。

修复

  • 诊断回传:Report.snapshot 对本次会话触碰到的每个 Feature 总是发送 reg 与 skip,缺失时发送空串。StatusProvider 对 reg/skip 以最新值覆盖,空串会清掉上一次目标进程会话遗留的旧 skip;hit 仍只在 >0 时发送并取历史最大值,不会被清空。
  • 根因:0.8.0 只在值非空时发送 reg/skip。目标应用重启后,本次没有 skip 的功能不会覆盖旧值,旧会话的 9 条 skip 永久留在 status_report,被 failedFeatureCount 持续计入,主页面一直显示「9 项功能未生效」。
  • 失败判定抽到 ReportProtocol.featureFailed,行为不变:已启用、有回传且(reg 为空或 skip 非空)才计入失败;无回传不计入。

验证(自动化、静态与真机,2026-10-28)

  • testDebugUnitTest 54 项全部通过(0 失败 / 0 跳过);新增空串覆盖旧 skip、横幅计数归零、旧 hit 保留、Report.snapshot 键完整性等 5 项用例。
  • lintDebug 通过:0 errors / 23 warnings(均为既有 warning)。
  • assembleDebug / assembleRelease 通过。
  • tools/verify-apk.sh 17 项全部通过:versionCode=13、versionName=0.8.1、签名证书与 APK SHA-256。
  • tools/check-mounts.sh --dexsql E:/tools/dexsql/dexsql.exe 对小红书 9.51.0 体检 58/58 OK,GONE/SIG=0。
  • 真机 25102RKBEC / Android 17 / 小红书 9.51.0:0.8.0 覆盖升级到 0.8.1(versionCode 13)后,冷启动两次均无 FATAL/ANR;旧 9 条 skip 被本次空串覆盖,主页面「9 项功能未生效」横幅消失,诊断页 skip —;mount report sent=true ok=21 miss=0 bad=0。核心 P0 沿用 0.8.0 已验证结果。

已知未覆盖

  • AD-03/04/06/07、UI-0105、PV-0103、EX-01/02 未触发或未覆盖;AD-09/AD-10 具体带货/投票卡未出现,仅验证 seen 链路;EX-01 真实被删笔记场景未实测;旋转与 1.3 字体未验证。
  • 诊断页仍会显示本次会话真实存在的 skip(锚点缺失属于正常信息),横幅只统计本次会话回传。
    APK: quietbox-0.8.1.apk
    versionCode: 13
    大小: 2,900,042 字节
    SHA-256: 6b763eeddc75074872392b3f9b9c14df44f0dee1efb347812f6f9f71ea550dfa

Assets

4

10/23/2026, 8:15:30 PM

适配小红书 9.51.0;界面改为底栏 4 Tab;修复保存图片水印入口参数不生效的问题。

新增

  • 底栏 4 Tab:设置 / 测试 / 诊断 / 关于;原二级页改为平级 Tab,AB 面板并入测试 Tab。
  • tools/release.sh、tools/verify-apk.sh、tools/preflight.sh 发布与校验脚本;CI 流水线。
  • tools/check-mounts.sh 挂载点体检:锚点表新增可选第 5 列参数个数校验(方法还在但签名形状变了判 SIG)。
  • 新增测试:prefs/Feature 一致性(PrefsFeatureConsistencyTest)、hook 注册表(HookRegistryTest)、水印入口参数(WatermarkHooksTest)等,单测 28 → 49 项;接入 JaCoCo 覆盖率报告(不设阈值)。

变更

  • 适配小红书 9.51.0:15 个锚点重定位(旧编号 P0-2 信息流、P1-7 外跳、P1-9 复制链接/剪贴板、P1-11 水印、P1-13 搜索广告、P1-15 已删笔记、P1-21/22/23 卡片过滤、P2-1 ConfigCenter);旧版本 fail-open 并提示。
  • 水印入口修复:9.51.0 保存入口为 11 参 ce8.i#i(布尔位 index 5/8/9/10),此前按 >=12 判断且写 index 11,改参永不生效;dexsql 反汇编确认 index 5 = disableWaterMark、index 10 = disableAiWaterMark,其余布尔位与水印无关不设。改参逻辑抽为 applyWatermarkFlags 纯静态方法并有单测。
  • release 签名配置:signingConfigs.release 改为条件引用,无 keystore 的 CI 也能跑配置期与 test/lint;release 任务图仍硬失败,不产出 debug 签名或未签名包。
  • 构建基线:appcompat 1.8.0、material 1.14.0,JDK 21 构建(字节码仍 Java 17)。

验证

  • bash tools/preflight.sh、./gradlew :app:assembleRelease、bash tools/verify-apk.sh app/build/outputs/apk/release/quietbox-0.8.0.apk 通过。
  • 单测 49 项通过。
  • 无 keystore 环境::app:help、:app:testDebugUnitTest :app:lintDebug 通过,:app:assembleRelease 以「release 构建必须使用正式签名」失败。
    APK: quietbox-0.8.0.apk
    versionCode: 12

Assets

1

10/22/2026, 5:12:14 PM

静盒 0.7.0

统一界面、诊断与功能编号。适用于小红书 9.50.0(9500803)。

新增

  • 单页设置 + 二级页导航:去掉 2 Tab 底栏,实验、诊断、关于改为二级页;二级页显示返回箭头,返回后保留主页面滚动位置。
  • 诊断页:逐功能显示 编号 标题 · registered · hit N · skip 原因,无数据用 —;页首显示刷新时间,页尾提供刷新与复制。
  • 关于页:模块版本、目标应用、源码、四模块互链(当前模块标注)、免责声明与 MIT 许可证。
  • 诊断回传通道:HookState + hooks/Report + StatusProvider,主进程回传、UID 校验、键白名单、value 上限 256、hit 取历史最大值。
  • 异常横幅:版本不匹配,或已启用且 ≥2 个功能明确失效时显示;删除 MISS_THRESHOLD=5。
  • JUnit 4.13.2 单测:FeatureTest、ConfigTest、ReportProtocolTest、HookStateTest。

变更

  • 24 项功能统一编号 AD/UI/PV/EN/EX:AD-0111、UI-0105、PV-0104、EN-0102、EX-01~02;remote key、AB key、applicationId、namespace 不变。
  • 默认值从全关改为“净化开、敏感关”:15 项 AD/UI 默认开,PV/EN/EX 与 3 项 blocked 默认关;仅影响新安装。
  • 设置页按 AD → UI → PV → EN → EX 重新分组;状态卡四态 + detail 行。
  • 用户可见文案统一进 strings.xml,统一无人称。
  • 构建基线:AGP 8.13.2、compileSdk 37、minSdk 29、targetSdk 36、Gradle 8.13、Java 17。

验证

  • 28 个单测通过;debug/release 构建、lint 通过。
  • 真机 25102RKBEC(Android 17 / LSPosed 2.2.1 / 小红书 9.50.0):21 个功能、0 miss / 0 bad;诊断页收到 AD-01 hit 2、AD-02 hit 1 等数据;单页 + 二级页、状态卡四态、关于页四模块互链、AB 面板均正常;无 FATAL/ANR。
  • 默认值只影响新安装;本次设备保留已保存配置,未覆盖。

安装包

quietbox-0.7.0.apk,versionCode 11,2,546,156 字节。

SHA-256: f2b0e9c9be167f2675d1633b0fa2aa81c68587ef3528ccd272fae64e0b588e14

Assets

1

10/22/2026, 4:28:28 PM

静盒 0.6.1

修复

  • 复制链接净化:改用原始编码 query 处理,修复含 %XX(如 xsec_token)的
    链接静默不净化;参数全部删除时一并去掉 ?。
  • 通讯录同步:补挂 3 参 requestContactsSync 重载,避免部分同步路径漏拦。
  • 内容评价:补挂公开入口 showContentRatingSnackBarIfNeeded,防止私有方法
    被内联后失效。
  • 开屏:不再跳过 startAnim,避免开屏 fragment 卡住。
  • 广告外跳:放行 xhsdiscover:// 等站内 scheme,避免误伤站内深链。
  • 信息流卡片:modelType 大小写归一;已知类型不匹配时不再用字段兜底,
    避免误删正常笔记。
  • 挂载统计:静默定位失败也会计 miss;统计改为按「功能」去重,横幅仅在
    ≥2 个功能失效时显示;推送改到后台线程且失败可重试。
  • AB 面板:修复 refresh() 只遍历顶层导致状态/摘要不刷新;总开关改值即时
    生效;provider 拉取加 2 秒超时;观测值变化会重发。

加固

  • 挂载自检按功能去重:≥2 个功能有挂载点失效才显示横幅。
  • AB 数据通道增加调用方校验,只接受本应用与小红书。
  • 复制链接日志不再输出剪贴板正文。

说明

  • 适用于小红书 9.50.0(9500803)。
  • 修改功能开关后需重启小红书生效;AB 面板单项实验约 3 秒生效。
  • 升级小红书后若出现「N/M 个功能有挂载点失效」横幅,说明版本不兼容,
    请回退或等待适配。

验证

真机 25102RKBEC(Android 17 / LSPosed 2.2.1 / 小红书 9.50.0):

  • 67 个 hook、21 个功能,0 miss / 0 bad;mount report sent=true。
  • AB 面板可打开,总开关开启,精选实验显示「已强制为 true」。
  • 复制链接:短链 https://xhslink.cn/o/... 原样保留(无追踪参数,符合预期)。
  • 冷启动:无卡层,进入主界面,无 FATAL/ANR。
  • 直播/带货/投票卡:hook 已注册;当前信息流未出现匹配卡片,未产生 hit。
  • P1-15~P1-23:hook 已注册;本次使用未自然触发。

安装包

quietbox-0.6.1.apk,versionCode 10,2,575,008 字节。

SHA-256: f9fa835fbe8cd8c5eb749284e0e5d42d0bf6534daf2a44f877cb7ab971fc1f2c

Assets

1

10/19/2026, 3:24:01 PM

静盒 0.6.0

新增

8 项功能,全部独立开关、默认关闭:

  • 评分引导弹窗屏蔽(P1-16):不弹应用内「满意吗 / 去评分」,
    也不弹 Google Play 系统评分。两个入口都拦。
  • 通知引导弹窗屏蔽(P1-17):不弹「开启通知」引导。只拦展示,
    你在系统里手动开通知不受影响。
  • 满意度调研条屏蔽(P1-18):详情页底部不再弹出「对当前的内容满意吗?」。
  • 通讯录同步关闭(P1-19):不上传通讯录,因此也不会有通讯录推荐好友。
  • 评论区带货插入屏蔽(P1-20):评论区顶部不再插入商品卡/带货弹层。
    副作用:评论里「提及商品」的插入也会一起失效。
  • 直播卡 / 带货卡 / 投票卡过滤(P1-21/22/23):信息流里不显示这三类卡片。
    复用信息流广告过滤已验证的列表链路,只移除卡片、不动分页游标。

版本不兼容警示:小红书升级后挂载点可能大面积失效,而界面看不出来。
现在挂载统计会在小红书启动时上报,失效 ≥5 个时静盒顶部显示红色提示。
计数健康时不显示,平时界面仍是零诊断内容。

修复

  • 「首页视频预加载」强开不生效(v0.5.0 已知问题):该读点是整数型,
    之前误喂 "true",解析失败被吞掉导致开关永远是空转。已改为 "1"。
  • 「个人页布局预加载」只点亮一半:该实验有两个读取点,阈值分别是 >0 和 >1,
    强开值从 "1" 改为 "2" 才能同时生效。
  • 状态卡文案:未激活时提示「请在 LSPosed 中启用本模块并勾选小红书」,
    此前错误地显示为作用域未勾选。

加固

  • 每条精选实验现在带声明式的类型标注(BOOL / INT),由 9.50.0 反汇编三重证据
    (TypeToken 泛型注解 + 默认值字面量 + 返回值 check-cast)逐条判定,
    不再靠 key 名猜类型。
  • 强制值按声明类型规整:类型不匹配时自动改写;解析失败一律回落到原值并打
    告警日志,不再静默失效。读取值为 null(key 尚未下发)时也能正确强开。
  • 「其他」列表里手填的未收录 key 按值的字面形状推断类型。

说明

  • 新增功能全部默认关闭,请逐项开启验证。直播/带货/投票卡过滤的卡片判定
    优先用 NoteItemBean.modelType,字段非空作兜底;若某个版本卡片类型
    映射变了,可能漏过滤,届时反馈即可。
  • 通讯录同步关闭会让小红书不再推送「可能认识的人」;若你需要这个功能,
    不要开 P1-19。
  • 版本不兼容警示的阈值是 5 个失效挂载点。单个功能失效不会触发提示,
    请以 logcat(tag QuietBox)为准。

安装包

Assets

1

0.5.0

Stable

10/18/2026, 4:31:26 PM

静盒 0.5.0

新增

  • 精选实验从 19 项扩到 21 项:
    • P3 图片预加载(andr_note_detail_preload_p3_image_request):
      详情页 P3 色域图片提前请求,打开图片笔记更快。
    • 解除 2K/4K 码流过滤(andr_player_intelligent_rep_select_disable_filter_2k_4k):
      允许播放器选择 2K/4K 清晰度;高分辨率屏幕、网络好时再开。
  • 「测试」页新增导出全量实验:生成 CSV(全量 5,760 个 key + 当前探测值),
    通过系统文件选择器保存到本地,不需要存储权限。
    CSV 字段:key, current_value, status, primary_category, recommendation,
    curated, force_value, curated_title。

修复

  • 「字幕新样式」的 AB key 修正为 caption_new_style_v3
    (v0.4.0 误写成 andr_caption_new_style_v3,导致该开关无效)。

说明

  • 全量导出包含 9.50.0 APK 的 5,760 个 AB key;本次没读到的 key 也会出现,
    current_value 为空、status 为「未读取」。
  • 导出不包含代码读取点(reader class/method),以保持模块体积和公开数据克制;
    需要完整字段可以用 PC 端的导出脚本。
  • 新增的 2 项都是默认关闭/0 的实验,强开才会改变行为;2K/4K 码流过滤在
    网络差或屏幕不支持时可能造成卡顿,建议逐项验证。

安装包

  • quietbox-0.5.0.apk,2,555,756 字节
  • SHA-256:f418b3e025bae58d9910c2ff2146b7d7b311d0e43ec14175d1fdd2a8450647fd

Assets

1

0.4.0

Stable

10/18/2026, 3:47:06 PM

静盒 0.4.0

新增「测试」底栏:AB 实验开关面板。

新增

  • 底栏改为「功能 / 测试」两栏。
  • 「测试」页内置 19 个高价值、纯客户端的 AB 实验开关:
    • 详情页与信息流(8 项):正文排版优化、详情页滚动优化、图片详情布局缓存、正文预解析、互动栏首帧优化、异步预计算文本、详情页布局预加载、个人页布局预取。
    • 播放体验(7 项):进度条自动隐藏、播放位置记忆、切后台继续播放、边缘手势排除、播放震动反馈、视频轻量 UI、字幕新样式。
    • 其他推荐(4 项):评论键盘优化、首页视频预加载、搜索页深色修复、首页红点优化。
  • 最底部「其他(探测到,未收录)」:展示模块在宿主进程读到的其他 AB key 与当前值,只读;广告/埋点/直播/服务端调参类标记「不推荐修改」。50 条一批,滚到底自动加载,底部保留「加载更多」兜底。
  • 探测数据由小红书进程单向写入模块 App 的本地 ContentProvider,只在本机展示,不联网、不上传。

使用说明

  1. 打开「测试」页,启用面板总开关。
  2. 重启小红书(首次启用需重启才会安装 hook)。
  3. 逐项打开实验开关;改单个开关后回到小红书约 3 秒生效。
  4. 出问题关闭对应开关即可。

注意

  • 强开的是灰度实验组,不是隐藏福利。部分实验依赖服务端配套数据,可能出现页面空白、字段缺失或崩溃,请一次只开一项、逐项验证。
  • 广告、埋点、直播、服务端调参类实验不提供开关。
  • 部分 key 只在特定笔记类型/路径下才会被读取;未读取时 UI 显示「尚未读取」。

兼容性

  • 小红书 9.50.0(9500803)
  • Android 10+ / LSPosed(libxposed API 102)

安装包

  • quietbox-0.4.0.apk,2,466,377 字节
  • SHA-256:fe5987978c64c35f922f8f6af45508eb909cd2ffb6c00f0a678754e687d4390e

Assets

1

0.3.0

Stable

10/18/2026, 12:25:39 PM

0.3.0

新增「已删除笔记查看」:笔记被删除后,仍用本地已缓存的内容展示,无缓存时不伪造内容。

  • 设置页新增「内容与浏览」分组
  • 适用小红书 9.50.0(9500803)
SHA-256: 7664a5bb83ce7c9864c0abc4bc3dff8c5650deac7221faefad8b6db80ee5ae47

源码仓库:https://github.com/yigenhuobah/quietbox

Assets

1

0.2.2

Stable

10/17/2026, 3:00:19 PM

首个使用正式证书签名的版本。

  • 使用自备 keystore 签名
  • 关闭 autoHotReload(模块未实现 onHotReloading)
  • 适配小红书 9.50.0 (9500803)

SHA-256: 50b771427ac9169bc0096e5dead587729799d139a1fa65705df8e5edeabbc76c

Assets

1