python uiautomator 源码学习(三) josonRPCServer-DUT Side

来源:互联网 发布:淘宝客服外包 编辑:程序博客网 时间:2024/05/19 10:35

python uiautomator 源码学习(三) josonRPCServer-DUT Side
官网: https://github.com/xiaocong/uiautomator

前言

上两篇介绍了host端的源码,及使用,后面主要介绍DUT 端。 由于DUT 端的JsonRPCServer 是java写的,博主这部分不是太熟悉,而且对HTTPServer的启动原理也不太熟悉,所以这里只能是探索性学习。会不断学习与更新。
言归正传。JsonRPCServer. 要在DUT上启用JsonRPCServer 需要三步:
1. push files.

$ adb push uiautomator-stub.jar /data/local/$ adb push bundle.jar /data/local/
  1. 启用server
$ adb shell uiautomator runtest  uiautomator-stub.jar bundle.jar -c com.github.uiautomatorstub.Stub

#由于这个server是长时间挂起,所以需要手动Ctrl+C 退出。 并不是出问题了
3. 绑定tcp port

$ adb forward tcp:9008 tcp:9008 # tcp forward

有经验的朋友一眼就可以看出:
1. server是用uiautomator 为启动器,长期挂起。
2. main class :com.github.uiautomatorstub.Stub
3. Server 是绑定与Android 的 9008 port。

获取源码

Download from: https://github.com/xiaocong/android-uiautomator-jsonrpcserver/releases

源码结构

├── ant.properties├── build.xml├── custom_rules.xml├── libs│   ├── jackson-annotations-2.2.2.jar│   ├── jackson-core-2.2.2.jar│   ├── jackson-databind-2.2.2.jar│   ├── jsonrpc4j-0.28.jar│   ├── portlet-api-2.0.jar│   └── servlet-api-2.5.jar├── LICENSE├── local.properties├── nanohttpd├── project.properties├── README.md└── src    └── com        └── github            └── uiautomatorstub                ├── AutomatorHttpServer.java                ├── AutomatorServiceImpl.java                ├── AutomatorService.java                ├── ConfiguratorInfo.java                ├── DeviceInfo.java                ├── Log.java                ├── NotImplementedException.java                ├── ObjInfo.java                ├── Point.java                ├── Rect.java                ├── Selector.java                ├── Stub.java                └── watcher                    ├── ClickUiObjectWatcher.java                    ├── PressKeysWatcher.java                    └── SelectorWatcher.java

流程

Server启动流程

Main Class

  1. Stub.java
    public class Stub extends UiAutomatorTestCase()
    • Uiautomator test case. 只写了setup和teardown
    • setUp() 启动jsonRPCServer
    • tearDown
  2. AutomatorHttpServer.java
    public class AutomatorHttpServer extends NanoHTTPD
    • NanoHTTPD 轻量级server 架构
    • def route 为了加载 map router = {uri:JsonRPCServer }
    • 重写Response server。 handler, 根据uri、method、headers、params、files 分别response
  3. AutomatorServiceImpl.java
    public class AutomatorServiceImpl implements AutomatorService
    • implements AutomatorService, 作为user service 加载进RPC Server
    • RPC server 所有methods 定义,methods factory
  4. AutomatorService.java
    public interface AutomatorService
    • user service 接口类
    • 跟com.googlecode.jsonrpc4j.JsonRpcService 一样,可用于JsonRPCServer user service。
  5. ConfiguratorInfo.java,DeviceInfo.java,ObjInfo.java,Point.java,Selector.java
    • 底层,供AutomatorServiceImpl调用实现

Dependences:

  • nanohttpd
    可以参考博客: http://blog.csdn.net/mrtitan/article/details/24332429
  • jsonrpc4j or github
0 0
原创粉丝点击