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 界面信息和截图
  • 实现自动化测试或远程调试

这是一种轻量、灵活的安卓自动化解决方案。