怎么用脚本控制安卓设备

wen 实用脚本 2

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

怎么用脚本控制安卓设备

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

使用建议

  1. 安装依赖
    # 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

需要针对某种方案更详细的示例吗?

抱歉,评论功能暂时关闭!