FuseHide

🇨🇳 中文 README

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.

Injection modes

LSPosed / libxposed

The Xposed metadata is under app/src/main/resources/META-INF/xposed/.

The runtime chain is:

LSPosed / libxposed
    -> Entry.onPackageLoaded()
    -> only accept MediaProvider package names
    -> System.loadLibrary("fusehide")
    -> hook Application.attach()
    -> capture MediaProvider Application
    -> register config/status receivers
    -> native_init()
    -> PostNativeInit("libfuse_jni.so", ...)
    -> InstallFuseHooks()

Entry intentionally ignores non-MediaProvider processes.

The default static scope contains:

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

Standalone Zygisk

The Zygisk implementation lives under app/src/main/cpp/zygisk/.

The runtime chain is:

Zygisk
    -> preAppSpecialize()
    -> match MediaProvider process name
    -> preload injected dex + libfusehide.so from the module directory
    -> postAppSpecialize()
    -> Dobby-hook linker do_dlopen
    -> wait until libfuse_jni.so is loaded
    -> call libfusehide native_init()
    -> provide DobbyHook through the native hook API bridge
    -> PostNativeInit("libfuse_jni.so", ...)
    -> register HideConfigNativeBridge JNI methods
    -> start ZygiskEntry with the MediaProvider system context

The injected Java classes are loaded from the APK dex payload through InMemoryDexClassLoader.

LSPosed and Zygisk arbitration

FuseHide should not install both hook backends into the same MediaProvider process.

The Zygisk module contains post-fs-data.sh logic that checks LSPosed's module/scope database for an enabled FuseHide MediaProvider scope. When that scope is detected, the module records lsp_scope_enabled and disables the Zygisk module path. The native Zygisk entry also checks the marker and refuses to inject when the LSPosed path is active.

In other words, use one injection backend for MediaProvider at a time.

How path hiding works

Normal path hiding does not require fuse-bpf. FuseHide performs the policy enforcement inside MediaProvider's userspace FUSE daemon.

A simplified request flow is:

restricted app
    -> Linux VFS
    -> /dev/fuse
    -> MediaProvider libfuse_jni worker
    -> FuseHide request/reply hooks
    -> per-UID hide policy
    -> filtered FUSE result

FuseHide does not rely on only one lookup hook. The implementation covers several layers so that a path cannot remain visible simply because a different filesystem operation was used.

Direct path operations

The native layer hooks or wraps relevant MediaProvider paths such as:

  • is_app_accessible_path
  • pf_lookup
  • pf_lookup_postfilter
  • pf_getattr
  • pf_create
  • pf_mkdir
  • pf_mknod
  • pf_unlink
  • pf_rmdir
  • pf_rename
  • selected lower-filesystem fallbacks such as stat, lstat, open, getxattr, and related calls

When a resolved per-UID rule says that the requested path belongs to a hidden subtree, FuseHide attempts to make the target behave as absent rather than merely inaccessible.

Directory enumeration

Hiding a path from stat() or lookup is not enough: the entry must also disappear from directory listings.

FuseHide therefore covers multiple enumeration stages, including:

  • pf_readdir
  • pf_readdirplus
  • pf_readdir_postfilter
  • do_readdir_common
  • GetDirectoryEntries
  • addDirectoryEntriesFromLowerFs
  • fuse_reply_buf

WrappedReplyBuf() acts as a final FUSE-wire filtering layer. It recovers the request UID / inode / parent-path context, recognizes supported directory-entry payload layouts, removes entries matching the resolved hide rule, and forwards the rewritten reply buffer.

Reply and cache handling

A hidden target may already have a positive dentry, inode, or attribute cache entry. Without cache handling, an app could observe a path even after the policy says it should be hidden.

FuseHide therefore also handles:

  • fuse_reply_entry
  • fuse_reply_attr
  • fuse_reply_err
  • ShouldNotCache
  • fuse_lowlevel_notify_inval_entry
  • fuse_lowlevel_notify_inval_inode

For hidden targets the implementation can zero entry/attribute timeouts, avoid caching, and schedule entry/inode invalidation. Runtime tracking is scoped carefully so that state learned from one UID is not blindly reused for another UID with a different hide policy.

Android/data and Android/obb

/storage/emulated/0/Android/data and /storage/emulated/0/Android/obb are special MediaProvider paths. Their access control is not simply the same directory-enumeration path used for ordinary public /sdcard folders.

FuseHide retains hooks and diagnostics around components such as:

  • is_bpf_backing_path
  • is_package_owned_path
  • case-insensitive path comparison
  • ICU Default_Ignorable_Code_Point handling
  • MediaProvider.isUidAllowedAccessToDataOrObbPathForFuse() tracing in debuggable builds

The Unicode policy recognizes default-ignorable characters and normalizes the affected comparison paths so that visually disguised path components do not escape the intended MediaProvider checks.

This special-path work should not be confused with normal configured path hiding: ordinary /sdcard filtering is implemented through the FUSE request/reply path even when fuse-bpf is not running.

Configuration model

FuseHide maintains a runtime HideConfig with these main fields:

  • enableHideAllRootEntries
  • hideAllRootEntriesExemptions
  • hiddenRootEntryNames
  • hiddenRelativePaths
  • hiddenPackages
  • packageRules

Global rules

hiddenRootEntryNames contains first-level names under /storage/emulated/0.

For example:

su
daemonsu

hiddenRelativePaths contains paths relative to /storage/emulated/0:

Download/private
Documents/internal/test

Leading/trailing slashes and repeated separators are normalized by the native policy.

Which apps receive global rules

hiddenPackages is the package allow-list for the global hide rule.

For each FUSE request, FuseHide resolves the request UID to its current package set through PackageManager#getPackagesForUid(). If one of those packages is present in hiddenPackages, the global rule is merged into that UID's effective rule.

The UID-to-rule result is cached, but package add/remove broadcasts invalidate the package-set generation and derived caches so a stale package association is not kept indefinitely.

Package-specific rules

Package-specific targets are stored as PackageHideRule objects and can be edited with [package.name] sections.

Example:

su
daemonsu

[io.github.xiaotong6666.fusehide]
xinhao
Download/private

[com.eltavine.duckdetector]
MT2
xinhao

Rules before the first section are global targets. A value containing / is treated as a relative path; a value without / is treated as a first-level entry name.

Package-specific rules are matched against every package currently belonging to the request UID and merged together. A package-specific section can therefore apply even when that package is not listed in hiddenPackages; hiddenPackages specifically controls inheritance of the global rule.

Current source defaults

The current native defaults are:

Global root names:

su
daemonsu

Packages receiving the global rule:

com.eltavine.duckdetector
io.github.xiaotong6666.fusehide
io.github.a13e300.fusefixer

Package-specific defaults:

[io.github.xiaotong6666.fusehide]
xinhao

[com.eltavine.duckdetector]
MT2
xinhao

enableHideAllRootEntries is disabled by default.

When enabled, all first-level entries are considered hidden except configured exemptions. The source defaults currently keep these names visible:

Android
DCIM
Document
Download
Movies
Pictures

Runtime configuration sync

The configuration UI is not just an editor for local preferences. FuseHide can synchronize a configuration into the already injected MediaProvider process and ask that process to report the native configuration it actually has applied.

The main pieces are:

  • HideConfigStore
  • HideConfigProvider
  • HideConfigRequestReceiver
  • the injected Entry / ZygiskEntry
  • HideConfigNativeBridge

The injected process first attempts to recover a persisted injected-process snapshot, then obtains current app-side configuration through the provider path. A broadcast fallback is available when the provider path cannot be used.

Reload transactions use reload tokens, and the fallback IPC path contains authentication checks rather than accepting arbitrary unauthenticated configuration broadcasts.

Configuration changes are published atomically to the native policy. Applying a new configuration increments its generation and invalidates dependent UID rules, root snapshots, path-classification caches, and tracked hidden targets.

The injected process also retries configuration loading around boot/user lifecycle events such as:

  • ACTION_LOCKED_BOOT_COMPLETED
  • ACTION_BOOT_COMPLETED
  • ACTION_USER_UNLOCKED

Installation

Download artifacts from GitHub Releases.

LSPosed mode

  1. Install the FuseHide APK.
  2. Enable FuseHide in LSPosed.
  3. Scope it to MediaProvider:
    • com.android.providers.media.module
    • com.google.android.providers.media.module
  4. Restart the scoped MediaProvider process or reboot the device.
  5. Open FuseHide and check the runtime status page.

Only the MediaProvider package present on your ROM needs to be active.

Zygisk mode

  1. Use a compatible root environment with a working Zygisk implementation.
  2. Install the FuseHide APK if you want the configuration/probe UI and provider-side runtime configuration.
  3. Flash the FuseHide-*-release.zip module from the release assets with your root manager.
  4. Reboot, or restart MediaProvider after a successful KernelSU hot install.
  5. Make sure FuseHide is not simultaneously scoped to MediaProvider in LSPosed.
  6. Open the app and verify that the MediaProvider hook is active.

The module installer extracts the correct ABI's libfusehide.so, installs the Zygisk library, and extracts the injected dex payload from the packaged APK.

In KernelSU or Magisk, use the module's Action button and press Volume Up to restart MediaProvider (Volume Down cancels).

Supported KernelSU versions can hot-install updates when the Zygisk loader and boot scripts are unchanged. Running processes are not reloaded automatically; otherwise, reboot.

Using the app

The current app has four main areas:

  • Home — hook/runtime status, device information, applied-state overview.
  • Config — global and per-app hide configuration.
  • Probe — direct filesystem checks for debugging policy behavior.
  • Settings — UI and application settings.

Applying configuration

The configuration UI distinguishes the editable draft from the configuration currently applied in MediaProvider.

Relevant actions include:

  • Apply — persist the edited configuration and request MediaProvider to reload it.
  • Refresh Applied Config — ask the injected MediaProvider process for its current native configuration snapshot.
  • Restore Defaults — restore source defaults into the editor.
  • Detailed Diff — compare the current draft against the applied MediaProvider snapshot.

Probe tools

The probe screen includes operations such as:

  • Stat
  • Access
  • List
  • Open
  • Get Con
  • Create
  • Mkdir
  • Rename/Move
  • Rmdir
  • Unlink
  • All PKG
  • App Data
  • Insert ZWJ

These tools are intended for debugging and reproducing MediaProvider/FUSE behavior, including Unicode-path cases.

Example validation

If Download/private is hidden for the test app, the expected behavior is:

/storage/emulated/0/Download              -> visible
/storage/emulated/0/Download/private      -> hidden
list(/storage/emulated/0/Download)        -> does not expose "private"
stat/open(private)                        -> behaves as hidden/absent

Repeated access should not make the target visible again merely because a positive FUSE/VFS cache entry was created earlier.

Native compatibility strategy

MediaProvider's internal C++ ABI changes over time, so FuseHide does not treat one device's offsets as universal.

The native hook resolver can combine several evidence sources:

  • normal ELF symbol lookup
  • file-backed ELF parsing
  • runtime/in-memory ELF parsing for embedded APEX-style mappings
  • relocation/import resolution
  • .gnu_debugdata
  • resolved feature anchors
  • known device profiles, but only when the profile is sufficiently verified

Some hooks require explicit ABI evidence. Examples include the libc++ string object layout and the MediaProvider DirectoryEntries container layout.

If the string ABI cannot be verified, hooks that would decode or construct those string objects are skipped. If the directory-entry ABI is unknown, unsafe C++ container hooks are skipped. fuse_req_ctx is resolved from the linker/import/libfuse path and does not fall back to an unverified hand-written struct layout.

This is intentional: an incomplete hook set is preferable to corrupting MediaProvider memory with an ABI guess.

Build

Clone with submodules:

git clone --recurse-submodules https://github.com/XiaoTong6666/FuseHide.git
cd FuseHide

If the repository was cloned without them:

git submodule update --init --recursive

The current build uses:

  • Gradle Wrapper 9.7.1
  • Android Gradle Plugin 9.4.0
  • Kotlin 2.4.20
  • compileSdk / targetSdk 37
  • minSdk 31
  • Java / Kotlin target 17
  • Android NDK 30.0.15729638
  • C++20

CI builds with JDK 21; local builds require a JDK compatible with the current Android Gradle Plugin configuration.

Build debug and release artifacts:

./gradlew assembleDebug assembleRelease

The APK packaging pipeline also produces signed Zygisk module archives under:

app/build/zygisk/

Useful Gradle tasks include:

./gradlew zipDebug
./gradlew zipRelease

./gradlew pushDebug
./gradlew pushRelease

./gradlew flashDebug
./gradlew flashRelease

./gradlew flashWithMagiskRelease
./gradlew flashWithKsudRelease

./gradlew flashAndRebootRelease
./gradlew flashWithMagiskAndRebootRelease
./gradlew flashWithKsudAndRebootRelease

flash* tasks use adb and therefore require a connected device and an appropriate root manager on that device.

For formatting:

./gradlew format

The version code is derived from:

git rev-list --count HEAD

and the version name is 1.<versionCode>. Use a full-history clone for reproducible release versioning; a shallow clone changes the commit count.

Project layout

app/
  src/main/java/io/github/xiaotong6666/fusehide/
    config/           runtime configuration and IPC
    debug/            probe/debug helpers
    status/           injected-process status handling
    ui/               Compose application UI
    xposed/            LSPosed and injected Java entry points
  src/main/cpp/
    fusehide/          core FUSE hook/policy/runtime implementation
    zygisk/            standalone Zygisk injection backend
    third_party/Dobby/ native hook dependency

baselineprofile/       Android baseline-profile module
uihelper/              UI helper git submodule
template/module/       Zygisk/root-module template
scripts/               packaging/build helper scripts
docs/                  architecture and reverse-engineering notes
MediaProvider/          local AOSP MediaProvider reference tree; not part of the Gradle build

For the detailed FUSE hook architecture, see docs/architecture.md.

Troubleshooting

Capture logs

A simple filter is:

adb logcat -v time | grep -i FuseHide

or:

adb logcat -s FuseHide

Debug builds provide significantly more hook-resolution and request-path information than release builds.

Module reports “not hooked”

Check that:

  • the device is Android 12 / API 31 or newer;
  • the ROM uses one of the supported MediaProvider package names;
  • exactly one intended injection backend is active;
  • LSPosed scope is correct when using LSPosed;
  • Zygisk is actually active when using the standalone Zygisk module;
  • MediaProvider or the device was restarted after installation/configuration changes.

A path is still visible

When reporting a visibility problem, include both direct access and directory enumeration behavior. For example, say whether stat, open, and the parent list operation disagree.

Also include:

  • device model
  • Android version and ROM version
  • kernel version
  • MediaProvider version/APK information if available
  • injection backend and version
  • exact hidden configuration
  • target application/package
  • target path
  • relevant FuseHide logcat

Android/data behavior differs from normal folders

That can be expected. Android/data and Android/obb use special MediaProvider access-control/backing-path logic and should not be debugged as if they were ordinary public-directory entries.

The app exposes useful system state such as:

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

These values help describe the device's storage environment, but normal configured FuseHide path filtering itself is not dependent on fuse-bpf being enabled.

Releases

Release builds are published at:

https://github.com/XiaoTong6666/FuseHide/releases

The release workflow publishes both APK artifacts and a standalone Zygisk module ZIP.

License

FuseHide is licensed under the Apache License 2.0.

Third-party code keeps its own license terms. In particular, the bundled xz-embedded sources declare SPDX-License-Identifier: 0BSD in their source headers.

Acknowledgements

Special thanks to 5ec1cff for the prototype module reference and technical guidance.

FuseHide also builds on the Android/MediaProvider ecosystem and open-source projects used by the injection, UI, build, and native-hook layers.

Disclaimer

FuseHide is intended for learning, debugging, compatibility research, and experiments on devices and environments you are authorized to modify. Internal Android implementation details may change without notice. You are responsible for evaluating the risks before using the project on a production device.

Releases

1.191

Stable

10/21/2026, 6:04:29 PM

同步自 主仓库 构建产物喵

  • Version: 1.191
  • VersionCode: 191
  • Commit: a1d3c7a
  • Build time: 7m 24s
  • SHA256: fe7851878c3d98524dbab9453db2a53d65f15c88f9ca572de0030f9d7af662b4

Message

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 移走,不放进正式项目喵。

Assets

1

1.190

Stable

10/18/2026, 7:07:56 AM

同步自 主仓库 构建产物喵

  • Version: 1.190
  • VersionCode: 190
  • Commit: 2ea586d
  • Build time: 5m 26s
  • SHA256: f995e2f1418314812552b0eeaf418997619c620938303ac01f0fe799c03bf3c3

Message

fix(native): Bound FUSE invalidations and drain session teardown Meow

这次把 FuseHide 的 FUSE 缓存失效调度收紧了喵。原来根目录 entry、指定 entry 和 inode 失效会按请求创建 detached 线程,大量目录项同时被过滤时容易堆积线程;线程还会持有原始 fuse_session 指针,MediaProvider 销毁 session 后存在继续访问旧指针的风险喵(尾巴警觉地竖了起来)

Native 这边改为进程内共享的单 worker 和有界任务队列,保留原来的 entry 25 ms、根目录 entry 和 inode 50 ms 延迟,并对排队中的同类目标去重。队列最多容纳 4096 个任务,超出时限制警告日志频率并拒绝继续入队,避免高负载下无上限地消耗线程与内存喵(一个一个来,不许偷偷分身)

生命周期方面新增 fuse_session_destroy 的 ELF 导入槽 Hook,兼容文件映射与 APK 内嵌 ELF 的安装路径。销毁前先阻止新任务、清空待执行队列,再等待正在执行的通知退出;新 session 被识别时更新代际并清理旧的跟踪状态。未能安装销毁 Hook 时不安排异步通知,避免继续使用无法保证生命周期的 session 指针喵(认真守住销毁顺序)

Assets

1

1.189

Stable

10/18/2026, 6:52:06 AM

同步自 主仓库 构建产物喵

  • Version: 1.189
  • VersionCode: 189
  • Commit: fac2421
  • Build time: 8m 37s
  • SHA256: 3137bd085537866a279a406665d121978e45192807f304e7d0352d60210cedb6

Message

fix(ui): Resolve scaffold padding lint and missing translations Meow

Assets

1

1.188

Stable

10/14/2026, 6:15:55 PM

同步自 主仓库 构建产物喵

  • Version: 1.188
  • VersionCode: 188
  • Commit: 9d0104f
  • Build time: 8m 10s
  • SHA256: 57890587318bf08d0bff43a6932704b5d34af7fbaf559f21506f514525dd9fea

Message

build(deps): bump org.commonmark:commonmark from 0.30.0 to 0.30.1 (#108)

Bumps [org.commonmark:commonmark](https://github.com/commonmark/commonmark-java) from 0.30.0 to 0.30.1.
- [Release notes](https://github.com/commonmark/commonmark-java/releases)
- [Changelog](https://github.com/commonmark/commonmark-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/commonmark/commonmark-java/compare/commonmark-parent-0.30.0...commonmark-parent-0.30.1)

---
updated-dependencies:
- dependency-name: org.commonmark:commonmark
  dependency-version: 0.30.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <xiaotong6666@users.noreply.github.com>

Assets

1

1.185

Stable

10/13/2026, 6:22:38 AM

同步自 主仓库 构建产物喵

  • Version: 1.185
  • VersionCode: 185
  • Commit: a7e81d7
  • Build time: 9m 01s
  • SHA256: 8a89a6c105cde0ef8189251859442af6a5d7d49f82082fa405533d4359ae3792

Message

build(deps): sync Gradle dependencies and uihelper

Assets

1

1.184

Stable

10/10/2026, 6:13:42 AM

同步自 主仓库 构建产物喵

  • Version: 1.184
  • VersionCode: 184
  • Commit: 7f96a4b
  • Build time: 6m 25s
  • SHA256: 4c970661cde96f73ce812a61e9336ab5d075d7d0b68602b948262c1fbaa81d26

Message

build(deps): bump uihelper and Dobby submodules

Assets

1

1.183

Stable

10/4/2026, 7:43:00 AM

同步自 主仓库 构建产物喵

  • Version: 1.183
  • VersionCode: 183
  • Commit: 34aeb4d
  • Build time: 5m 52s
  • SHA256: f17528b93f3a6b23863ab26d15a39ec57f079cc9e1c853cbe8885e07c61ddfef

Message

perf(native): smooth path cache hot paths

将 HiddenPathClassification cache 的 4096 项满表 clear 改为复用 unordered_map node 的单项增量替换,避免 target app 大量 unique path 扫描时集中释放并重建整张缓存。

为 tracked inode path cache 增加同锁保护的 path->inode 反向索引与 string_view 透明查找,将 LookupTrackedInodeForPath 从 O(N) 扫描降为平均 O(1),并在 inode 路径更新与 session clear 时保持双向索引一致。

Assets

1

1.182

Stable

10/4/2026, 7:27:20 AM

同步自 主仓库 构建产物喵

  • Version: 1.182
  • VersionCode: 182
  • Commit: c407f1c
  • Build time: 5m 19s
  • SHA256: b0dde73676d74a41c56ddc41d96822e080c8f778d987c3929a797dde4838010d

Message

fix(native): model dynamic directory entry ABI

将 MediaProvider GetDirectoryEntries 与 addDirectoryEntriesFromLowerFs 的 original slot 改为动态 ABI 地址存储,仅在运行时 ABI 判定完成后恢复为 shared_ptr 或 value-vector 的准确函数类型。

保留现有 DirectoryEntries ABI 探测、strict hook publication 与 acquire/release 时序,移除 Clang 21 下不兼容函数指针之间的 reinterpret_cast,同时不扩大其他 HookOriginal 的类型擦除范围。

Assets

1

1.181

Stable

10/4/2026, 7:08:04 AM

同步自 主仓库 构建产物喵

  • Version: 1.181
  • VersionCode: 181
  • Commit: 6136230
  • Build time: 4m 27s
  • SHA256: b01f7db49977d5dd455e0445eb86a5c65a94863a3d84a7312d64b5eee497324c

Message

fix(native): harden loader hook validation and fallback

将 MediaProvider linker monitor 从私有 do_dlopen inline hook 改为 dl_iterate_phdr observer 优先,并仅在 ARM64 上尝试 strict public android_dlopen_ext/dlopen Hook;不满足 pristine、backup 或 landing-pad 安全条件时保持 observer-only。

接入 Dobby strict ELF validation,保留 BTI landing pad、拒绝不安全 PAuth/control-flow 路径,并在 generic Native API 中继续允许 anonymous/JIT target,仅强制 backup validation 与 landing-pad 保护。

补齐 public loader Hook 的 Prepare/Commit/Recover 状态管理、x86_64 无可信 quiescence 时的 fail-closed 行为,以及 linker/native callback/ownership 回归测试和架构文档;同步 Dobby 子模块到 strict hook safety 提交。

Assets

1

1.180

Stable

10/3/2026, 6:15:39 PM

同步自 主仓库 构建产物喵

  • Version: 1.180
  • VersionCode: 180
  • Commit: 399adb5
  • Build time: 5m 29s
  • SHA256: d5f5e9700eb9bc712a0f8cabbe8cb9babe002f74e7c093525114a28c83b8124f

Message

perf(native): reduce FUSE request bookkeeping overhead

继续优化 MediaProvider FUSE 高频请求路径,降低隐藏策略判断之外的固定开销。

为 UID hide rule 增加 generation-aware TLS cache 和 borrowed rule fast path,减少同一线程高频请求中的 mutex、unordered_map 查找与 shared_ptr 引用计数;配置或 package generation 变化时自动失效,并处理配置更新与规则解析并发时的 generation retry。

优化 ShouldNotCache 路径,先使用 any-package candidate prefilter 筛掉明显无关路径,仅对可能参与隐藏策略的路径执行完整 subtree 判断,同时保持全局 shared dentry cache 语义不变。

将 ScopedPathPolicyContext、lookup name 和 NeedsSanitization 等同步热路径改为 string_view,减少正常路径上的 owned string 构造与复制;无 hide rule 的 UID 在完成必要的 kernel casefold compatibility 后直接调用原 MediaProvider helper,不再进入 HidePolicy bookkeeping。

将 readdir request context 改为 TLS-first:普通 non-target UID 不再访问全局 pending context map/mutex,target UID 仍保留全局 fallback 以兼容潜在跨线程路径,并支持嵌套 request 的 context 恢复。

为 FUSE session tracking 增加嵌套 scope 和 same-session fast path,避免同一请求调用链反复进入 session mutex。

Assets

1

1.179

Stable

10/3/2026, 5:26:19 PM

同步自 主仓库 构建产物喵

  • Version: 1.179
  • VersionCode: 179
  • Commit: 1954997
  • Build time: 4m 47s
  • SHA256: a7da53f700350ce2390b806b19963ce1a3239c0b1e42c256f5ec3254bfdb5d01

Message

fix(ui): restore MIUIX hide status colors

Assets

1

1.178

Stable

10/3/2026, 4:41:55 PM

同步自 主仓库 构建产物喵

  • Version: 1.178
  • VersionCode: 178
  • Commit: 8313aa6
  • Build time: 5m 10s
  • SHA256: edcea2769b2802e24b88e19b71e0d9241358205a8b585e1932409108d652aadf

Message

perf(native): reduce MediaProvider FUSE overhead

优化 MediaProvider/FUSE 热路径中的主要性能瓶颈。

移除 FuseHide 对 ICU Default_Ignorable_Code_Point 查询的依赖,改用与 Android kernel casefold 对齐的 Unicode 12.1 静态范围表,并为 ASCII compare、NeedsSanitization 和 RewriteString 增加快速路径,减少普通路径上的 Unicode 处理开销。

优化 relative path canonicalization,减少重复 Normalize/Canonicalize 和逐字符 std::string::push_back;同时让无 hide rule 的 UID 在进入 pathname classification cache 前直接返回,避免非目标应用产生无意义的分配、hash 和缓存污染。

收缩 inode->path tracking 范围,仅保留与隐藏策略相关的路径,并移除 16384 项缓存满时的 O(N) pseudo-LRU eviction,避免全盘扫描时反复遍历整个 inode cache。

保留 native hook 诊断开关,但默认恢复正常 hook 安装,避免诊断状态影响实际隐藏逻辑。

Assets

1

1.177

Stable

10/3/2026, 12:02:17 PM

同步自 主仓库 构建产物喵

  • Version: 1.177
  • VersionCode: 177
  • Commit: fa4ac56
  • Build time: 5m 58s
  • SHA256: e06d06f748bd59b9536080521d615193ea54a4c650bc32a318e56ee97b4c0a94

Message

feat(native): harden hook ownership and callback lifetime

将 Zygisk linker 与 Native Hook 接入 Dobby Prepare/Commit/Recover 事务,并为受控模块加入 strict v3 backup publication。
补齐 retained ticket、重复宿主绑定、callback admission/drain、NODELETE 驻留和安装重入边界,x86_64 无可信 quiescence 时保持 fail-closed。
增加 linker rollback、native ownership、callback lifetime、MediaProvider 与 UID isolation 验收脚本,并同步 Dobby/uihelper 子模块及调试导航适配。

Assets

1

1.176

Stable

10/2/2026, 6:25:23 PM

同步自 主仓库 构建产物喵

  • Version: 1.176
  • VersionCode: 176
  • Commit: e80b8ec
  • Build time: 8m 47s
  • SHA256: b0b80b28214dc25fb42feec732d05ff109c6be0fd0a71a08af4fde6e03d5cb16

Message

build(deps): bump gradle-wrapper from 9.7.1 to 9.8.0 (#98)

Bumps [gradle-wrapper](https://github.com/gradle/gradle) from 9.7.1 to 9.8.0.
- [Release notes](https://github.com/gradle/gradle/releases)
- [Commits](https://github.com/gradle/gradle/compare/v9.7.1...v9.8.0)

---
updated-dependencies:
- dependency-name: gradle-wrapper
  dependency-version: 9.8.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <xiaotong6666@users.noreply.github.com>

Assets

1

1.172

Stable

10/1/2026, 9:52:14 AM

同步自 主仓库 构建产物喵

  • Version: 1.172
  • VersionCode: 172
  • Commit: 314bbd5
  • Build time: 6m 26s
  • SHA256: cc682e9eb3f838e991ccd66cc3bba5f7b40aa45f2858fbc406aeacc1c163809e

Message

chore(ui): sync uihelper formatting and dependencies

更新 uihelper 子模块,补充 miuix-icons version catalog 别名

Assets

1

1.171

Stable

9/28/2026, 7:11:58 AM

同步自 主仓库 构建产物喵

  • Version: 1.171
  • VersionCode: 171
  • Commit: 58e383f
  • Build time: 4m 22s
  • SHA256: 4d6859271ce452187eafa42adb699d1a4ea1d7b44f6effa2084ed52c7e964996

Message

chore(deps): update submodules and adapt Dobby API

更新 Dobby 与 uihelper 子模块。

适配 Dobby 函数指针参数与原函数回填,保持 NativeApiEntries ABI 不变。

改用静态 dobby CMake 目标,确保 Zygisk 内嵌链接。

Assets

1

1.170

Stable

9/23/2026, 6:12:15 AM

同步自 主仓库 构建产物喵

  • Version: 1.170
  • VersionCode: 170
  • Commit: c981383
  • Build time: 4m 01s
  • SHA256: c50c9eae0653d1aeca88ab6c9e35c3840263472ce6274d80ba90a0fab8860033

Message

feat(ui): redesign home status and runtime overview

重构首页状态展示,统一工作中、检查中和异常状态,并显示实际使用的 Xposed 或 Zygisk 注入后端。

重新整理 MediaProvider 与配置同步信息,固定运行时信息布局,避免检查过程中行数和高度跳动。

修正已应用配置的同步判定,引入查询中、未获取、需要审核和已同步状态,并为后端配置查询补充超时处理。

新增已应用配置详情页,可从首页配置同步项直接查看 MediaProvider 返回的格式化后端配置。

完善设备与系统信息展示,输出市场名称、型号、设备代号、Android 版本和 API 等首页信息。

按现有 MIUIX 信息结构重做 Material 3 首页,并参考 KernelSU 使用分段列表与状态卡组织运行时和设备信息。

更新 uihelper 依赖指针,接入新的首页组件、稳定检查态布局及独立顶部栏标题支持。

Assets

1

1.169

Stable

9/23/2026, 6:03:50 AM

同步自 主仓库 构建产物喵

  • Version: 1.169
  • VersionCode: 169
  • Commit: cbbc736
  • Build time: 5m 04s
  • SHA256: 3953438579e75e129f76af1317db65a43a99a5036c4b4bb8f5086dfb5a1dc4a0

Message

feat(ui): refine navigation and app list experience

本次提交围绕主界面与配置页重新整理 UI 架构,接入更新后的 uihelper,自适应处理手机与宽屏导航,并统一 MIUIX / Material 页面容器、系统栏、顶栏与底栏行为。同步迁移导航实现与主题配置,完善悬浮底栏、模糊效果、页面回弹及二级页面转场,减少不必要的延迟渲染与交互割裂。

配置页重点优化应用列表体验,整理列表分组、搜索状态与详情页结构,补充应用图标缓存与预热,降低首次滚动时的冷加载感;同时修正收起顶栏状态下搜索取消动画的锚点、配置页顶部栏 blur 采样链,以及 MIUIX 列表的 overscroll / nested scroll 顺序。

设置页同步精简 MIUIX 相关选项文案与图标,统一图标颜色和视觉层级;并补充 MainActivity 状态管理、窗口主题、baseline profile 与依赖配置等配套调整。

Assets

1

1.168

Stable

9/22/2026, 4:23:58 AM

同步自 主仓库 构建产物喵

  • Version: 1.168
  • VersionCode: 168
  • Commit: e587970
  • Build time: 5m 15s
  • SHA256: b667ddf67dcf41c5710223d7973da10b3f3a8667c276e4b82024330379a3849d

Message

build(deps): bump agp from 9.4.0 to 9.4.1

Bumps `agp` from 9.4.0 to 9.4.1.

Updates `com.android.application` from 9.4.0 to 9.4.1

Updates `com.android.library` from 9.4.0 to 9.4.1

---
updated-dependencies:
- dependency-name: com.android.application
  dependency-version: 9.4.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.android.library
  dependency-version: 9.4.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Assets

1

1.167

Stable

9/14/2026, 2:59:28 PM

同步自 主仓库 构建产物喵

  • Version: 1.167
  • VersionCode: 167
  • Commit: 6f4d1ee
  • Build time: 7m 25s
  • SHA256: b6f5af5a1a378745e7fdb12aa92888167d61c00f18b93301b508a89fdd2e2e96

Message

docs(readme): add bilingual project documentation

重写项目 README,以英文作为主文档,并新增完整中文版本。

结合当前源码补充 LSPosed/libxposed 与独立 Zygisk 双注入后端、MediaProvider FUSE 多层路径过滤、按 UID/包名合并隐藏规则、运行时配置同步、缓存失效以及 native ABI 兼容策略。

同时更新当前默认隐藏配置、安装方式、构建环境、Gradle 部署任务和排错说明,并加入中英文 README 互相切换入口。

Assets

1

1.166

Stable

9/14/2026, 2:22:54 PM

同步自 主仓库 构建产物喵

  • Version: 1.166
  • VersionCode: 166
  • Commit: 68a84ef
  • Build time: 7m 40s
  • SHA256: 95885d3b987eaa1d61912ef3e0a4997df96853be172a99f4d546a327a1dd5297

Message

build(deps): bump androidx.navigation:navigation-compose (#72)

Bumps androidx.navigation:navigation-compose from 2.10.0 to 2.10.1.

---
updated-dependencies:
- dependency-name: androidx.navigation:navigation-compose
  dependency-version: 2.10.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <xiaotong6666@users.noreply.github.com>

Assets

1

1.161

Stable

9/11/2026, 12:27:39 PM

同步自 主仓库 构建产物喵

  • Version: 1.161
  • VersionCode: 161
  • Commit: 77385ea
  • Build time: 5m 53s
  • SHA256: a24c7c0f47f1db9b2332b3673a7c292a9dadc6c062ba858a0347a207e65ca7bd

Message

ci: publish Zygisk update metadata

Assets

1

1.160

Stable

9/11/2026, 10:55:09 AM

同步自 主仓库 构建产物喵

  • Version: 1.160
  • VersionCode: 160
  • Commit: d342fa1
  • Build time: 6m 28s
  • SHA256: a50d0e289cb49c0ac33943679a4837c96ff467d1e1724f0e6b687e56fc97709d

Message

build(deps): bump kotlin from 2.4.10 to 2.4.20

Bumps `kotlin` from 2.4.10 to 2.4.20.

Updates `org.jetbrains.kotlin.android` from 2.4.10 to 2.4.20
- [Release notes](https://github.com/JetBrains/kotlin/releases)
- [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md)
- [Commits](https://github.com/JetBrains/kotlin/compare/v2.4.10...v2.4.20)

Updates `org.jetbrains.kotlin.plugin.compose` from 2.4.10 to 2.4.20
- [Release notes](https://github.com/JetBrains/kotlin/releases)
- [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md)
- [Commits](https://github.com/JetBrains/kotlin/compare/v2.4.10...v2.4.20)

---
updated-dependencies:
- dependency-name: org.jetbrains.kotlin.android
  dependency-version: 2.4.20
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.jetbrains.kotlin.plugin.compose
  dependency-version: 2.4.20
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Assets

1

1.159

Stable

9/8/2026, 8:45:48 AM

同步自 主仓库 构建产物喵

  • Version: 1.159
  • VersionCode: 159
  • Commit: fa77c0a
  • Build time: 6m 18s
  • SHA256: a3ee171d30c1465996614e4205ccefdc293f008ecfecfeecc6281fe37cb6f942

Message

build(deps): bump com.diffplug.spotless from 8.10.1 to 8.10.2 (#68)

Bumps com.diffplug.spotless from 8.10.1 to 8.10.2.

---
updated-dependencies:
- dependency-name: com.diffplug.spotless
  dependency-version: 8.10.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <xiaotong6666@users.noreply.github.com>

Assets

1

1.158

Stable

9/7/2026, 5:49:44 AM

同步自 主仓库 构建产物喵

  • Version: 1.158
  • VersionCode: 158
  • Commit: 887b58a
  • Build time: 5m 39s
  • SHA256: 422c888a69f8beabb55ebaafe3d66408430eedaf4b1c769994a76fd03ede1c18

Message

fix(native): resolve fuse_req_ctx via libfuse and fail closed

通过 libfuse 提供的 "fuse_req_ctx" 获取 FUSE 请求上下文中的 UID,移除对 "fuse_req" 内部结构偏移的硬编码依赖。

解析时依次尝试 "RTLD_DEFAULT"、"libfuse_jni.so" 已绑定的重定位项以及已加载的 "libfuse.so" 符号;仅接受实际指向 "libfuse.so" 的导入目标。

当无法可靠解析 "fuse_req_ctx" 时,不再回退到架构相关的 "0x3c" / "0x18" 偏移,而是让 UID 获取失败并返回 0,避免因 libfuse ABI 或内部结构变化导致错误 UID、越界访问或错误隐藏策略。

同时保留现有 libc++ string ABI 的可信 profile gate,使相关 native hook 在 ABI 未验证时继续 fail closed。

Assets

1

1.157

Stable

9/7/2026, 1:01:22 AM

同步自 主仓库 构建产物喵

  • Version: 1.157
  • VersionCode: 157
  • Commit: 2f49e18
  • Build time: 5m 32s
  • SHA256: 7e0d62149c913fbf6beaf52f2626243b61813073d3daa64163001be182a16ff6

Message

fix(native): harden native FUSE ABI handling

- 修复 32 位与 64 位环境下 FUSE 请求 UID 的读取偏移
- 增加 dirent 长度、对齐及缓冲区边界检查
- 正确处理 open 的 O_TMPFILE 可变参数
- 仅为通过验证的 libc++ 字符串 ABI 安装相关 Hook
- 补充对应 AOSP 固定版本源码引用

Assets

1

1.156

Stable

9/7/2026, 12:38:04 AM

同步自 主仓库 构建产物喵

  • Version: 1.156
  • VersionCode: 156
  • Commit: caf060b
  • Build time: 6m 30s
  • SHA256: d18f5d6423fc7f3f11aae5754b9147f9b167838b769548ec7f7c72c435b9a664

Message

fix(config): Harden config fallback IPC authentication

使用 PendingIntent 类型、可变性、创建者包名、UID 和用户身份共同验证配置请求。
为每次响应生成随机 Action,移除不必要的不安全隐式 Intent 标志,并在 API 33+ 使用非导出 Receiver。

Assets

1

1.155

Stable

9/7/2026, 12:17:03 AM

同步自 主仓库 构建产物喵

  • Version: 1.155
  • VersionCode: 155
  • Commit: b33fcca
  • Build time: 6m 53s
  • SHA256: c7cda13bda40a7286c6bfc7df1cd80b6efa34f816063ba2cc621db4e7435c7c9

Message

fix(config): authenticate hide config requests with PendingIntent

使用 `PendingIntent` 替代原先基于广播调用方 UID 和可控 reply package/action 的配置请求回复机制。

- 通过 `PendingIntent.creatorPackage` 和 `creatorUid` 校验请求方身份,仅允许 MediaProvider 相关受信包请求隐藏配置
- 移除对 `Binder.getCallingUid()` 的依赖,避免广播场景下调用方身份判断不可靠,移除客户端可控的 `reply_package` 和 `reply_action`
- 使用一次性可变 `PendingIntent` 返回配置结果,避免任意广播回复目标
- Android 14+ 添加 `FLAG_ALLOW_UNSAFE_IMPLICIT_INTENT` 以兼容可变 PendingIntent
- 请求结束或超时时主动取消 reply PendingIntent,补充 PendingIntent 被取消时的异常处理和请求方身份日志

Assets

1

1.154

Stable

9/3/2026, 4:46:38 AM

同步自 主仓库 构建产物喵

  • Version: 1.154
  • VersionCode: 154
  • Commit: 0a48c92
  • Build time: 6m 23s
  • SHA256: a1073f63a823393ea62ca337b8538af3abc661ed0d929181f330e06ad3d14065

Message

feat(i18n): add Arabic translation (#67)

Add complete Modern Standard Arabic resources, preserve technical
terminology, and isolate LTR identifiers for reliable RTL rendering.

Co-authored-by: ahmed <qw6326667@gmail.com>
Co-authored-by: xiaotong6666 <xiaotong6666@users.noreply.github.com>

Assets

1

1.153

Stable

9/3/2026, 3:56:31 AM

同步自 主仓库 构建产物喵

  • Version: 1.153
  • VersionCode: 153
  • Commit: b0bd9f8
  • Build time: 6m 31s
  • SHA256: e0ae14fbbb70ebc60cfaba2097eccad7030e4ee777acbd486db656f212b2546d

Message

build(deps): bump Spotless to 8.10.1 (#63)

Bump the Spotless Gradle plugin from 8.10.0 to 8.10.1.

Co-authored-by: xiaotong6666 <xiaotong6666@users.noreply.github.com>

Assets

1

1.152

Stable

9/3/2026, 3:44:30 AM

同步自 主仓库 构建产物喵

  • Version: 1.152
  • VersionCode: 152
  • Commit: b1b364b
  • Build time: 5m 30s
  • SHA256: 5d884399630f8a4e66fbcc1d564be264ee84b928592a10b15fd6a4c703083b62

Message

build(deps): bump Material3 to 1.5.0-alpha27 (#61)

Update Material3 and migrate uihelper to SelectableDropdownMenuItem for the alpha27 API.

Co-authored-by: xiaotong6666 <xiaotong6666@users.noreply.github.com>

Assets

1

1.151

Stable

9/3/2026, 1:07:19 AM

同步自 主仓库 构建产物喵

  • Version: 1.151
  • VersionCode: 151
  • Commit: 018e590
  • Build time: 7m 30s
  • SHA256: 4491c1d9448d142ad921967ce4f77b0e3816b603c3bfaf4a9aafd38db8b53f0d

Message

build(deps): bump agp from 9.3.2 to 9.4.0 (#66)

Bumps `agp` from 9.3.2 to 9.4.0.

Updates `com.android.application` from 9.3.2 to 9.4.0

Updates `com.android.library` from 9.3.2 to 9.4.0

---
updated-dependencies:
- dependency-name: com.android.application
  dependency-version: 9.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: com.android.library
  dependency-version: 9.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <xiaotong6666@users.noreply.github.com>

Assets

1

1.148

Stable

9/1/2026, 1:17:55 PM

同步自 主仓库 构建产物喵

  • Version: 1.148
  • VersionCode: 148
  • Commit: b57b312
  • Build time: 4m 24s
  • SHA256: f1b4a6e7c1bc2c99dc532ed6b16990ac0d3b054d34e1a05c3f67d8efdd916910

Message

build(deps): bump androidx.baselineprofile from 1.5.0-rc01 to 1.5.0-rc02 (#64)

Bumps androidx.baselineprofile from 1.5.0-rc01 to 1.5.0-rc02.

---
updated-dependencies:
- dependency-name: androidx.baselineprofile
  dependency-version: 1.5.0-rc02
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <xiaotong6666@users.noreply.github.com>

Assets

1

1.147

Stable

8/25/2026, 6:23:20 AM

同步自 主仓库 构建产物喵

  • Version: 1.147
  • VersionCode: 147
  • Commit: ac3eb01
  • Build time: 5m 56s
  • SHA256: 8979426e8832a7effed2ea1959a6f198108251aab7803798b2fb961a26932cb0

Message

build(deps): bump agp from 9.3.1 to 9.3.2 (#58)

Bumps `agp` from 9.3.1 to 9.3.2.

Updates `com.android.application` from 9.3.1 to 9.3.2

Updates `com.android.library` from 9.3.1 to 9.3.2

---
updated-dependencies:
- dependency-name: com.android.application
  dependency-version: 9.3.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.android.library
  dependency-version: 9.3.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <xiaotong6666@users.noreply.github.com>

Assets

1

1.145

Stable

8/21/2026, 4:22:24 AM

同步自 主仓库 构建产物喵

  • Version: 1.145
  • VersionCode: 145
  • Commit: 4bc8570
  • Build time: 7m 08s
  • SHA256: 820f8333dac72e4aecb3208b42def9df84a438ae7aeba28fcee53a00dc90b5c8

Message

feat(zygisk): disable backend when LSPosed scope is active

Assets

1

1.144

Stable

8/20/2026, 11:05:46 AM

同步自 主仓库 构建产物喵

  • Version: 1.144
  • VersionCode: 144
  • Commit: 419a46f
  • Build time: 7m 29s
  • SHA256: e9e8a163789acb01af9604e91c9094afdf18e2b4e5779a659cb5c67643b97ad2

Message

build(deps): bump com.diffplug.spotless from 8.9.0 to 8.10.0 (#57)

Bumps com.diffplug.spotless from 8.9.0 to 8.10.0.

---
updated-dependencies:
- dependency-name: com.diffplug.spotless
  dependency-version: 8.10.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <xiaotong6666@users.noreply.github.com>

Assets

1

1.143

Stable

8/18/2026, 5:35:27 AM

同步自 主仓库 构建产物喵

  • Version: 1.143
  • VersionCode: 143
  • Commit: 4e18c85
  • Build time: 6m 57s
  • SHA256: 1b9cbb86848591160eff486cd61a504f5ae23565ccd1fe4b409c53d050cb60ac

Message

build(deps): bump androidx.compose:compose-bom

Bumps androidx.compose:compose-bom from 2026.06.01 to 2026.08.00.

---
updated-dependencies:
- dependency-name: androidx.compose:compose-bom
  dependency-version: 2026.08.00
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

Assets

1

1.142

Stable

8/14/2026, 11:43:33 AM

同步自 主仓库 构建产物喵

  • Version: 1.142
  • VersionCode: 142
  • Commit: 4b3a2ba
  • Build time: 4m 57s
  • SHA256: 9d68f6b433841d5e622f184b26dbbc63ed75bf8a6fad30d7b677112198a460cb

Message

feat(zygisk): 新增 Zygisk 模式并完善模块构建与部署流程

新增独立的 Zygisk 注入链路,在 MediaProvider 进程中预加载 FuseHide native runtime 和注入 DEX,并监控 `libfuse_jni.so` 加载,在其加载完成后初始化 FuseHide、注册 JNI 方法并启动 Java 配置同步逻辑,从而在无需 LSPosed 的情况下完成注入。

新增基于 `InMemoryDexClassLoader` 的 DEX 加载器、linker `do_dlopen` 监控以及 Zygisk API 实现,并引入 Dobby 作为 native hook 后端;同时调整 ELF 工具接口以支持按路径标记查找模块,并将 XZ CRC 初始化改为局部静态状态。

新增 Zygisk 模式下的 `ZygiskEntry` 与 JNI 配置桥接处理,支持配置同步、状态广播、包集合变化通知及失败重试;同时保留原有 `System.loadLibrary()` 路径,并通过 ProGuard 保留反射入口和 JNI 类名。

新增完整的 Magisk 模块模板、安装脚本及构建忽略配置,并将 Dobby 作为 Git submodule 引入。

Gradle 构建流程新增 Zygisk 模块打包及 ADB 推送、Magisk/KernelSU/APatch 安装与重启任务,同时新增 `repack-zygisk.py` 用于生成可刷入的模块包。

生成的 APK 可直接重命名为 `.zip`,作为 Magisk/KernelSU 等模块刷入。

Assets

1

1.141

Stable

8/14/2026, 6:15:37 AM

同步自 主仓库 构建产物喵

  • Version: 1.141
  • VersionCode: 141
  • Commit: 0c3dc14
  • Build time: 4m 35s
  • SHA256: 8d7de2ac6db880f1690c747f7ad194a14eb5ec36f3d942b251dc07fb51f44203

Message

build(deps): bump gradle-wrapper from 9.6.1 to 9.7.0

Bumps [gradle-wrapper](https://github.com/gradle/gradle) from 9.6.1 to 9.7.0.
- [Release notes](https://github.com/gradle/gradle/releases)
- [Commits](https://github.com/gradle/gradle/compare/v9.6.1...v9.7.0)

---
updated-dependencies:
- dependency-name: gradle-wrapper
  dependency-version: 9.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: XiaoTong6666 <xiaotong6666666666@gmail.com>

Assets

1

1.140

Stable

8/7/2026, 2:37:48 PM

同步自 主仓库 构建产物喵

  • Version: 1.140
  • VersionCode: 140
  • Commit: 62d6086
  • Build time: 4m 56s
  • SHA256: 8ca2a47d9c77112d8cc342bcff6d3591ffc17fcf8776ad407a5b4e8013418fe1

Message

fix(native): 修复 API 37 目录缓存 ABI 兼容问题

缓存 API 37 DirectoryEntry 时仅保存 name/type 数据,返回时重新构造 vector,避免跨 libc++ ABI 复用容器

Assets

1

1.139

Stable

8/7/2026, 12:15:15 PM

同步自 主仓库 构建产物喵

  • Version: 1.139
  • VersionCode: 139
  • Commit: b59e37e
  • Build time: 6m 14s
  • SHA256: dc8563c2d0c8b19e7b5d6d9074fe8ac28c1cc1df763299d0e5e77d9c00b7a8a1

Message

fix(native): 适配 API 37 MediaProvider 目录项 ABI #46 #47

API 37 的 MediaProvider 修改了目录项容器布局,GetDirectoryEntries 返回值从 vector<shared_ptr<DirectoryEntry>> 调整为 vector<DirectoryEntry>,导致原有 hook 在新版本上存在 C++ 容器 ABI 不兼容问题。

新增 value-vector 和 shared_ptr 两套 DirectoryEntry wrapper,并通过 addDirectoryEntriesFromLowerFs 的 mangled symbol 判断实际使用的容器类型。保留旧版本 shared_ptr ABI 支持,同时仅在已验证的 arm64 API 37 样本中启用 value-vector 路径。

value-vector 路径不复用旧的目录快照缓存,避免不同 libc++ 实现之间发生容器和字符串所有权转移问题。ABI 无法确认或 profile匹配不可信时跳过相关 hook,避免错误解析 STL 对象导致崩溃。

同时完善 hook profile 校验逻辑:
- 未解析的 RVA 不再回退到 profile 默认值
- 派生偏移要求多个锚点一致确认
- 移除未经验证的 thunk 偏移推导
- 扩展 libc++ string 原始布局解析支持

Signed-off-by: XiaoTong6666 <xiaotong6666666666@gmail.com>
Co-authored-by: HsukqiLee <HsukqiLee@users.noreply.github.com>

Assets

1

1.136

Stable

7/27/2026, 10:09:31 PM

同步自 主仓库 构建产物喵

  • Version: 1.136
  • VersionCode: 136
  • Commit: acd1991
  • Build time: 4m 09s
  • SHA256: 96b1743d61e665aeb2f940ef0f6997f076e08ec33564da23b2f61f98fdde91e8

Message

refactor(native): 收口 Hook ABI 边界

Assets

1

1.135

Stable

7/24/2026, 9:14:21 AM

同步自 主仓库 构建产物喵

  • Version: 1.135
  • VersionCode: 135
  • Commit: 3b3a9c1
  • Build time: 6m 27s
  • SHA256: 25f80ffba4b765c7aa5f24108dfa09ef7fd90b14130a4c82f0a30c1844f61c98

Message

build(deps): bump agp from 9.3.0 to 9.3.1

Bumps `agp` from 9.3.0 to 9.3.1.

Updates `com.android.application` from 9.3.0 to 9.3.1

Updates `com.android.library` from 9.3.0 to 9.3.1

---
updated-dependencies:
- dependency-name: com.android.application
  dependency-version: 9.3.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.android.library
  dependency-version: 9.3.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Assets

1

1.133

Stable

7/18/2026, 7:00:14 PM

同步自 主仓库 构建产物喵

  • Version: 1.133
  • VersionCode: 133
  • Commit: 0015bbf
  • Build time: 4m 32s
  • SHA256: a3e160764b2b9dbe56e213ea823991b9668ebeb466cd68cabc033448212f4028

Message

chore(icon): 降低图标尺寸以改善与部分第三方应用的兼容性 (#40)

部分第三方应用(如NeoBackup)会按原始尺寸绘制其他程序的图标,2050的尺寸可能导致这些应用占用过多资源或者直接崩溃

Assets

1

1.132

Stable

7/18/2026, 9:28:43 AM

同步自 主仓库 构建产物喵

  • Version: 1.132
  • VersionCode: 132
  • Commit: 50b2e05
  • Build time: 3m 55s
  • SHA256: b9948935a9af930aeb6f9c0d9d203d6895e8d46df71d40b0e5989e579b49473b

Message

fix(native): 补强 FUSE root parent 早期恢复

Assets

1

1.131

Stable

7/18/2026, 8:30:08 AM

同步自 主仓库 构建产物喵

  • Version: 1.131
  • VersionCode: 131
  • Commit: 08d9c90
  • Build time: 3m 58s
  • SHA256: 7836bdfc1e61073be5f00b52067cd510232eea4bf776b3486fefa965c01b8d50

Message

fix(native): 清理 fuse session 作用域状态

Assets

1

1.130

Stable

7/18/2026, 5:45:09 AM

同步自 主仓库 构建产物喵

  • Version: 1.130
  • VersionCode: 130
  • Commit: a3ffa05
  • Build time: 2m 17s
  • SHA256: 72d852f9319ace425a598dc6f0f5435003000ff53a51ac2d7f7a3f9df59f9448

Message

fix(native): 限制 inode 追踪缓存增长

Assets

1

1.129

Stable

7/17/2026, 9:48:15 PM

同步自 主仓库 构建产物喵

  • Version: 1.129
  • VersionCode: 129
  • Commit: 271fe76
  • Build time: 3m 49s
  • SHA256: 25685e6bb8d90e6fcff372c66e6f98b1f8ae249ecb62b55e751193719cd7e0cc

Message

fix(native): 隔离跨 UID 隐藏状态

Assets

1

1.128

Stable

7/17/2026, 9:08:20 PM

同步自 主仓库 构建产物喵

  • Version: 1.128
  • VersionCode: 128
  • Commit: f98f313
  • Build time: 3m 59s
  • SHA256: 8a79a4578d07be6287c3544323e65f6bf2ed7a40da2148e92c39fee86b86343e

Message

fix(native): 收紧隐藏路径判定逻辑

Assets

1

1.127

Stable

7/17/2026, 8:56:26 PM

同步自 主仓库 构建产物喵

  • Version: 1.127
  • VersionCode: 127
  • Commit: 71c8413
  • Build time: 4m 01s
  • SHA256: 79c1105bf086f12e5f9483222a66ccb5d1937c85747d1af07bc4529e11df4fcf

Message

fix(native): 防止空指针导致崩溃

Assets

1

1.126

Stable

7/17/2026, 8:29:32 PM

同步自 主仓库 构建产物喵

  • Version: 1.126
  • VersionCode: 126
  • Commit: a6ec3cc
  • Build time: 6m 39s
  • SHA256: 78bbff6be6f90323aeda300b6aded53893139392eb732d249555247fc5acfd17

Message

build(gradle): 优化 Gradle 构建配置并更新依赖

- 启用 Gradle Tooling 并行同步(org.gradle.tooling.parallel)
- 添加 CommonMark 依赖
- 更新 material3 依赖版本
- 更新 uihelper 子模块

Assets

1

1.125

Stable

7/17/2026, 2:00:51 PM

同步自 主仓库 构建产物喵

  • Version: 1.125
  • VersionCode: 125
  • Commit: 02b756d
  • Build time: 7m 00s
  • SHA256: e03e6bc99d84f6e7b72d5b76bdcfd0d519977de6c16ead30ab123d4dedad90e4

Message

perf(native): 预编译隐藏规则并收紧缓存边界

- 将 HideConfig 预编译为 CompiledHideConfig,构建集合/前缀热路径索引并计算 fingerprint
- UID Rule 缓存、hidden path 缓存、root snapshot 纳入 config + package-set 双 generation 失效
- 新增 package add/remove 广播 -> JNI -> native 的失效链路
- root snapshot key 加入 fingerprint 并做碰撞语义校验
- 修正 compiled config 的 lazy init 并发风险

Assets

1

1.124

Stable

7/17/2026, 12:09:34 AM

同步自 主仓库 构建产物喵

  • Version: 1.124
  • VersionCode: 124
  • Commit: b8ad14d
  • Build time: 6m 09s
  • SHA256: b989ea5c58ae8ae13930f03f24cfc30a6799ca01443a283c61471c488f89116a

Message

perf(native): 引入目录快照与路径分类缓存

- 引入 config generation 管理缓存生命周期
- 添加根目录快照缓存,减少重复目录扫描
- 添加隐藏路径分类缓存,降低热路径重复判定开销
- 基于 parent generation 完善缓存失效机制

Assets

1

1.123

Stable

7/16/2026, 8:30:38 AM

同步自 主仓库 构建产物喵

  • Version: 1.123
  • VersionCode: 123
  • Commit: 51ca44f
  • Build time: 6m 09s
  • SHA256: 4758386c0e4f61f1362dc0b26b6a3815ec17a33cc162b7f86c1e4954f17c1fe3

Message

fix(ui): 改进应用列表分组交互与文案

Assets

1

1.122

Stable

7/16/2026, 7:07:41 AM

同步自 主仓库 构建产物喵

  • Version: 1.122
  • VersionCode: 122
  • Commit: 5e653ab
  • Build time: 6m 17s
  • SHA256: 1a691707f3b54210d55b8febdc2af9838ab20d14231ef186966f576bc9a3d797

Message

fix(ui): 对齐配置页应用列表的 Material 搜索交互

Assets

1

1.121

Stable

7/15/2026, 11:34:12 AM

同步自 主仓库 构建产物喵

  • Version: 1.121
  • VersionCode: 121
  • Commit: b4fedaf
  • Build time: 6m 26s
  • SHA256: d155795e49725f4d3d6c0e81f44bdd2cc43f379728a7c55bd415f645cd1095de

Message

chore(deps): 更新 AGP 9.3.0 和 Kotlin 2.4.10

Assets

1

1.119

Stable

7/14/2026, 4:44:57 PM

同步自 主仓库 构建产物喵

  • Version: 1.119
  • VersionCode: 119
  • Commit: 9fa354c
  • Build time: 3m 57s
  • SHA256: e2e4a0ba92d4ea789044c949394ca39e1bdc9955ca50d488976e77f3d921cfc7

Message

fix(ui): 同步搜索框占位符本地化文本

Assets

1

1.118

Stable

7/14/2026, 4:33:18 PM

同步自 主仓库 构建产物喵

  • Version: 1.118
  • VersionCode: 118
  • Commit: 5847d6e
  • Build time: 4m 10s
  • SHA256: 3c9d3a111e7f3102181a5b300e12b673f26054b44771f127dec52d4f56a180cb

Message

refactor(ui): 迁移详情页组件至 uihelper 并清理冗余代码

- 使用 `uihelper` 的 `DetailGroup` 替换本地的 `ConfigDetailGroup` 分组实现
- 使用 `SettingsTextAreaItem` 替换本地的 `AppConfigTargetsCard` 多行输入组件
- 使用 `GroupedSurface` 统一应用信息卡片的背景容器
- 移除应用列表冗余的 `AppListSearchFieldMiuix` 搜索框实现

Assets

1

1.117

Stable

7/14/2026, 3:50:50 PM

同步自 主仓库 构建产物喵

  • Version: 1.117
  • VersionCode: 117
  • Commit: 1d62ef1
  • Build time: 6m 38s
  • SHA256: 7b1d6fa8c35e1ee728e9adfc2d5ced80171fc07de4d544e447c32fa79a38b966

Message

refactor(ui): 适配 uihelper 新组件并优化设置项与页面交互

- 引入 `miuix-preference`,将设置页切换组件改为下拉菜单并补充图标
- 重构配置详情页,复用 `uihelper` 的脚手架与分组布局,移除本地冗余实现
- 为主页、设置页等补充 Miuix 专属的滚动回弹与触觉反馈
- 适配 Material 模式阶梯配色,优化应用列表与详情页视觉层级

Assets

1

1.116

Stable

7/14/2026, 3:44:34 AM

同步自 主仓库 构建产物喵

  • Version: 1.116
  • VersionCode: 116
  • Commit: 73a65f4
  • Build time: 4m 20s
  • SHA256: 812fa0741ebc32cae7864d8402f6a3b2c1887e55f34a625cc6fc5819b83aa11a

Message

chore(ci): 支持检出子模块并更新 GitHub Actions 依赖

Assets

1

1.112

Stable

7/10/2026, 3:37:58 AM

同步自 主仓库 构建产物喵

  • Version: 1.112
  • VersionCode: 112
  • Commit: 0b7be2c
  • Build time: 4m 25s
  • SHA256: f828d6ef2ccc78228a0e2628a44452f2b7b1be3415df98262ce3034c8e26ba67

Message

feat(uihelper): 提取自适应壳层并收敛可复用页面模式

Assets

1

1.111

Stable

7/9/2026, 8:59:20 AM

同步自 主仓库 构建产物喵

  • Version: 1.111
  • VersionCode: 111
  • Commit: eb8e77c
  • Build time: 6m 37s
  • SHA256: ab7d13712394647454b2cfd2547ff9c3c5d4baa8e8c422e955b02bc01e68683b

Message

refactor(ui): 升级 Material 3 Expressive UI 并重构 Material 页面架构

- 迁移至 Material 3 Expressive API,升级 TopAppBar、Scaffold、NavigationBar、Switch 等核心组件
- 引入 Material Kolor 配色,使用 Material Color Utilities 2025 生成 ColorScheme
- 重构 Material 搜索,使用全屏 SearchBar,实现搜索状态管理、键盘控制及搜索结果独立展示
- 优化 Edge-to-Edge、WindowInsets 及 NestedScroll 处理,统一页面滚动行为
- 调整 Material 页面视觉风格,统一 Card、StatusTag、Shape、IconButton、导航栏及状态栏样式
- 优化首页状态卡片布局及列表页面交互,提升整体界面一致性与使用体验
- 清理旧版 Material 搜索组件及相关实现,简化 UI 架构并降低维护成本

Assets

1

1.110

Stable

7/8/2026, 2:30:17 PM

同步自 主仓库 构建产物喵

  • Version: 1.110
  • VersionCode: 110
  • Commit: 3bfc579
  • Build time: 4m 42s
  • SHA256: 0a677fdb59630dd71af7a2e6f3f018f567fd919adf50bff2b8dc0d32f9cdc8ff

Message

refactor(ui): 抽离 uihelper 模块并收紧页面边界

Assets

1

1.109

Stable

7/8/2026, 8:48:41 AM

同步自 主仓库 构建产物喵

  • Version: 1.109
  • VersionCode: 109
  • Commit: 919729d
  • Build time: 4m 09s
  • SHA256: 588ff71a2a97271cfa57a0529a324bc533d59851cbdcdb2552113360c71beb1f

Message

build(deps): bump androidx.navigation:navigation-compose (#33)

Bumps androidx.navigation:navigation-compose from 2.8.5 to 2.9.8.

---
updated-dependencies:
- dependency-name: androidx.navigation:navigation-compose
  dependency-version: 2.9.8
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: dependabot[bot] <xiaotong6666@users.noreply.github.com>

Assets

1

1.108

Stable

7/8/2026, 7:30:16 AM

同步自 主仓库 构建产物喵

  • Version: 1.108
  • VersionCode: 108
  • Commit: af8f826
  • Build time: 3m 58s
  • SHA256: 726381a7784f5c9269fa1994e39ea84c468988fceac5d2c2be18affa94c0ec77

Message

fix(ci): 模块仓库发布前创建空提交,确保每个 Tag 指向独立 Commit

Assets

1

1.98

Stable

7/2/2026, 10:19:31 AM

同步自 主仓库 构建产物喵

  • Version: 1.98
  • VersionCode: 98
  • Commit: bc443b5
  • Build time: 5m 00s
  • SHA256: 685df34729d34c6845e7f6ce9a35cac1d62421af4b28605aa7d24f9af9ca8454

Message

build(deps): bump androidx.baselineprofile (#27)

Bumps androidx.baselineprofile from 1.5.0-alpha06 to 1.5.0-alpha07.

---
updated-dependencies:
- dependency-name: androidx.baselineprofile
  dependency-version: 1.5.0-alpha07
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: dependabot[bot] <xiaotong6666@users.noreply.github.com>

Assets

1

1.95

Stable

6/30/2026, 4:56:54 PM

同步自 主仓库 构建产物喵

  • Version: 1.95
  • VersionCode: 95
  • Commit: f616704
  • Build time: 5m 15s
  • SHA256: a23be4d3009c3fc50ce3082ce199784f0e965c8cacbe13d0a9712208f3828363

Message

build(deps): bump com.diffplug.spotless from 8.7.0 to 8.8.0 (#26)

Bumps com.diffplug.spotless from 8.7.0 to 8.8.0.

---
updated-dependencies:
- dependency-name: com.diffplug.spotless
  dependency-version: 8.8.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: dependabot[bot] <xiaotong6666@users.noreply.github.com>

Assets

1

1.94

Stable

6/29/2026, 9:35:46 AM

同步自 主仓库 构建产物喵

  • Version: 1.94
  • VersionCode: 94
  • Commit: 1cb29d8
  • Build time: 5m 42s
  • SHA256: 192319d93a0e3b5be4261db00a41466024cbc90f60f7a88ba55df02c31a2d003

Message

build(deps): bump gradle-wrapper from 9.6.0 to 9.6.1 (#24)

Bumps [gradle-wrapper](https://github.com/gradle/gradle) from 9.6.0 to 9.6.1.
- [Release notes](https://github.com/gradle/gradle/releases)
- [Commits](https://github.com/gradle/gradle/compare/v9.6.0...v9.6.1)

---
updated-dependencies:
- dependency-name: gradle-wrapper
  dependency-version: 9.6.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

Assets

1

1.93

Stable

6/25/2026, 10:32:49 AM

同步自 主仓库 构建产物喵

  • Version: 1.93
  • VersionCode: 93
  • Commit: f4c1593
  • Build time: 3m 24s
  • SHA256: f6fe02aa3c4a6cdaeeecd5e5ac5337aee3d0d3eaa6ea2910a490330d038d2966

Message

refactor(status): 重构 Hook 状态检测流程

- 使用 Handler 替代 Thread + ReferenceQueue 超时检测
- 增加 token 校验,避免过期回调
- 重构广播状态处理逻辑,优化检测流程
- 清理超时任务,避免无效回调

Assets

1

1.92

Stable

6/22/2026, 8:38:41 AM

同步自 主仓库 构建产物喵

  • Version: 1.92
  • VersionCode: 92
  • Commit: 2f61752
  • Build time: 2m 22s
  • SHA256: b89be83e744789ce6c939021fe55ee4317c2149837a390b2ddca7e94d66c1381

Message

chore(import): 移除未使用的 Kotlin 导入

Assets

1

1.91

Stable

6/21/2026, 11:27:41 AM

同步自 主仓库 构建产物喵

  • Version: 1.91
  • VersionCode: 91
  • Commit: 7f4d1fd
  • Build time: 3m 07s
  • SHA256: 87347830ce09346aa35fd7d878afd6fedb4a6fdb727d38355cbfe0b933526338

Message

fix(status): 修复状态广播兼容性并完善界面文案

- 使用 ContextCompat 注册动态广播接收器,兼容 Android 13 前后行为
- 兼容旧系统 PendingIntent extra 读取方式
- 调整页面 modifier/title 传递、主题命名与多语言资源

Assets

1

1.90

Stable

6/19/2026, 5:47:57 PM

同步自 主仓库 构建产物喵

  • Version: 1.90
  • VersionCode: 90
  • Commit: 2692809
  • Build time: 2m 50s
  • SHA256: b37ce456ac3e30fd411090833d8910ee856345319a47fdc0dbf6072015c4181f

Message

refactor(pager): 使用 Animatable 重构分页弹簧动画实现
使用 Compose Animatable 替代手动 TargetBasedAnimation 帧循环

Assets

1

1.89

Stable

6/19/2026, 8:42:35 AM

同步自 主仓库 构建产物喵

  • Version: 1.89
  • VersionCode: 89
  • Commit: 9f47764
  • Build time: 5m 22s
  • SHA256: 180de7cdcf5063d3680fd8159a944a60a7b978ab655ccee381731d1f7413ff01

Message

build(deps): bump gradle-wrapper from 9.5.1 to 9.6.0 (#21)

Bumps [gradle-wrapper](https://github.com/gradle/gradle) from 9.5.1 to 9.6.0.
- [Release notes](https://github.com/gradle/gradle/releases)
- [Commits](https://github.com/gradle/gradle/compare/v9.5.1...v9.6.0)

---
updated-dependencies:
- dependency-name: gradle-wrapper
  dependency-version: 9.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: dependabot[bot] <xiaotong6666@users.noreply.github.com>

Assets

1

1.88

Stable

6/19/2026, 4:10:39 AM

同步自 主仓库 构建产物喵

  • Version: 1.88
  • VersionCode: 88
  • Commit: 9f62fef
  • Build time: 4m 52s
  • SHA256: 74bac8732ff149572468d3d9273620b4937962679a9deef9c3c8faa090da732b

Message

refactor(pager): 重构分页状态管理与弹簧动画

- 引入 MainPagerState 统一管理导航状态
- 使用 TargetBasedAnimation 替换手写弹簧实现
- 优化分页切换过程中的状态同步逻辑

Assets

1

1.87

Stable

6/18/2026, 3:58:01 PM

同步自 主仓库 构建产物喵

  • Version: 1.87
  • VersionCode: 87
  • Commit: d0d727e
  • Build time: 4m 53s
  • SHA256: 5c9885e4eb3f0accd55bb42d40a3426e9bff3ee8ae8a38fee07f0ae70a7b6fd3

Message

fix(MainPage): 修复页面切换动画中状态错位导致底栏失效问题

Assets

1

1.86

Stable

6/18/2026, 1:37:03 PM

同步自 主仓库 构建产物喵

  • Version: 1.86
  • VersionCode: 86
  • Commit: 47b3285
  • Build time: 5m 07s
  • SHA256: 8f6a3dca4923cde8ecbd9a8ee8e955121388f2ebc8065a2f42c29e866747a2f0

Message

build(deps): bump androidx.compose:compose-bom (#18)

Bumps androidx.compose:compose-bom from 2026.05.01 to 2026.06.00.

---
updated-dependencies:
- dependency-name: androidx.compose:compose-bom
  dependency-version: 2026.06.00
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: XiaoTong6666 <XiaoTong6666@users.noreply.github.com>

Assets

1

1.85

Stable

6/18/2026, 9:39:04 AM

同步自 主仓库 构建产物喵

  • Version: 1.85
  • VersionCode: 85
  • Commit: 68c9374
  • Build time: 4m 47s
  • SHA256: 1d6d5c469d03abcd6d8d04c9b7dc1617484d8c79df40bc3907aaad16725b1df2

Message

build(deps): bump androidx.lifecycle:lifecycle-runtime-ktx (#19)

Bumps androidx.lifecycle:lifecycle-runtime-ktx from 2.10.0 to 2.11.0.

---
updated-dependencies:
- dependency-name: androidx.lifecycle:lifecycle-runtime-ktx
  dependency-version: 2.11.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: XiaoTong6666 <XiaoTong6666@users.noreply.github.com>

Assets

1

1.84

Stable

6/17/2026, 2:21:21 AM

同步自 主仓库 构建产物喵

  • Version: 1.84
  • VersionCode: 84
  • Commit: dc73f33
  • Build time: 5m 03s
  • SHA256: dcd50728c519228a8c65205c0ed280419fa329d7668940ea087f5fee01d802c2

Message

build(deps): bump com.diffplug.spotless from 8.6.0 to 8.7.0 (#17)

Bumps com.diffplug.spotless from 8.6.0 to 8.7.0.

---
updated-dependencies:
- dependency-name: com.diffplug.spotless
  dependency-version: 8.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: XiaoTong6666 <110387028+XiaoTong6666@users.noreply.github.com>

Assets

1

1.83

Stable

6/16/2026, 1:53:42 PM

同步自 主仓库 构建产物喵

  • Version: 1.83
  • VersionCode: 83
  • Commit: 7d13ca2
  • Build time: 3m 10s
  • SHA256: 181171daa60acf0c01aa9f57df5c37abc2e1f2cb48e607d28bc4610cc4d3bccd

Message

fix(ui): 修复页面切换状态同步问题

Assets

1

1.107

Stable

7/8/2026, 1:09:07 AM

同步自 主仓库 构建产物喵

  • Version: 1.107
  • VersionCode: 107
  • Commit: c034f73
  • Build time: 2m 46s
  • SHA256: 05710eb84702331504d60fdf9d5460054a2a08a11465649269bc728322728168

Message

fix(native): 修复 x86/x86_64 string hook ABI 兼容

- 为路径相关 string hook 增加 x86/x86_64 ABI-safe 适配
- 恢复 package_owned 与 bpf_backing 在 x86/x86_64 的安装
- 调整 ShouldNotCache 与 GetDirectoryEntries 的 string 参数适配

Assets

1

1.81

Stable

6/16/2026, 7:13:30 AM

同步自 主仓库 构建产物喵

  • Version: 1.81
  • VersionCode: 81
  • Commit: 5fb06e4
  • Build time: 2m 51s
  • SHA256: 02d1d4e842aac64cbd7277ea68f46f8810fe40cc1ee261d3faf10d89c3f5e10a

Message

chore(deps): 更新 profileinstaller 至 1.4.1

Assets

1

1.79

Stable

6/16/2026, 6:57:27 AM

同步自 主仓库 构建产物喵

  • Version: 1.79
  • VersionCode: 79
  • Commit: 72fa7e2
  • Build time: 2m 47s
  • SHA256: 2240ae6fc02a040d395438727f3557a833a7345490cefee4cc83e8bc8d666241

Message

refactor(ui): 重构设置页面组件布局

- 引入 SettingsGroup 设置组结构
- 替换旧 ConfigToggleCard 与 InfoPanel 实现
- 增加 Material/Miuix 双端设置项组件实现
- 优化设置页布局与组件复用

Assets

1

1.78

Stable

6/16/2026, 5:35:36 AM

同步自 主仓库 构建产物喵

  • Version: 1.78
  • VersionCode: 78
  • Commit: 0d68df5
  • Build time: 3m 04s
  • SHA256: 02b33086176cc650ca33b2a67cdd7e65a4db618f2fd23f64f75f85da05e0c834

Message

refactor(ui): 移除页面区块外层卡片容器

- 移除 SectionCard 的背景、圆角和边框包裹效果
- 调整页面内容布局层级,将信息组件从区块卡片内部移出
- 统一 Material 与 Miuix 下的 SectionCard 行为为无容器布局
- 优化页面整体视觉层次,减少重复嵌套

Assets

1

1.77

Stable

6/15/2026, 7:51:51 PM

同步自 主仓库 构建产物喵

  • Version: 1.77
  • VersionCode: 77
  • Commit: fe1a6c4
  • Build time: 4m 36s
  • SHA256: e7a3be6f58dfae932f983a94382fb5e5a61e19ff3602621ccb069c03b5831466

Message

build: 引入 Baseline Profile 支持和启动性能基准测试

Assets

1

1.76

Stable

6/15/2026, 7:36:15 PM

同步自 主仓库 构建产物喵

  • Version: 1.76
  • VersionCode: 76
  • Commit: 9770fb1
  • Build time: 2m 56s
  • SHA256: 7d1bc86d9170ea0542608cb4d7c0ea9ede95c72c596b7fa208444c9ba3c7b71c

Message

refactor(ui): 重构页面导航与 Compose 页面结构

- 使用底部导航替代顶部标签导航,基于 HorizontalPager 实现页面切换
- 拆分页面结构,新增首页、设置页并整理现有配置页和探测页
- 将运行状态概览、同步状态和设备信息移动至首页展示
- 简化配置页面,移除重复的状态展示和刷新入口
- 优化 Pager 页面切换动画,加入自定义弹簧滚动效果
- 设置相关 UI 调整至独立设置页面
- 优化通用 UI 组件,支持单按钮布局和更合理的交互逻辑
- 移除无用主题颜色配置,改用动态颜色方案
- 添加 material-icons-extended 依赖
- 清理废弃资源和多语言字符串

Assets

1

1.75

Stable

6/15/2026, 11:41:46 AM

同步自 主仓库 构建产物喵

  • Version: 1.75
  • VersionCode: 75
  • Commit: b5d6fe1
  • Build time: 3m 00s
  • SHA256: 5f97940f09ee929a94408cfd269105a3118b6361c051878ce7c923c8592da219

Message

refactor(xposed): 回退热重载并恢复稳定冷加载路径

Assets

1

1.74

Stable

6/14/2026, 1:06:02 PM

同步自 主仓库 构建产物喵

  • Version: 1.74
  • VersionCode: 74
  • Commit: be87c96
  • Build time: 1m 28s
  • SHA256: 10fe79ccbace6af0659f5cf100cb91b932fbfac5dcdc1381c47a760c15c4c9d9

Message

feat(xposed): 迁移至 libxposed API 102 并引入 Native 热重载架构

将 Xposed 模块升级至 libxposed API 102。移除本地 xposed-stubs 模块,改为通过 libs.versions.toml 引用官方 io.github.libxposed:api:102.0.0 依赖。清理 AndroidManifest.xml 中废弃的 Xposed <meta-data> 标签,将模块配置完全交由 module.prop 接管,并启用 autoHotReload。与此同时,将 Java/Kotlin 编译目标统一升级至 Java 17。

Java 层实现 onHotReloading 与 onHotReloaded 回调以支持动态热重载。新增 buildSavedInstanceState 和 restoreSavedInstanceState 机制,在热重载期间安全保存并恢复 Application、ClassLoader 等上下文状态。重构 Hook 逻辑,通过 HookHandle 记录并替换 Application.attach 与 isUidAllowedAccessToDataOrObbPathForFuse 的 Hook 实例,同时完善 BroadcastReceiver 的注销、重建与热重载后配置重同步生命周期。

Native 层重构为“宿主-载荷 (Anchor-Payload)”架构。将大部分原函数入口与运行期状态收敛到 AnchorProcessState 和 HookThreadState 中管理,并补齐 gOriginalIsAppAccessiblePath 的状态一致性。fuse_wrappers.cpp 降级为路由转发层,核心隐藏逻辑抽离至 payload_builtin.cpp。

引入基于 FuseHideAnchorApi 和 FuseHidePayloadApi 的 ABI 演进机制。新增 anchor_state.cpp 管理 NativeGeneration,通过原子引用计数 (activeCalls) 和排空标志 (draining) 实现无锁、安全的 RCU 风格 Native 逻辑热替换。当前 external payload 的设计边界明确为“同仓构建、共享主库 helper 与状态的热重载代码载体”,而不是面向第三方的完全独立插件 ABI,并在 CMake 中新增 fusehide_payload 构建目标。

新增 switchToBuiltinNativeGeneration 等 JNI 接口供 Java 层在热重载时触发 Native 代际切换。更新多语言 strings.xml 补充应用描述及配置恢复相关文案,并在 README.md 中补充 Native 热重载校验指南与 ABI 演进规则。

Assets

1

1.72

Stable

6/9/2026, 6:08:23 PM

同步自 主仓库 构建产物喵

  • Version: 1.72
  • VersionCode: 72
  • Commit: 228c32b
  • Build time: 4m 17s
  • SHA256: e311b6c59bc431b8607bd18f00e74f3816be85a2922891fd9a9becb1fb239fd1

Message

build(deps): bump top.yukonga.miuix.kmp:miuix-ui from 0.9.1 to 0.9.2 (#15)

* build(deps): bump top.yukonga.miuix.kmp:miuix-ui from 0.9.1 to 0.9.2

Bumps [top.yukonga.miuix.kmp:miuix-ui](https://github.com/compose-miuix-ui/miuix) from 0.9.1 to 0.9.2.
- [Release notes](https://github.com/compose-miuix-ui/miuix/releases)
- [Commits](https://github.com/compose-miuix-ui/miuix/compare/v0.9.1...v0.9.2)

---
updated-dependencies:
- dependency-name: top.yukonga.miuix.kmp:miuix-ui
  dependency-version: 0.9.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix(ui): 修复 Miuix 文本框构建失败

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: XiaoTong6666 <3278671549@qq.com>

Assets

1

1.71

Stable

6/4/2026, 2:18:15 AM

同步自 主仓库 构建产物喵

  • Version: 1.71
  • VersionCode: 71
  • Commit: c65e721
  • Build time: 4m 03s
  • SHA256: 30ffa65f951db6bfd26d5980206d1284a558ab2769934feaf0c2e90d6c6b7eba

Message

build(deps): bump androidx.core:core-ktx from 1.18.0 to 1.19.0 (#14)

Bumps androidx.core:core-ktx from 1.18.0 to 1.19.0.

---
updated-dependencies:
- dependency-name: androidx.core:core-ktx
  dependency-version: 1.19.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

Assets

1

1.69

Stable

6/1/2026, 3:31:57 PM

同步自 主仓库 构建产物喵

  • Version: 1.69
  • VersionCode: 69
  • Commit: 340cb86
  • Build time: 2m 32s
  • SHA256: 232ccbbaa5d4453586373a0e77ace8c1da44b63e1b12b6ae66a87824e69132ea

Message

fix(build): 修复 ktlint rule 禁用格式以适配 ktlint 1.x

Assets

1

1.68

Stable

6/1/2026, 3:00:07 PM

同步自 主仓库 构建产物喵

  • Version: 1.68
  • VersionCode: 68
  • Commit: 96b4ed9
  • Build time: 4m 18s
  • SHA256: b006fc5092ecbfa3deea3e6a9a047ab27b80c84ac53ec3cd440d5ab53b0f1d72

Message

build(deps): bump gradle-wrapper from 9.4.1 to 9.5.1 (#11)

Bumps [gradle-wrapper](https://github.com/gradle/gradle) from 9.4.1 to 9.5.1.
- [Release notes](https://github.com/gradle/gradle/releases)
- [Commits](https://github.com/gradle/gradle/compare/v9.4.1...v9.5.1)

---
updated-dependencies:
- dependency-name: gradle-wrapper
  dependency-version: 9.5.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

Assets

1

1.65

Stable

6/1/2026, 2:24:56 PM

同步自 主仓库 构建产物喵

  • Version: 1.65
  • VersionCode: 65
  • Commit: ed52612
  • Build time: 3m 03s
  • SHA256: 39b44f61f339a1be40b6969766eb393e7dcb48e01c80b12ebc0a5721b4daa79d

Message

style: format code

Assets

1

1.63

Stable

5/29/2026, 11:48:09 AM

同步自 主仓库 构建产物喵

  • Version: 1.63
  • VersionCode: 63
  • Commit: e23a54d
  • Build time: 2m 47s
  • SHA256: 4c969af5aeb4fa46237b929fe677268fd62745c3f593bf83b1a02d3be06de3fc

Message

refactor(ui): 收敛双主题页面结构

将配置页和检测页从 Material / Miuix 两套完整页面实现收敛为单一页面结构,保留现有双主题视觉效果。

- ConfigScreen / DebugScreen 统一维护页面结构、字段顺序和按钮分组
- 新增标题、说明、输入框、配置勾选卡片和文本按钮的主题适配组件
- Material / Miuix 的字体、颜色、卡片、输入框和按钮样式继续分别在 UiComponentsMaterial / UiComponentsMiuix 中实现
- 删除重复的 ConfigScreenMaterial / ConfigScreenMiuix / DebugScreenMaterial / DebugScreenMiuix 页面文件
- 降低后续修改配置字段和检测按钮时两套 UI 不一致的风险

Assets

1

1.62

Stable

5/29/2026, 6:55:06 AM

同步自 主仓库 构建产物喵

  • Version: 1.62
  • VersionCode: 62
  • Commit: b1c7eb0
  • Build time: 2m 56s
  • SHA256: cdf7e91a03d028e5ab5c63e1c88a9c18def09785bff0021d2cc6d30e50d78246

Message

style(ui): 调整检测按钮样式层级

Co-authored-by: Xieansecn <xieansecn@users.noreply.github.com>

Assets

1

1.61

Stable

5/29/2026, 6:18:55 AM

同步自 主仓库 构建产物喵

  • Version: 1.61
  • VersionCode: 61
  • Commit: a047ce6
  • Build time: 2m 49s
  • SHA256: 0ac15361d6b5b11916d24ab356ee197b3c9bd982fd2fdaf49fe6eaa6bfb98424

Message

fix(config): 避免缺失本地配置时覆盖隐藏策略

- 区分本地未保存配置与默认配置,避免 provider/fallback 返回默认值
- 保留 MediaProvider snapshot 恢复结果,防止启动阶段被空本地配置覆盖
- 本地配置缺失时支持从当前 applied 配置恢复并同步三处状态
- 移除配置页 Save 按钮,统一通过 Apply 持久化并同步 MediaProvider

Assets

1

1.60

Stable

5/28/2026, 8:53:52 PM

同步自 主仓库 构建产物喵

  • Version: 1.60
  • VersionCode: 60
  • Commit: bb35681
  • Build time: 3m 12s
  • SHA256: e7c3d760760927194f2d2fabaf2da6b65281c7dd2e9a0d17b99d30b23e5abae0

Message

feat(config): 隐藏配置应用后输出完整快照日志

在 applyBundleToNative 成功后以 INFO 级别输出当前 native 隐藏配置完整快照,覆盖初始加载和广播刷新的全部路径

Assets

1

1.59

Stable

5/28/2026, 8:24:33 PM

同步自 主仓库 构建产物喵

  • Version: 1.59
  • VersionCode: 59
  • Commit: 9cacace
  • Build time: 3m 24s
  • SHA256: 18a3bc9b184b4c81d5dc76579d3bcb20c7d27f72363ad7ab47953f07d4a244c5

Message

feat(ui): 支持 Miuix / Material Design 3 双主题切换 (#8)

运行时主题切换,默认 Miuix,可通过右上角按钮切换为 MD3:

- 新增 UiMode 枚举,通过 SharedPreferences 持久化选择
- Theme.kt 作为分发器,根据 UiMode 路由至 MiuixFuseHideTheme / MaterialFuseHideTheme
- 新增 Material Design 3 主题配置 (Color / Shape / Typography + dynamic color)
- 所有 UI 组件拆为 *Miuix.kt / *Material.kt 双实现,通过同名分发器函数调用
- FuseHideHomeScreen 右上角添加 M3 / MIUI 切换按钮
- 同时保留 miuix 与 material3 依赖

Co-authored-by: Xieansecn <xieansecn@163.com>

Assets

1

1.58

Stable

5/28/2026, 6:39:35 PM

同步自 主仓库 构建产物喵

  • Version: 1.58
  • VersionCode: 58
  • Commit: f5057f5
  • Build time: 4m 04s
  • SHA256: 5c50b91a28a6af5016d27a08fcf53c42b67e09e8fe76590e682a485d810d49ce

Message

build(deps): 更新 AGP 及其他依赖版本

- AGP (Android Gradle Plugin) 升级至 9.2.1
- Compose BOM 升级至 2026.05.01
- Spotless 升级至 8.6.0
- Miuix 升级至 0.9.1

Assets

1

1.57

Stable

5/28/2026, 6:07:43 PM

同步自 主仓库 构建产物喵

  • Version: 1.57
  • VersionCode: 57
  • Commit: 6a4d916
  • Build time: 2m 30s
  • SHA256: 1ebf7ceb0db49dd1d94950e38cd8a47340fe12574cbde47ea53f7bd0b4102df5

Message

feat(xposed): 迁移至 libxposed API 101

将 Xposed 模块从 legacy API 93 迁移到 libxposed API 101,native 入口通过 LSPosed 的 do_dlopen → PostNativeInit 回调链保持单一路径。

Entry 改为 extends XposedModule,onPackageLoaded 替代 handleLoadPackage,XposedHelpers.findAndHookMethod 改为 hook(Method).intercept(Hooker),AndroidAppHelper.currentApplication() 改为 hook Application.attach 捕获并新增 ActivityThread fallback,isUidAllowedAccessToDataOrObbPathForFuse debug hook 保留 FLAG_DEBUGGABLE 守卫并使用 getMethod() 匹配旧 findAndHookMethod 的继承链行为。

xposed-stubs 删除旧 xposed stubs,替换为 libxposed API 101 源码,从 java-library 改为 android.library 并升级 Java 17,app 侧 compileOnly 引用确保 API 类不进 APK。

将 assets/xposed_init 和 native_init 迁移为 META-INF/xposed/java_init.list 和 native_init.list,并新增 module.prop 和 scope.list,替代旧 AndroidManifest 中的 xposedmodule / xposedscope 机制。

native_init 接收 NativeAPIEntries 赋值 gHookInstaller,返回 PostNativeInit 作为库加载回调,InstallFuseHooks 仅由 PostNativeInit 触发,移除 native_init 直调和 JNI installFuseHooks 双入口。

AndroidManifest xposedminversion 93 → 101。

StatusBroadcastReceiver 适配 PendingIntent.getParcelableExtra 废弃 API。

proguard-rules 新增保留 libxposed 入口类及 native 方法的规则,防止 dlsym 符号被混淆。

Assets

1

1.56

Stable

5/28/2026, 11:04:42 AM

同步自 主仓库 构建产物喵

  • Version: 1.56
  • VersionCode: 56
  • Commit: 7aa2925
  • Build time: 2m 18s
  • SHA256: a590d2b8d14b6d12d2312f382b3232cec393ba5ab3abfc519d5fc26fdc73d4c2

Message

fix(native): 增强 libfuse_jni 映射定位

结合 dl_iterate_phdr 与 /proc/self/maps 解析 libfuse_jni 映射信息,补齐文件偏移与可执行映射元数据。
在 file-backed ELF 解析中使用发现到的文件偏移,同时保留现有runtime 解析与 APK 内嵌库 fallback 路径。

Assets

1

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

1.35

Stable

4/25/2026, 6:14:17 PM

同步自主仓库构建产物喵

Assets

1

1.34

Stable

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

同步自主仓库构建产物喵

Assets

1

1.33

Stable

4/25/2026, 5:57:07 PM

同步自主仓库构建产物喵

Assets

1

1.32

Stable

4/25/2026, 7:26:25 AM

同步自主仓库构建产物喵

Assets

1