我来介绍几种用脚本控制安卓设备的方法,从简单到复杂:

ADB (Android Debug Bridge) 命令行脚本
这是最基础也最灵活的方式:
#!/bin/bash # 示例:通过ADB控制设备 # 点击屏幕 adb shell input tap 500 1000 # 滑动 adb shell input swipe 500 1500 500 300 # 输入文字 adb shell input text "Hello World" # 模拟按键 adb shell input keyevent KEYCODE_HOME # 主页键 adb shell input keyevent KEYCODE_BACK # 返回键 # 打开应用 adb shell am start -n com.package.name/.MainActivity # 截图 adb shell screencap /sdcard/screen.png adb pull /sdcard/screen.png # 获取当前Activity adb shell dumpsys activity activities | grep mResumedActivity
Python + uiautomator2
适合需要UI控件操作的场景:
import uiautomator2 as u2
# 连接设备
d = u2.connect() # 或 USB连接: u2.connect('device_serial')
# 点击
d.click(500, 1000)
d(text="确定").click() # 通过文本定位
# 滑动
d.swipe_ext("up", duration=0.5)
# 输入
d.send_keys("text")
# 等待控件出现
d(text="开始").wait(timeout=10)
# 查找控件
d(text="设置").exists()
# 获取界面信息
print(d.dump_hierarchy()) # 打印UI结构
Appium (WebDriver协议)
适合移动端自动化测试:
from appium import webdriver
desired_caps = {
'platformName': 'Android',
'deviceName': 'Android设备',
'appPackage': 'com.example.app',
'appActivity': '.MainActivity'
}
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
# 点击操作
driver.find_element_by_id("button_id").click()
# 输入文本
driver.find_element_by_id("input_id").send_keys("test")
# 滑动
driver.swipe(500, 1500, 500, 300, 500)
Shell 脚本 + 豌豆荚/蘑菇街等工具
简单设备操作:
#!/bin/bash # 使用adb命令实现基本控制 DEVICE_ID="emulator-5554" # 开关屏幕 adb -s $DEVICE_ID shell input keyevent 26 # 解锁 adb -s $DEVICE_ID shell wm dismiss-keyguard # 设置屏幕分辨率 adb -s $DEVICE_ID shell wm size 1080x1920
Node.js + WebDriverIO
const { remote } = require('webdriverio');
async function controlAndroid() {
let driver = await remote({
capabilities: {
platformName: 'Android',
'appium:deviceName': 'Android设备',
'appium:app': '/path/to/app.apk'
}
});
// 点击元素
await driver.$('~element_id').click();
// 输入文本
await driver.$('~input_field').addValue('Hello');
// 等待元素
await driver.$('~confirm').waitForDisplayed({ timeout: 5000 });
await driver.deleteSession();
}
Android 内置 shell 脚本
直接在设备上运行:
# 在设备上创建并运行shell脚本
#!/system/bin/sh
# 模拟点击
input tap 500 1000
# 循环操作
for i in 1 2 3 4 5; do
input tap 100 $((500 + i * 50))
sleep 1
done
# 启动服务
am startservice com.example/.MyService
使用建议
- 安装依赖:
# Python环境 pip install uiautomator2 pip install appium-python-client
Node.js
npm install -g appium
2. **必备工具**:
- ADB工具(Android SDK Platform-Tools)
- USB调试权限
- 模拟器或真机
3. **调试技巧**:
```bash
# 查看UI层级
uiautomator dump
# 实时查看设备屏幕
scrcpy
# 查看设备日志
adb logcat
场景示例
自动化测试脚本:
# 自动测试APP启动流程
import uiautomator2 as u2
def test_app():
d = u2.connect()
# 启动APP
d.app_start("com.example.app")
# 等待加载
d(text="登录").wait(timeout=10)
# 输入用户名和密码
d(resourceId="com.example.app:id/username").set_text("testuser")
d(resourceId="com.example.app:id/password").set_text("123456")
# 点击登录
d(text="登录").click()
# 验证登录成功
assert d(text="欢迎").exists()
选择哪种方式取决于你的具体需求:
- 简单操作:ADB命令就是最合适的
- UI自动化:uiautomator2或Appium
- 跨平台测试:Appium
- 快速的设备控制:Python + ADB
需要针对某种方案更详细的示例吗?