Appium Android Bridge
/install appium-android-adb
Appium Android Bridge
Generic Appium bridge for any Android app. Reads screens as structured JSON, executes taps/scrolling/typing via accessibility service clicks (bypasses WebView touch filtering).
Quick Start
# Once per session (28s, starts Appium + daemon):
bash ~/.openclaw/workspace/skills/appium-android-adb/start_bridge.sh
# Then every action (~1-2s each):
python3 ~/.openclaw/workspace/skills/appium-android-adb/bridge_daemon.py dump
python3 ~/.openclaw/workspace/skills/appium-android-adb/bridge_daemon.py tap '{"text": "查询"}'
python3 ~/.openclaw/workspace/skills/appium-android-adb/bridge_daemon.py scroll '{"direction": "down"}'
Commands
All from ~/.openclaw/workspace/skills/appium-android-adb/. All return JSON.
dump — read the screen
python3 bridge_daemon.py dump
Returns:
{
"ok": true,
"package": "com.example.app",
"activity": "...",
"title": "...",
"alerts": [{"text": "温馨提示"}],
"buttons": [{"text": "查询", "id": "btn_search", "bounds": "[99,750][981,882]"}],
"trains": [{"text": "...", "bounds": "...", "clickable": true}],
"webview_contexts": ["NATIVE_APP"]
}
buttons[]— all clickable elements with text, id, boundsalerts[]— dialogs/popups needing dismissaltrains[]— elements containing "次列车" (app-agnostic; rename for other apps)title— page title if present
tap — click an element
python3 bridge_daemon.py tap '{"text": "查询车票"}' # by text (substring match)
python3 bridge_daemon.py tap '{"text": "预订", "index": 0}' # first match
python3 bridge_daemon.py tap '{"id": "btn_submit"}' # by resource-id
scroll — swipe the screen
python3 bridge_daemon.py scroll '{"direction": "down"}' # normal
python3 bridge_daemon.py scroll '{"direction": "down", "distance": "short"}' # fine
python3 bridge_daemon.py scroll '{"direction": "up"}' # go back
Uses fast drag (100ms) — works best for WebView content.
type — input text
python3 bridge_daemon.py type '{"text": "上海"}'
wait — poll until element appears
python3 bridge_daemon.py wait '{"text": "提交订单", "timeout": 30}'
When to Use This
Use appium-android-adb when:
- The app uses WebView (ADB taps are ignored)
- You need structured screen reading (not screenshot-based)
- You need reliable element clicking (accessibility service, not raw touch)
- You're automating a hybrid app (native + WebView)
Do NOT use for:
- Simple native-only apps where
adb shell input tapworks fine - One-off screenshots (use
adb shell screencap)
Troubleshooting
Daemon died: Run start_bridge.sh again to restart.
Device not found: Check USB connection: adb devices
App not launching: The daemon attaches to the running app. Cold-start the app manually if needed: adb shell monkey -p \x3Cpackage> 1
- Make sure OpenClaw is installed (local or Docker)
- Run the install command in chat:
/install appium-android-adb - After installation, invoke the skill by name or use
/appium-android-adb - Provide required inputs per the skill's parameter spec and get structured output
What is Appium Android Bridge?
Read and control any Android app via Appium. Provides a persistent bridge daemon (bridge_daemon.py) with dump/tap/scroll/type/wait commands. Use when raw ADB... It is an AI Agent Skill for Claude Code / OpenClaw, with 59 downloads so far.
How do I install Appium Android Bridge?
Run "/install appium-android-adb" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.
Is Appium Android Bridge free?
Yes, Appium Android Bridge is completely free, licensed under MIT-0. You can download, install and use it at no cost.
Which platforms does Appium Android Bridge support?
Appium Android Bridge is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).
Who created Appium Android Bridge?
It is built and maintained by openlittlebear (@openlittlebear); the current version is v1.0.0.