v13.6.0.r2129 — Android 17 (SDK 37) Support
This release makes Shizuku+ work on Android 17 and hardens wireless-debugging discovery on Android 16. Two independent OS changes broke Shizuku on the latest Android; both are now handled.
⚠️ Calling all Android 16/17 testers. These fixes are verified to compile and pass lint in CI, but on-device confirmation for A17 can only come from people running it. If you're on a Pixel 9a canary/stable or any Android 16+ device, please update and report back on #317 / #323.
🤖 What broke on Android 17 — and what's fixed
1. "No authorized apps show up / permission grants fail" — hidden-API deviceId change
Android 17 inserted a new deviceId parameter into the core package- and permission-manager methods Shizuku relies on (getPackageInfo, getApplicationInfo, checkPermission, grantRuntimePermission, revokeRuntimePermission), and changed the return type of getInstalledPackages. The hidden-API library Shizuku builds against compiles the pre-17 signatures, so on Android 17 every one of those privileged calls threw NoSuchMethodError — which is why the authorized-apps list came up empty and granting permissions silently failed.
Fix: new compatibility shims (Android17Compat, InstalledPackagesCompat) that call the normal path first and, on Android 17, fall back to the new method signature (splicing in deviceId = 0) via reflection. Works transparently across Android 7 → 17.
2. "Service starts but never connects / stays STOPPED" — Local Network Protection
Android 16+ gates mDNS discovery of the wireless-debugging service — and the loopback socket that pairing/connect use — behind new permissions. Without them, the service can start on the ADB side but the manager never finds it, so it silently stays STOPPED (often with a resolved port of -1).
Fix: Shizuku+ now requests the appropriate local-network permission before pairing/starting — ACCESS_LOCAL_NETWORK on Android 17, NEARBY_WIFI_DEVICES on Android 16 — with a tiered helper that picks the right one for your OS version.
3. More reliable wireless pairing host resolution
The mDNS resolver now surfaces a normalized resolvedHost, and the two wireless-pairing connect paths use it instead of assuming a fixed address. Loopback stays byte-identical (127.0.0.1); only a genuine non-loopback local-interface address is substituted when that's what discovery returns.
🙏 Credits
- The Android 17 compatibility approach — the hidden-API
deviceIdreflection and Local Network Protection handling — originates with kerneldroid's Nightzuku fork, was ported and verified on a physical Android 17 device by LandonMoran into thedjchi's fork, and is adapted here from that lineage. Thank you all. - Thanks to @aragortsantiago6-beep and @Scoop2389 (Pixel 9a, Android 17) and @ConversionRituals (Xiaomi, Android 16) for the crash reports and logs that pinned down the root causes.
🔎 Technical notes
- Commit
c138d0e0(main) +03bacbc(ShizukuPlus-API submodule). - The two compat shims live in the
:commonmodule — the one module the manager, server, and server-shared all depend on — so a single copy covers every call site (~30 across 8 files). Seeaf.shizuku.common.compat.Android17Compat/InstalledPackagesCompat. - Scope mirrors thedjchi's fork:
getInstalledPackagesroutes throughInstalledPackagesCompateverywhere; thedeviceId-affected package/permission calls route throughAndroid17Compatin the privileged server.getPackagesForUidis not A17-affected and is unchanged. - Two follow-ups were reviewed and deliberately deferred (tracked in #339 stealth-mode and #340 manager-resolution), to keep this release focused on A17 reliability.
🐛 Bug Fixes
- Android 17 support — local-network permissions, hidden-API compat shims, and mDNS-resolved pairing host (
c138d0e0).
📦 Recent Releases
📣 You're viewing an older release. Here are the current builds — update for the latest fixes:
🚀 Most recent major release — v13.6.0.r2603
App Backup overhaul: search/filter the app list by name or package, back up all apps at once with a single menu tap, toggle system-app visibility, and restore external data directly from any backup file (external.tar.gz). Each row now shows the app version name and a 'no-backup' badge when android:allowBackup=false, matching what Swift Backup and Neo Backup display. The SAF export directory is surfaced in the home card summary and in the completion Snackbar. After restoring ShizukuPlus settings a persistent Snackbar offers an immediate restart so theme/language changes apply without manually force-stopping the app.
🏛️ Major release of this build's era — v13.6.0.r2129 (this release) — Android 17 (SDK 37) support
⚠️ Most recent critical fix — v13.6.0.r2590
Fixed Settings import/export silently reading/writing the wrong storage file on Android 7+ (exports were empty; imports had no effect). Fixed Feature Hub crash (ClassCastException) caused by migrateAutomationTrustedNetworks reading the wrong SharedPreferences file. Fixed AutomationService double-firing network firewall rule, not starting the app monitor for auto-hide-only users, and not restarting correctly at boot on API 24-25. Fixed WatchdogService clearing watchdog setting on transient foreground-start rejections.
| Release | Highlight |
|---|---|
| v13.6.0.r2602 (latest) | backup: add search filter to app backup list |
| v13.6.0.r2601 | backup: add Backup All batch operation |
| v13.6.0.r2600 | backup: show version name and allowBackup=false badge in app list |
| v13.6.0.r2598 | Show restart Snackbar after settings restore |
| v13.6.0.r2597 | backup: show configured export dir in App Backup home card summary |