Tencent CVP — Cloud Virtual Phone Automation
name: tencent-cvp
by cobeizailin · published 2026-03-22
$ claw add gh:cobeizailin/cobeizailin-tencent-cvp---
name: tencent-cvp
description: "All-in-one Android phone automation via ADB: screen analysis, touch/input, foreground app detection, app install. Use for any task that involves operating the Android device."
metadata:
{
"openclaw":
{
"emoji": "🤖",
"os": ["linux", "darwin"],
"requires": { "bins": ["adb"] },
},
}
---
# Tencent CVP — Cloud Virtual Phone Automation
Operate the Tencent Cloud Virtual Phone: observe the screen, interact with it, detect apps, and install new ones.
**Core loop: Observe -> Act -> Verify.** Always check the screen before and after actions.
---
1. Screen Analysis
UI Layout Dump (preferred)
Structured XML with every element's text, coordinates, and properties. **Always try this first.**
adb shell uiautomator dump && adb shell cat /sdcard/window_dump.xmlEach XML `node` has:
Compute tap target from bounds: `x = (left + right) / 2`, `y = (top + bottom) / 2`.
Screenshot (fallback only)
Use **only when uiautomator returns empty or partial XML** — common with games, video players, WebView, or custom-rendered surfaces.
adb shell screencap -p /sdcard/screen.png && adb pull /sdcard/screen.png /tmp/screen.pngThen read `/tmp/screen.png` for visual analysis.
Tips
---
2. Input and Interaction
Touch
# Tap
adb shell input tap <x> <y>
# Long press (~1s)
adb shell input swipe <x> <y> <x> <y> 1000
# Swipe
adb shell input swipe <x1> <y1> <x2> <y2> <duration_ms>Text Input
# ASCII only
adb shell input text "hello"**CJK / Non-ASCII** — `input text` does not support Chinese. Use clipboard:
adb shell am broadcast -a clipper.set -e text "中文内容"
adb shell input keyevent KEYCODE_PASTEKey Events
adb shell input keyevent KEYCODE_HOME
adb shell input keyevent KEYCODE_BACK
adb shell input keyevent KEYCODE_ENTER
adb shell input keyevent KEYCODE_WAKEUP
adb shell input keyevent KEYCODE_POWER
adb shell input keyevent KEYCODE_APP_SWITCH
adb shell input keyevent KEYCODE_VOLUME_UP
adb shell input keyevent KEYCODE_VOLUME_DOWNLaunch Apps
# By package + activity
adb shell am start -n <package>/<activity>
# By intent (open URL)
adb shell am start -a android.intent.action.VIEW -d "https://example.com"
# From launcher (package only)
adb shell monkey -p <package> -c android.intent.category.LAUNCHER 1---
3. Foreground App Detection
adb shell dumpsys window | grep mCurrentFocus | grep -v nullOutput example:
mCurrentFocus=Window{abcdef0 u0 com.tencent.mm/com.tencent.mm.ui.LauncherUI}**Output may be empty** — this happens when:
When empty: wake screen (`KEYCODE_WAKEUP`), wait, retry. If still empty, use uiautomator dump.
Common Package Names
| App | Package |
|-----|---------|
| Home/Launcher | `com.android.launcher` or vendor variant |
| Settings | `com.android.settings` |
| Chrome | `com.android.chrome` |
| WeChat | `com.tencent.mm` |
| Alipay | `com.eg.android.AlipayGphone` |
| Douyin | `com.ss.android.ugc.aweme` |
| Bilibili | `tv.danmaku.bili` |
---
4. App Install
**Priority: MyApp (应用宝) first**, then browser, then web search.
Via MyApp (应用宝)
adb shell am start -a android.intent.action.VIEW -d "market://details?id=<package_name>" -p com.tencent.android.qqdownloaderExamples:
# WeChat
adb shell am start -a android.intent.action.VIEW -d "market://details?id=com.tencent.mm" -p com.tencent.android.qqdownloader
# Alipay
adb shell am start -a android.intent.action.VIEW -d "market://details?id=com.eg.android.AlipayGphone" -p com.tencent.android.qqdownloaderAfter opening:
1. Use uiautomator dump to verify the page loaded
2. Find and tap the install/download button
3. Wait for install, then verify
Finding Package Names
If unknown, search the web for `<app name> android package name`. Common pattern: reverse domain (`com.company.appname`).
When MyApp Fails
More tools from the same signal band
Order food/drinks (点餐) on an Android device paired as an OpenClaw node. Uses in-app menu and cart; add goods, view cart, submit order (demo, no real payment).
Sign plugins, rotate agent credentials without losing identity, and publicly attest to plugin behavior with verifiable claims and authenticated transfers.
The philosophical layer for AI agents. Maps behavior to Spinoza's 48 affects, calculates persistence scores, and generates geometric self-reports. Give your...