Repository navigation
1.2..2
Changed
All three native libraries now know the stealth package name at load time.
libxstealth.so, libxstealth_next.so, and libxstealth_bridge.so each had hardcoded name matches for ShizuPosed, libxstealth, and similar. Those matches cover the standard build. In the stealth build they never hit, so each library was filtering the wrong set of names.
Each library now accepts the running manager's package name at load time:
libxstealth.soandlibxstealth_next.souse it to recognize the framework's own threads as trusted. Without that, the framework's own syscalls were being blocked by the framework's own filters, which breaks hooking.libxstealth_bridge.souses it to recognize paths that identify the manager. Without that, a target doingreadlink("/proc/self/fd/N")on an fd it opened could see the manager's package name in a marker or config filename.
The package name is passed in by XStealthNative.load(), XStealthNativeNext.load(), and XStealthBridge.load() respectively. Nothing about the standard build's behavior changes.
Fixed
Blank screen after granting Shizuku.
The notification permission is now requested before the service starts. On Android 13+, startForeground fails if the notification channel isn't ready, and the failure kills the app process. That's what produced the "blank screen then back to home" symptom.
Two related fixes: ShizukuHelper.autoStartServiceIfPossible() now actually posts the service start on the main thread (the previous version wrapped it in a lambda that was never invoked), and MainActivity no longer tears itself down on grant.
ActivityThread reflection is shape-based.
handleBindApplication, getPackageInfoNoCheck, LoadedApk.getResources, and the AppBindData fields are now found by argument-type and field-type matching, not by a fixed list of signatures. If a method or field is missing on a future Android version, the framework logs every method and field the class actually declares — so the failure is diagnosable from launch.log alone.
Smart-foreground no longer re-enables debugging while the watched app is loading.
The first exit after entering a watched app waits 10 seconds instead of 4, covering slow splash handoffs. The service's foreground check now uses the same 4-second freshness window as the monitor, so the restore only fires after the app has genuinely left the foreground.
Update checks.
The Settings tab has a Check for updates button. It bypasses the 12-hour throttle and posts a notification only when a newer release exists. Automatic checks on launch are unchanged.
XposedHook.dex and native libraries refresh on update.
Both are compared by content against the APK, not by name or size. A rebuild with a small source change no longer leaves a stale file on the shell side.
app_process spawn no longer blocks the shell.
Wrapped in a subshell with stdout redirected to /dev/null. Without this, the manager's shell call blocked for the lifetime of the target process, and am start fired 20+ seconds late.
Which APK to install
Both APKs ship in this release. Same code, same signature, different package name.
app-standard-release.apk — package com.shizuposed.manager. Use this unless you have a specific reason not to.
app-stealth-release.apk — package of the form <letter>.<letters>.<letters>. Use this if a target app checks for the standard package name, or if you want a different launcher label.
The two builds cannot update each other. If you're switching between them, uninstall one before installing the other, and clear the shell-side cache first:
rm -rf /data/user/0/com.android.shell/files/.syscall_cache
Or on devices where that path isn't writable:
rm -rf /data/local/tmp/shizuposed
The stealth build's scrambled name closes name-based checks. It does not close behavior-based ones — an app that detects the hook by inspecting its own method entry points still detects it, regardless of which build you're running.