日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > 第1章3節《MonkeyRunner源碼剖析》概述:架構(原創)

第1章3節《MonkeyRunner源碼剖析》概述:架構(原創)

來源:程序員人生   發布時間:2015-04-08 08:59:21 閱讀次數:4315次

天地會珠海分舵注:本來這1系列是準備出1本書的,詳情請見早前博文“尋求合作火伴編寫《深入理解 MonkeyRunner》書籍“。但由于諸多緣由,沒有如愿。所以這里把草稿分享出來,所以毛病在所難免。有需要的就參考下吧,轉發的話還請保存每篇文章結尾的出處等信息。

原理架構


MonkeyRunner使用起來非常的簡單,只需要導入以下幾個類基本上就可以滿足測試腳本編寫的需求,比如:

  • monkeyrunner.jar庫的MonkeyRunner
  • monkeyrunner.jar庫的MonkeyDevice
  • monkeyrunner.jar庫的MonkeyImage

如果你想使用MonkeyRunner的控件相干的功能來讓自己的代碼可擴大性和可移植性更好,那末你也只需額外用上下面幾個類就基本上能滿足你的要求了:

  • chimpchat.jar庫的:HierarchyViewer
  • hierarchyviewerlib.jar庫的:ViewNode

如果你還想更簡單的使用控件相干的功能,MonkeyRunner一樣也能夠滿足你,只要你導入以下的類就能夠使用EasyMonkeyDevice來調用其封裝好的易用的API:

  • monkeyrunner.jar庫的easy模塊: EasyMonkeyDevice
  • monkeyrunner.jar庫的easy模塊: By

所以從腳本的角度來看,使用MonkeyRunner可以簡單的理解成把需要的類給整合起來,然后通過代碼把相應的業務邏輯通過各個類提供的方法給實現出來。?
這里寫圖片描述

但從MonkeyRunner實現的角度來看,事實并沒有這么簡單,為了滿足MonkeyRunner腳本需要的功能,全部框架里面會使用到不同的庫和不同的模塊,乃至會驅動Android機器真個不同模塊與服務來做事情。我們先看下MonkeyRunner的全部架構圖:
這里寫圖片描述

MonkeyRunner是1個CS(客戶端-服務器)架構的框架,主要的代碼控制邏輯是在PC端作為客戶端來運行的;但客戶端需要驅動運行在目標Android系統的服務器端來做事情,比如驅動Monkey服務去調用對應的Android服務去注入事件以實現點擊等操作功能。服務器端和客戶真個通訊是通過Socket來實現的,而Socket又分為基于USB通訊協議和TCP通訊協議的,也就是說用戶既可以通過 USB線直接連接主機和Android目標機器;也能夠通過網絡使用TCP協議來連接主機和 Android目標機器(使用命令:adb connect IP)。但注意客戶端其實不會直接連接Android目標裝備端中各個服務正在監聽的端口,而是連接主機端和該端口對應的轉發端口,只要連接上轉發端口,所有發向該端口的數據都會直接轉發給Android目標機器端對應的服務監聽的端口。

從上圖可以看到,MonkeyRunner腳本的實現需要多個庫的支持,經常使用的有以下這幾個:

  • monkeyrunner庫:MonkeyRunner最主要的庫,腳本可以直接使用里面的MonkeyRunner,MonkeyDevice,MonkeyImage類來控制Android目標裝備和利用和截圖等功能
  • chimpchat庫:monkeyrunner庫的很多功能都是通過調用chimpchat庫相應的類來實現的,比如調用MonkeyDevice類的安裝利用包installPackage方法會直接調用到到chimpchat庫的對應類AdbChimpDevice的installPackage方法,然后該方法再會調用ddmlib的對應方法來通過Socket往ADB服務器發送命令,然后ADB服務器會驅動Android目標機器真個adbd這個守護進程來實現安裝利用包的要求。所以chimpchat對使用ADB進行通訊的進程來講,相當于MonkeyRunner和ddmlib之間的代理中間層。但對使用Monkey進行通訊的時候,chimpchat其實不需要通過ddmlib來驅動Android目標機器的monkey服務,而是chimpchat自己來完成socket建立和命令發送的功能
  • ddmlib庫:在MonkeyRunner框架中,ddmlib主要是幫忙處理跟ADB服務器通訊的事宜
  • hierarchyviewerlib庫:當MonkeyRunner腳本需要用到控件相干的功能的時候就會使用到這個庫來建立控件樹和獲得指定控件的相干屬性

往下1層我們可以看到,MonkeyRunner跟Android目標機器進行通訊根據需要做的事情不同而會驅動3種不同的服務去處理要求:

  • ADB服務:主要是處理非界面操作的相干要求,比如安裝利用包等
  • monkey服務:主要是處理界面操作相干的要求,比如點擊指定坐標等
  • ViewServer服務:主要是處理控件相干的要求,比如獲得當前界面所有控件信息等

這里要注意的是MonkeyRunner框架其實不會直接連接adbd這個Android目標機器的守護進程來驅動其做事情,而是先和ADB服務器這個PC真個守護進程進行通訊,然后再由ADB服務器來驅動adbd來完成要求的。至于ADB服務器,ADB守護進程,ADB協議和ADB命令行客戶端等概念,第4章”ADB協議及服務“會詳述。

最下面1層就是Android系統的核心服務了。MonkeyRunner的很多要求都是需要調用到Android的系統服務來完成的。比如點擊1個控件就需要通過monkey服務來調用Android系統的InputManagerService來注入按鍵事件來實現點擊要求。


作者:天地會珠海分舵
微信公眾號:TechGoGoGo
微博:http://weibo.com/techgogogo
CSDN:http://blog.csdn.net/zhubaitian

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 日韩精品一区二区三区电影在线看 | 日韩精品第一 | 亚洲日韩视频 | 国产一区二区中文字幕 | 国产精品久久久久久久久久 | 日韩一页 | 一区三区视频 | 美女视频黄的免费的 | 精品视频免费观看 | 国产在线视频网 | 成人福利一区 | 国产女性无套免费网站 | 成人av免费在线看 | 国产一区二区三区手机在线 | 成人午夜毛片 | 亚洲国产aⅴ成人精品无吗 aaaa毛片 | 国产在线一区不卡 | 1024成人网色www | 亚洲jizzjizz日本少妇 | v天堂福利视频在线观看 | 成人中文视频 | а天堂中文最新一区二区三区 | 国产精品一区二区三区在线免费观看 | 国产乱码一区二区三区 | sese综合 | 欧美一区| 91久久久一线二线三线品牌 | 久久婷婷国产麻豆91天堂徐州 | 国产专区在线播放 | 亚洲a v网站| 99在线精品视频 | 国产伦精品一区二区三区免费 | 亚洲精品人人 | 久久九九99 | 国产精品一区二区av日韩在线 | 国产福利91精品一区二区三区 | 高清久久 | 激情五月激情综合网 | 亚洲欧洲综合 | 亚洲欧美韩国 | 国产一级片在线 |