这里分享外网一篇文章,对 Appium UiAutomator2 Server 的工作原理作了很详细的介绍
简单概括一下:
ps. 我们都知道 appium 只有在 uiautomator2 下可以实现对 toast 的识别,那是因为 Google 新增了 AccessibilityService 服务,重写该服务可以实现对 Notification 和 Toast 内容的捕捉
appium-uiautomator2-server
- 通信模块使用了 Netty Server,较之 bootstrap 使用的 ServerSocket,Netty 是一个高性能、异步驱动的 NIO 框架,占用内存少,性能更好。
运行原理
- 客户端通过传递 desired capabilities 给 appium node server 来创建一个 session, appium server 根据automationName去启动对应的 driver,默认是 android-driver。
- 若automationName设为UIAutomator2,appium 会调用appium-uiautomator2-driver,同时将 uiautomator2 server 的两个 apk 安装到测试设备上
- appium-uiautomator2-server-vx.x.x.APK,执行 handlers
- appium-uiautomator2-server-debug-androidTest.apk,只有一个test,用于启动 server
- AppiumServlet ,管理请求的路由,将 driver 发过来的请求转发给对应 Handler.
- Handler,调用 UiAutomator V2 去执行指定操作,操作的结果经 AppiumResponse 统一封装
- AppiumResponse,操作结果返回给 appium-uiautomator2-driver,再将结果返给客户端