FuseHide

FuseHide 是一个面向 Android 12+ 的 LSPosed 模块与 MediaProvider/FUSE 调试工具。

模块会在 MediaProvider 进程中加载 libfusehide.so,并在 libfuse_jni.so 加载后安装 native hook。当前实现同时覆盖两类问题:

  • /storage/emulated/0 下普通路径的运行时隐藏
  • Android/dataAndroid/obb 相关 Unicode 场景的调试与修复

模块简介

FuseHide 提供运行时可配置的隐藏策略,用于对指定应用隐藏 /storage/emulated/0 下的目标路径,并提供与 MediaProvider 注入进程联动的调试能力。

主要功能包括:

  • 对指定包名对应的 UID 生效
  • 支持隐藏一级目录名,例如 xinhaoMT2
  • 支持隐藏相对路径,例如 Download/private
  • 支持“隐藏所有一级目录”模式,并允许配置例外项
  • 支持在应用侧编辑配置,并热同步到已注入的 MediaProvider 进程
  • 支持读取当前注入进程中的 native 配置快照
  • 支持对目标路径执行 stataccesslistopenmkdirrename 等检测

作用域

推荐作用域:

  • com.android.providers.media.module
  • com.google.android.providers.media.module

工作方式

模块入口由 assets/xposed_init 指向 io.github.xiaotong6666.fusehide.Entry

命中 MediaProvider 作用域后,模块会在目标进程中加载 libfusehide.so。native 层在检测到 libfuse_jni.so 被加载后执行 hook 安装。Java 层与注入进程通过广播、HideConfigProviderHideConfigRequestReceiver 同步状态与隐藏配置。

普通路径隐藏使用 MediaProvider 的 FUSE 处理链路完成,不依赖 fuse-bpf。Android/dataAndroid/obb 使用单独的访问控制路径;模块在该部分保留了特殊路径判断相关 hook,用于修复 Unicode 可忽略码点绕过。

当前默认配置

当前默认值来自 native 层:

  • enableHideAllRootEntries=false
  • hideAllRootEntriesExemptions=[Android]
  • hiddenRootEntryNames=[xinhao, MT2]
  • hiddenRelativePaths=[]
  • hiddenPackages=[com.eltavine.duckdetector, io.github.xiaotong6666.fusehide, io.github.a13e300.fusehide]

使用说明

  1. 安装 APK。
  2. 在 LSPosed 中启用 FuseHide。
  3. 勾选推荐作用域。
  4. 重启 MediaProvider 作用域进程,或直接重启设备。
  5. 打开应用,确认 Hook 状态显示已 Hook。
  6. 在“配置”页面编辑隐藏策略,并使用“应用”按钮同步到注入进程。
  7. 在“检测”页面执行路径检查,验证隐藏结果是否符合预期。

调试信息

应用界面会显示以下系统属性:

  • ro.fuse.bpf.is_running
  • persist.sys.vold_app_data_isolation_enabled
  • external_storage.sdcardfs.enabled

建议反馈问题时附带设备型号、系统版本、MediaProvider 版本、目标路径、目标包名、配置文本和 adb logcat -s FuseHide 输出。

源码与发布

许可证

  • app/src/main/cpp/third_party/xz-embedded/* 保持其上游 0BSD 许可证
  • 本项目其余部分采用 Apache License 2.0

Releases

1.55

Stable

5/21/2026, 7:32:47 AM

同步自 主仓库 构建产物喵

  • Version: 1.55
  • VersionCode: 55
  • Commit: 09b987d
  • Build time: 5m 06s
  • SHA256: ef16edce2bbfc8462e92084350a87c132b7ea81f0fdc50d5cd3b2f7087bac9f9

Message

fix(ui): 移除配置界面 Checkbox 的点击重复震动反馈

- 移除 `ConfigScreen` 中“隐藏所有根目录项”勾选框触发的 `HapticFeedbackConstants.CLOCK_TICK` 重复震动效果

Assets

1

1.54

Stable

5/9/2026, 9:32:25 AM

同步自 主仓库 构建产物喵

  • Version: 1.54
  • VersionCode: 54
  • Commit: ef9a4a1
  • Build time: 2m 04s
  • SHA256: ea8a2aae2dc95597c83786c1f20fa04c2cb9bae8ba70440d094f15d8339c579d

Message

refactor(icon): 重构启动图标资源并为 Android 12+ 适配动态配色资源

Assets

1

1.53

Stable

5/7/2026, 4:18:25 AM

同步自 主仓库 构建产物喵

  • Version: 1.53
  • VersionCode: 53
  • Commit: ee60842
  • Build time: 2m 35s
  • SHA256: 357a365c1fc68e7a9d94ce207a419c503d4196bf94ba48232574005fcc2c294e

Message

refactor(config): 使用 SharedPreferences edit 扩展简化保存逻辑

将 HideConfigStore.save() 改为使用 androidx.core.content.edit,减少显式 edit/apply 链式调用,保持配置保存行为不变。

Assets

1

1.52

Stable

5/7/2026, 3:54:16 AM

同步自 主仓库 构建产物喵

  • Version: 1.52
  • VersionCode: 52
  • Commit: 0c3f501
  • Build time: 2m 27s
  • SHA256: be41cb88488552b62eb9c4dfdafe97d49d94c19104978a289beee35dc4d069a0

Message

feat(config): 支持按包名分段配置隐藏目标

- 在隐藏目标编辑框中支持 [package.name] 分段语法
- 新增 packageRules 配置,并通过 SharedPreferences、Bundle 和 JNI 同步
- native 层按 UID 解析并合并全局规则与包名专属规则
- 调整默认隐藏目标,将设备相关目标收敛到包名专属规则
- 配置热更新后主动失效 entry、inode 与隐藏路径缓存
- 将 lookup、parent path 与 relative path 判断收敛为 UID-specific 规则
- 更新配置快照、差异展示和帮助文案

Assets

1

1.51

Stable

5/7/2026, 2:10:05 AM

同步自 主仓库 构建产物喵

  • Version: 1.51
  • VersionCode: 51
  • Commit: bb4eeb7
  • Build time: 2m 39s
  • SHA256: dea1165dd0a5129592228ef0d1a97dbdce5262ed07a2c708bfc8625ff8abfcec

Message

refactor: 按职责拆分源码包与 native 目录结构

- 将 Android 端代码拆分为 config、debug、status、ui、xposed 等包
- 将 native 层代码拆分为 core、policy、filters、hooks、elf、jni 等目录
- 更新 Manifest、xposed_init、JNI 符号和 CMake 源文件路径
- 保持现有配置、调试、Hook 与过滤逻辑不变

Assets

1

1.50

Stable

5/7/2026, 1:46:33 AM

同步自 主仓库 构建产物喵

  • Version: 1.50
  • VersionCode: 50
  • Commit: 4a11445
  • Build time: 2m 37s
  • SHA256: 8eebdfe5c4dbb578b8ac3e2300b4ace2a29e9371e88fe501b55c30216d49a0ca

Message

refactor(native): 收口隐藏过滤模块接口

将路径策略、目录项过滤和 reply buffer 过滤入口从 state.hpp 中拆出,改为通过专用头文件暴露模块接口,减少 native 层对大总头的依赖并提升过滤逻辑复用性。

主要变更:
- 将 HiddenPathPolicy 迁移到 path_policy.hpp
- 将 DirentFilter、FilteredDirentMatch 和 dirent record helper 迁移到 dirent_filter.hpp
- 将 WrappedReplyBuf 中的目录项过滤改为通过 FilterReplyBufPayload 统一入口处理
- 通过 enableAutoFallback 保持精确过滤、parent path fallback、auto fallback 的原有执行顺序
- 更新 fuse_wrappers.cpp,显式依赖 path_policy、dirent_filter 和 reply_buf_filter 模块
- 移除 runtime_state.cpp 中的旧全局转发函数
- 精简 state.hpp,仅保留运行态状态、基础类型和跨模块共享状态声明
- 删除不再使用的 shared.hpp

Assets

1

1.49

Stable

5/6/2026, 4:32:52 PM

同步自 主仓库 构建产物喵

  • Version: 1.49
  • VersionCode: 49
  • Commit: a1c9d5f
  • Build time: 2m 37s
  • SHA256: 4db57e5abc58ba5da9cac0534e923be614ad774a737209094d5fc19631a50542

Message

refactor: 拆分 native 隐藏过滤逻辑

将 runtime_state.cpp 中的路径策略、目录项过滤和 reply buffer 过滤逻辑拆分到独立模块,降低单文件复杂度并提升 native 层代码可维护性。

主要变更:
- 新增 path_policy.cpp/hpp,承载隐藏路径匹配、根目录隐藏策略和路径拼接逻辑
- 新增 dirent_filter.cpp/hpp,承载 readdir 与 readdirplus 目录项过滤逻辑
- 新增 reply_buf_filter.cpp/hpp,承载 FUSE reply buffer 过滤逻辑
- 精简 runtime_state.cpp,仅保留运行态状态管理相关逻辑
- 更新 CMakeLists.txt,加入拆分后的 native 源文件

Assets

1

1.48

Stable

5/6/2026, 4:13:22 PM

同步自 主仓库 构建产物喵

  • Version: 1.48
  • VersionCode: 48
  • Commit: 15ce8d9
  • Build time: 2m 31s
  • SHA256: c235c0a86e18aff7aba9a5b01937736a035824c777891775587478a6dd90f175

Message

refactor: 将 Compose UI 层迁移到 ui 子包

整理 Compose 相关文件的包结构,将页面、通用组件和 UI 状态模型统一移动到 ui 子包,进一步区分界面层与业务逻辑层职责。

主要变更:
- 将 ConfigScreen、DebugScreen、FuseHideHomeScreen、UiComponents 和 UiModels 移动到 io.github.xiaotong6666.fusehide.ui 包
- 为 UI 文件补充 R 资源类显式导入
- 收敛 UI 页面、组件和状态模型的命名空间,提升项目结构清晰度

Assets

1

1.47

Stable

5/6/2026, 3:13:41 PM

同步自 主仓库 构建产物喵

  • Version: 1.47
  • VersionCode: 47
  • Commit: 69e7afa
  • Build time: 2m 31s
  • SHA256: a571288ecddeef434ec8d43ae8a68f7eb38958c8d0faa584b02987e4caac4e86

Message

refactor: 细化 Compose 界面模块拆分

进一步拆分 FuseHide UI 结构,将首页、配置页、调试页、通用组件和 UI 状态模型分别独立管理,降低单文件复杂度并提升界面层可维护性。

主要变更:
- 将原 FuseHideUi.kt 拆分为 FuseHideHomeScreen.kt、ConfigScreen.kt、DebugScreen.kt 和 UiComponents.kt
- 新增 UiModels.kt,集中定义 HookStatusUiState、ConfigUiState、DebugUiState 及回调数据结构
- MainActivity 改为通过 UI state 和 callbacks 向 Compose 层传递状态与事件
- 优化 HookStatusProbe,改为使用 Context、主线程 Handler 回调,减少对 MainActivity 的直接依赖
- 移除 MainActivity 中的 UI 数据结构定义,进一步收敛 Activity 职责

Assets

1

1.46

Stable

5/6/2026, 2:52:50 PM

同步自 主仓库 构建产物喵

  • Version: 1.46
  • VersionCode: 46
  • Commit: 3a97617
  • Build time: 2m 31s
  • SHA256: eb18a6cfd849e1963116c0e82bb83903d1bf482fcbdde6367e3f7d7f9bb4aded

Message

refactor: 拆分 MainActivity 相关职责

将 MainActivity 中的 Compose 界面、配置状态处理、Hook 状态探测和路径调试操作拆分到独立文件,降低 Activity 复杂度并提升代码可维护性。

主要变更:
- 新增 FuseHideUi.kt,承载首页、配置页、调试页及通用 Compose 组件
- 新增 ConfigState.kt,封装配置解析、已应用配置快照和差异计算逻辑
- 新增 HookStatusProbe.kt,封装 Hook 状态广播探测逻辑
- 新增 PathDebugActions.kt,封装路径调试操作
- 精简 MainActivity,仅保留状态管理、生命周期、事件分发和业务入口

Assets

1

1.45

Stable

5/6/2026, 1:29:29 PM

同步自 主仓库 构建产物喵

  • Version: 1.45
  • VersionCode: 45
  • Commit: 5ff951f
  • Build time: 2m 10s
  • SHA256: 8ab5acd24a4de320a7b3735647384c821eb1a0f24f0f101b782f7029e61254d3

Message

ci: 拆分 Android 构建与发布工作流

将原有 android.yml 中的构建、GitHub Release 发布和 Xposed 社区仓库同步逻辑拆分为可复用工作流,提升 CI 配置的可维护性与复用性。

- 新增 build.yml,负责 APK 构建、版本信息计算、产物重命名、SHA256 计算与 artifact 上传
- 新增 release.yml,负责下载构建产物、生成 Release Note 并发布 GitHub Release
- 新增 xposed-release.yml,负责同步 release APK 到 Xposed 社区仓库
- android.yml 改为编排 build、release、xposed-release 三个 job
- 增加 workflow concurrency,避免同一分支重复运行旧任务
- Release Note 中补充版本号、构建耗时、提交信息和 SHA256 校验值

Assets

1

1.44

Stable

5/6/2026, 1:18:32 PM

同步自主仓库构建产物喵

commit: a5d7013

message:
fix(native): 避免隐藏所有一级目录时误过滤例外目录子项

在 reply_buf 缺少父目录上下文的兜底过滤中,仅保留显式隐藏目录名匹配,不再应用 hide-all 通配规则。
避免一级目录可见,但其子目录被误当作根目录项过滤

Assets

1

1.43

Stable

4/27/2026, 5:41:32 AM

同步自主仓库构建产物喵

commit: dd5848a

message:
fix(manifest): 移除重复的 extractNativeLibs 配置

Assets

1

1.42

Stable

4/26/2026, 7:01:46 PM

同步自主仓库构建产物喵

commit: fbf12b7

message:
ci(release): 完善社区仓库同步发布说明

  • 为社区仓库 release 生成包含 commit 链接和提交信息的 notes
  • 区分已有 release 与新建 release,分别执行 edit/create
  • 提取目标仓库与主仓库变量,提升脚本可读性
  • 上传 release APK 时保留 clobber 覆盖逻辑

Assets

1

1.41

Stable

4/26/2026, 6:30:20 PM

同步自主仓库构建产物喵

Assets

1

1.40

Stable

4/26/2026, 5:02:51 PM

同步自主仓库构建产物喵

Assets

1

1.39

Stable

4/26/2026, 4:56:03 PM

同步自主仓库构建产物喵

Assets

1

1.38

Stable

4/26/2026, 9:31:11 AM

同步自主仓库构建产物喵

Assets

1

1.37

Stable

4/26/2026, 9:22:21 AM

同步自主仓库构建产物喵

Assets

1

1.36

Stable

4/25/2026, 6:27:36 PM

同步自主仓库构建产物喵

Assets

1