Repository navigation
1.2.0
Changed
The name is still derived from a per-machine seed, so it stays stable across rebuilds on the same machine. -PstealthSeed=<anything> still produces a different name. To see what yours will be:
gradle printStealthId
The next engine now respects the trusted-package prefix. libxstealth_next.so was using a hardcoded "ShizuPosed" / "Xposed" match to decide whether the current thread belongs to the framework. In the stealth build that match never hit, so the framework's own syscalls were being blocked by its own filters. The prefix is now passed in at load time, same as libxstealth.so.
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 — which is what looked like a silent return to the home screen.
ShizukuHelper was never actually starting the service after a grant. The previous version wrapped the call in a lambda that was never posted. It now posts the call on the main thread correctly, so the grant path starts the service as intended.
MainActivity no longer tears itself down on grant. The grant handler refreshes the UI and nothing else. It does not finish, recreate, or restart the activity.
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. A failure on a future Android version logs every method and field the class actually has, so the fix is diagnosable from launch.log alone.
Which build to get
Same as before: the standard build unless you specifically need the stealth one. The standard build is the one the README, XDA thread, and release notes refer to.
If you do want the stealth build, read the install section below carefully — it's a separate app, not an update.
⚠️ Installing the stealth build
The stealth APK has a different package name. Android treats it as a completely separate app — it can't update the standard one, and the standard one can't update it. That's the point, but it means a few things work differently.
Switching from standard to stealth:
- Uninstall ShizuPosed first.
- Install the stealth APK.
- Grant Shizuku permission again — it's a new package, so the old grant doesn't carry over.
- Re-add your modules. The stealth build has its own data directory.
Switching back from stealth to standard: same three steps in reverse.
If you install the stealth APK without uninstalling the standard one, you'll have two copies. They'll have different launcher names (standard shows "ShizuPosed", stealth shows "Sync Service") but the same icon. They don't share settings, modules, or Shizuku permissions, and one's service doesn't talk to the other's. Running both at once means you won't know which one is actually doing the hooking. Don't do this — pick one.
Don't try to update across builds. Installing a stealth APK over a standard one (or the reverse) fails with INSTALL_FAILED_UPDATE_INCOMPATIBLE. That's the package-name check doing its job.
Modules don't transfer. Adding a module to the standard build doesn't add it to the stealth build. They're separate installs.
Which build to use
Use the standard build unless you have a specific reason not to. It updates normally, its name is what the README and XDA thread use, and it's what most people expect.
Pick the stealth build if:
- A target app you need to hook checks for
com.shizuposed.managerby name. - You want the launcher to show something other than "ShizuPosed".
- You're fine with updates being manual (uninstall, reinstall, re-grant).
Before installing
Clear the shell-side cache so the new build doesn't pick up state from the old one. In Termux with rish, or in a shell with Shizuku access:
rm -rf /data/user/0/com.android.shell/files/.syscall_cache
On devices where the shell files dir isn't writable, the fallback path is used instead:
rm -rf /data/local/tmp/shizuposed
Run whichever one matches your device. If you're not sure, run both — deleting a directory that doesn't exist is harmless.
Then install the stealth APK and open it. The first launch will redeploy the payload to the shell-side directory, which is a one-time cost of a few seconds.