Android UIAutomator Stub 服务使用完整教程
1. 源码获取
UIAutomator Stub 是一个基于 Android UIAutomator 框架的测试服务,提供 JSON-RPC 接口以便远程操作和获取界面信息。
从 GitHub 上克隆对应源码仓库:
git clone https://github.com/openatx/android-uiautomator-server.git
cd android-uiautomator-server.git
2. 环境准备
- Android SDK(含 platform-tools)
- Java JDK 17 (不改全局环境:下载 https://adoptium.net/temurin/releases/?version=17压缩包, org.gradle.java.home下org.gradle.java.home=C:\\Program Files\\Java\\jdk-17)
- Gradle 或 Android Studio
- 目标设备(真机或模拟器),确保已启用开发者模式并连接 USB
3. 编译 APK
进入源码目录后,使用 Gradle 编译 APK:
./gradlew assembleDebug
编译成功后,APK 位于:
app/build/outputs/apk/debug/app-debug.apk
4. 安装 APK 到设备
使用 adb 安装编译好的 APK:
adb install -r app/build/outputs/apk/debug/app-debug.apk
5. 端口转发
将设备上的服务端口转发到本地端口:
adb forward tcp:9008 tcp:9008
这样你可以直接通过 localhost:9008
访问设备上的服务。
6. 启动 UIAutomator Stub 服务
通过 adb 启动 Instrumentation 测试服务:
adb shell am instrument -w -r -e debug false -e class com.github.uiautomator.stub.Stub com.github.uiautomator.test/androidx.test.runner.AndroidJUnitRunner
启动后,服务会监听 9008 端口,等待接收 JSON-RPC 请求。
7. 调用接口示例
通过 curl 或其他 HTTP 工具访问服务,获取当前窗口层级:
curl http://localhost:9008/jsonrpc/0 -X POST -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"dumpWindowHierarchy","params":{"maxDepth":10}}'
返回示例:
{
"jsonrpc": "2.0",
"id": 1,
"result": "<hierarchy>...</hierarchy>"
}
8. 快速截图
你可以调用截图接口,保存截图到设备,或者返回 Base64 图片数据。
截图保存到设备:
curl http://localhost:9008/jsonrpc/0 -X POST -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":2,"method":"takeScreenshot","params":{"filename":"screenshot.png","scale":1.0,"quality":100}}'
截图会保存在设备内部存储目录。
直接获取 Base64 截图:
curl http://localhost:9008/jsonrpc/0 -X POST -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":3,"method":"takeScreenshot","params":{"scale":1.0,"quality":100}}'
返回 Base64 编码的 JPEG 图片数据,你可以用工具解码保存为图片。
9. 停止服务
由于服务是通过 Instrumentation 运行的,直接在终端按 Ctrl+C
停止命令即可停止服务。
如果 adb 断开或设备重启,服务也会停止。
10. 扩展
你可以在客户端对 UI 界面做更多操作,比如:
- 自动点击、滑动
- 获取特定元素属性
- 输入文本
- 执行复杂 UI 测试脚本
所有这些功能都可基于该 JSON-RPC 服务二次开发。
总结
通过上述步骤,你可以:
- 编译并部署 UIAutomator Stub 到设备
- 远程调用 JSON-RPC 接口获取 UI 界面信息和截图
- 实现自动化测试或远程调试
这是一种轻量、灵活的安卓自动化解决方案。
本文作者: 永生
本文链接: https://yys.zone/detail/?id=425
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
评论列表 (0 条评论)