Changes since v14.0.27-next
Highlights
- The server can now start before the first unlock. On boot it comes up from
LOCKED_BOOT_COMPLETEDover wireless debugging and is running about five seconds before you unlock, instead of about twenty seconds after. - Startup is dramatically faster. Measured on a Samsung SM-A556B: starter exec to first binder went from 11.4 s to 1.25 s, and request to
RUNNINGfrom about 21 s to 4.4 s. - New Labs: Power menu. Reboot, recovery, bootloader, power off, screen off, plus root-only soft reboot and System UI restart.
- New Labs: Display controls. Resolution, density and refresh rate, with the panel's own refresh modes offered as presets and a reset on every row.
- Hiding can now survive an app's startup check. An opt-in setting closes and reopens listed apps when they launch, so they read the hidden values instead of the ones they saw first.
Starting and boot
- Boot start begins at
LOCKED_BOOT_COMPLETEDwith the highest priority, through a direct-boot-aware foreground service. Methods that cannot run before unlock are deferred to it rather than failing. - One start at a time. Boot and watchdog requests now join the start already in flight instead of replacing it, and only a Restart you tapped yourself may replace one. This removes the case where two starters ran and the second killed the first server.
- A manual stop, or the notification's Cancel, now cancels a start that is still running before the unlock.
- The start state is no longer turned into
STOPPEDby a binder ping that fails duringSTARTING; a real failure says so itself, so a slow boot is not mistaken for a stop. - The classic ADB port is opened before the server starts.
tcpip:restarts adbd, and doing that after the start was killing the server it had just created. - A wireless start keeps hunting for the port until the connection is made, with fresh ports and stale-port recovery, instead of giving up after the first search.
- For the no-network mode, the worker is promoted to the foreground before it asks for the hotspot, and mDNS discovery starts only once the hotspot is up. A failed hotspot job no longer takes the app down.
- A tapped Restart or "Attempt now" can replace the locked-boot run.
- The root method is kept when it falls back to wireless, rather than being forgotten after one fallback.
- The watchdog no longer starts Shizuku after a reboot when "start on boot" is off.
- Boot timeline is logged as
+X s since boot, with per-phase startup timings, so a slow start can be read rather than guessed at.
Server
- Fixed an NPE when a client that was already registered attached again; the existing client is now reused.
- The server starts safely before the unlock: permission records of a user not known to be unlocked are kept, package lists are judged by the unlock state they were listed in, and the binder is handed to clients again once user 0 unlocks.
- Faster startup: the package list is fetched once and reused for the binder hand-out, packages are listed through the package manager service, and the binder reaches the manager before the clients.
ServerLognow always reaches logcat, including early startup failures.isUserUnlockedis reached through the publicIUserManagerinterface, so a locked device can actually be asked.
Labs and features
Power menu
- Reboot, reboot to recovery, reboot to bootloader, power off, and turn the screen off, all through the shell.
- Root-only soft reboot (restarts the framework, not the kernel) and System UI restart (fixes a stuck status bar or shade). Both appear only where root is available.
Display
- Resolution (
wm size), density (wm density), and minimum/maximum refresh rate. - Refresh rates are read from
dumpsys display, so the presets are modes the panel actually supports; a typed value remains as a fallback. - Every row has a reset, and values are bounded before they are sent.
Hiding
- New opt-in "Close and reopen on launch": a listed app is restarted once per launch after its settings are hidden, which is what an app that checks developer options during startup needs.
- The restart goes through the shell, keeps the settings hidden across the gap, and is attempted once per launch so it cannot loop.
Intents
- Copied commands now include
-p <package>, and the Intents screen has separate rows to copy the package and each action, next to the auth token that already had one. - A hidden copy's commands name the package it is installed as.
Stealth mode
- A failed save now says why in a sentence (folder not writable, folder refused a file, file could not be opened) instead of surfacing a raw NPE.
- Repackaging and save failures are written to the app log with their stack, so a failure inside the signing libraries can be identified.
- The
adb shell pm grantadvice now names the package the app is actually installed as, which matters for a hidden copy.
Fixes
- Firewall: the platform fallback no longer reports success as failure. Blocking now works on ROMs whose
cmd connectivitylacks the verb, and the master switch stops reporting itself off when apps could not be changed. - mDNS discovery: stopping discovery is reliable even before its start callback, resolutions are serialised so a second advertised port is not lost, and a failed start no longer leaves the instance believing it is running.
- ADB port: after
tcpip:is sent, a TLS reset is treated as the expected disconnect rather than as a reason to search for another port and restart adbd again. - Locked-boot run: a run cancelled before its coroutine starts now releases its reservation and stops the service.
- Log screen: other apps'
ShizukuApplicationattach lines are no longer imported, and a pull only brings in lines newer than the last one. This is the flood reported in #122. - API: a dead binder is logged as
linkToDeath failedinstead of as a second attach. - Theme: the theme is re-applied when the resolved night state changes, so a Light to Follow System switch no longer leaves stale bar colours until the process restarts.
- Bug report dialog: opens the repository's issue chooser with nothing pre-filled.
Translations
Several Crowdin updates: Italian, Romanian, Chinese (Simplified and Traditional) and others.
Notes
- The boot-before-unlock path is measured on one device; whether the hotspot and TLS handshake work before unlock depends on the ROM.
- A hidden copy has a new package and a new adb key, so it must be paired again after the rename. The app's tutorial already says this.
- Turning wireless debugging off when Shizuku stops is still ignored in the no-network mode; that half of #127 is not in this release.
- The repackaged-APK save crash in #138 did not reproduce during testing; the guards and logging above are what a failing device will now report.