AI summary
Android 12+ storage-visibility module that filters selected paths in MediaProvider per app, with LSPosed and Zygisk backends, configurable rules, and hot reload. The latest update improves FUSE cache invalidation, session handling, and KernelSU hot installation.
Generated by AI. May contain inaccuracies.
Screenshots
About this app
FuseHide is an Android 12+ storage-visibility module and MediaProvider/FUSE research tool. It injects into the MediaProvider process and hooks the userspace FUSE implementation in libfuse_jni.so, allowing selected apps to see a filtered view of /storage/emulated/0 (/sdcard) according to runtime-configurable, per-UID rules.
FuseHide currently provides two injection backends:
LSPosed / libxposed, using the Android app as an Xposed module.
Standalone Zygisk, using a flashable root-module package and Dobby-based native hooks without requiring LSPosed.
Both backends converge on the same libfusehide.so runtime, the same path policy, and the same configuration model.
FuseHide also keeps the original MediaProvider-oriented Unicode research and mitigation path for Android/data and Android/obb. Normal /sdcard path hiding and the special Android/data / Android/obb path are related to the same MediaProvider process, but they are not the same hook path.
Warning
FuseHide works by hooking internal MediaProvider and FUSE implementation details. These ABIs are not public Android APIs and can change between Android releases, MediaProvider updates, and vendor ROMs. The project deliberately skips unsafe hooks when an ABI cannot be verified instead of blindly applying offsets or layouts.
Features
Hide first-level entries under /storage/emulated/0 for selected packages.
Hide nested relative paths such as Download/private without hiding their visible parent directory.
Define package-specific hide rules in addition to global rules.
Optional stress-test mode for hiding all first-level entries except configured exemptions.
Filter directory enumeration as well as direct lookup/access paths.
Reduce cache-based visibility leaks through entry/attribute timeout control and active invalidation.
Hot-reload hide configuration into the already injected MediaProvider process.
Query the actual native configuration currently applied inside MediaProvider.
LSPosed/libxposed backend and standalone Zygisk backend.
Runtime ELF, file-backed ELF, relocation and verified device-profile based hook resolution.
Compatibility handling for multiple MediaProvider directory-entry ABIs, including newer API 37 layouts.
Debug/probe UI for filesystem operations and Unicode-path experiments.
Requirements
FuseHide currently targets:
Android 12 / API 31 or newer.
MediaProvider package:
com.android.providers.media.module, or
com.google.android.providers.media.module.
For the LSPosed backend, a compatible LSPosed/libxposed environment is required.
For the Zygisk backend, a compatible root environment and Zygisk implementation are required. The packaged installer supports Magisk-compatible installation flows and KernelSU-style module installation; the actual runtime still depends on a working Zygisk implementation on the device.
What's new
- fix(fusehide): Harden FUSE invalidation and hot reload, Meow
- 之前有些目录明明该隐藏,却会因为别的 UID 先访问过,就从 FUSE 缓存里漏出来喵(伸爪按住乱跑的 dentry)。这次把 lookup 和 READDIRPLUS 的缓存一起管好,不让不同 UID 再串缓存喵。
- 顺手理了理 Session 生命周期和失效队列,让通知跟着正确的 Session 代次走喵。热更新碰到 root_ino=0 时,会先查看 AOSP 和设备实际 libfuse_jni 的节点树喵(认真翻翻节点树)。只有确认这个 Session 没创建对应子节点、也没有缓存要清,才跳过没必要的根目录通知喵;有东西要清的还是照常处理喵。
- 另外补好了 KernelSU 热安装、模块操作和配置重载的细节喵。根 inode 和回调入口的诊断日志继续留着,但只在全局 Debug 开关打开时才打印,Release 就安静一点喵(把日志本收好)。测试源码也从 app/src/main 移走,不放进正式项目喵。
About this version
- Version
- 1.191 (191)
- Size
- 7.33 MB
- Requires Android
- 12
- Target SDK
- 31
- Architecture
- arm64-v8a, armeabi-v7a, x86, x86_64
- Downloads
- 1
- Updated
- Oct 21, 2026
- Package
- io.github.xiaotong6666.fusehide
Similar apps
Ratings & reviews
- 50
- 40
- 30
- 20
- 10