ADB Modules Guide
July 6, 2026 · View on GitHub
This guide is for module authors and testers. For the exact API contract, see ADB Modules API reference.
What This System Is
ADB Modules are ZIP packages installed into Shizuku private storage and executed through the active Shizuku server.
- ADB-started Shizuku: scripts run with ADB shell privileges.
- Root-started Shizuku: scripts run with root privileges.
- Safe mode: manual actions only.
- Full access: allows stronger module behavior.
- Background actions: required before
service.shcan run.
This is a real module runner, not a visual stub. It installs ZIPs, parses metadata, stores module files, runs shell scripts through Shizuku, opens local WebUI, tracks enabled state, deletes modules, and writes last-run logs.
It is not a Magisk/KSU systemless overlay implementation. There are no mount hooks,
no /data/adb/modules compatibility promise, and no long-running daemon supervisor yet.
Minimal Module
Create this structure:
my-module/
├── module.prop
├── action.sh
└── webui/
└── index.html
module.prop:
id=my-module
name=My Module
version=1.0
versionCode=1
author=Author
description=Short module description
action.sh:
#!/system/bin/sh
echo "module=$SHIZUKU_MODULE_ID"
echo "mode=$SHIZUKU_MODULE_MODE"
id
Package it:
cd my-module
zip -r ../my-module.zip .
Install my-module.zip from the ADB Modules screen.
Optional Files
Banner:
banner.png
WebUI:
webui/index.html
Background/service hook:
service.sh
Custom paths can be declared in module.prop:
banner=assets/banner.webp
webui=webui
usesShellBridge=true
action=scripts/action.sh
usesShellBridge=true is mandatory for WebUI pages that need window.Shizuku.
Script Environment
Scripts run from the module directory. Use these variables:
MODDIR=/data/user/0/<package>/files/adb_modules/<id>
ASH_STANDALONE=1
SHIZUKU_MODULE_ID=<id>
SHIZUKU_MODULE_MODE=safe|custom|full
SHIZUKU_MODULE_TRUSTED=0|1
SHIZUKU_MODULE_BACKGROUND=0|1
Do not hardcode Magisk/KSU paths. Use $MODDIR.
Action vs Service
Use action.sh for a user-triggered command.
Use service.sh for controlled background setup. It runs only when:
- the module is enabled;
- access mode is Full, or Custom with Service enabled;
- background actions are enabled;
- Shizuku binder is available.
The manager auto-runs enabled services once per Shizuku binder session. Manual Service button execution uses the same policy.
Full Trust
Full Trust is a per-module override for modules you explicitly trust. Long-press a module card to reveal Trust. Long-press again to hide the action. After trusting, the module gets a Full Trust chip. Long-press the trusted module to reveal Untrust.
Trusted modules bypass the global Action, Service, background, WebUI bridge,
WebView internet, WebUI download, usesShellBridge=true, and ReCommand gates.
Core safety limits such as path traversal rejection, process timeouts, output
caps, and download size caps still apply.
ReCommand and AI Checker
ReCommand can show a confirmation dialog before WebUI shell execution and Action execution. The dialog uses icon-only expand/collapse and copy controls, and the expand/collapse control is shown only for long commands.
The optional Gemini checker is hidden by default. In Settings, tap the translation contributors row five times quickly to reveal the AI settings row and the Gemini star in ReCommand dialogs. Repeat the same five-tap gesture to hide it again. The Gemini API key is stored encrypted with Android Keystore.
Safety Limits
- ZIP path traversal is rejected.
- Max entries:
2048. - Max extracted size:
200 MB. - Script timeout:
120 seconds. - Output retained: last
64 KBper stdout/stderr stream.
Timeout exit code is 124.
Logs
Logs are written inside the installed module directory:
logs/action-last.log
logs/service-last.log
Each log includes module id, script name, exit code, access mode, stdout, and stderr.
Use it to verify install, enable/disable, Action, Service, WebUI, and banner rendering.