蔡方達(dá)
(1.上海微系統(tǒng)與信息技術(shù)研究所 上海200050;2.上海科技大學(xué) 信息學(xué)院,上海201210)
面向安卓模擬器的自動(dòng)化交互的設(shè)計(jì)與實(shí)現(xiàn)
蔡方達(dá)1,2
(1.上海微系統(tǒng)與信息技術(shù)研究所 上海200050;2.上海科技大學(xué) 信息學(xué)院,上海201210)
安卓移動(dòng)操作系統(tǒng)目前是普及范圍最廣的移動(dòng)手機(jī)平臺(tái)之一。其獨(dú)特的通過手勢(shì)動(dòng)作來(lái)進(jìn)行人機(jī)交互的方式很大程度上降低了人們使用應(yīng)用軟件的難度。但于此同時(shí),由于界面的變化需要由使用者的手勢(shì)動(dòng)作來(lái)控制,人機(jī)交互實(shí)施的時(shí)間效率并不高。因此,提供一套能通過程序自動(dòng)控制安卓應(yīng)用的技術(shù)尤為有意義。本文提出了一項(xiàng)面向安卓模擬器的自動(dòng)化人機(jī)交互解決方案。該方案基于安卓模擬器的命令行工具技術(shù),設(shè)計(jì)并實(shí)現(xiàn)一套可編程人機(jī)交互控制接口。通過該技術(shù),用戶能更加便捷、自動(dòng)地模擬真實(shí)用戶手勢(shì)的效果,從而提供一種自動(dòng)化地與安卓或移動(dòng)應(yīng)用進(jìn)行界面交互的途經(jīng)。
安卓模擬器;自動(dòng)化;人機(jī)交互;界面控制
Abstract:Android mobile operating system is currently one of the most popular mobile phone platform.The way of human-computer interoperation,that use phones via gestures,largely make it easy to utilize software applications.While at the same time,it consumes much time to process these gestures since the changes of screen user interface are made by gestures of users.Therefore,it is very significant to provide a sort of technology that can automatically process a series of commands to manipulate android applications.This paper presents a solution to automatically operate user interface of android emulator.By leveraging this technology,users will be more convenient and automatically apply effects of gestures from real users to operating user interface.As a result,users now have a way to automatically manipulate android operating system or android applications.
Key words:Android emulator; automation; human-computer interoperation; user interface control
安卓移動(dòng)操作系統(tǒng)目前是普及范圍最廣的移動(dòng)手機(jī)操作系統(tǒng)[1-5]。安卓模擬器是谷歌官方提供的一種應(yīng)用運(yùn)行環(huán)境,該環(huán)境可以部署在用戶的個(gè)人計(jì)算機(jī)中。利用安卓模擬器,用戶即使沒有手機(jī)硬件設(shè)備,也能在模擬器中使用移動(dòng)應(yīng)用程序。但是,在使用應(yīng)用的過程中,用戶仍然需要使用鼠標(biāo)滑動(dòng)、點(diǎn)擊等操作來(lái)使用應(yīng)用,并不能便捷地以一定的順序自動(dòng)執(zhí)行需要一系列手勢(shì)動(dòng)作能帶來(lái)的效果[6]。本文所提出的系統(tǒng),基于安卓模擬器,利用其終端特性,提供了一套編程接口。用戶可以使用所提供的編程接口來(lái)模擬安卓支持的所有手勢(shì)操作效果。
谷歌官方為了使安卓應(yīng)用開發(fā)者能夠方便地在各類安卓版本中測(cè)試應(yīng)用,提供了安卓模擬器。該模擬器,需要通過谷歌官方提供的安卓集成開發(fā)環(huán)境中的安卓虛擬設(shè)備管理器來(lái)創(chuàng)建。該工具可運(yùn)行于通用個(gè)人計(jì)算機(jī)中,對(duì)現(xiàn)有的主流個(gè)人計(jì)算機(jī)操作系統(tǒng),如Windows、Linux、OSX等都提供支持。通過該工具可以設(shè)置所創(chuàng)建安卓模擬器的屏幕大小、所占內(nèi)存大小、閃存大小、安卓鏡像系統(tǒng)版本、所基于的底層抽象二進(jìn)制接口類型等。對(duì)面向英特爾底層二進(jìn)制接口編譯的系統(tǒng),還提供可選的硬件圖像加速功能來(lái)提升性能。
當(dāng)用戶點(diǎn)擊打開創(chuàng)建完成的安卓模擬器,則界面會(huì)顯示基于QEMU模擬器的安卓系統(tǒng)[7-8]。用戶通過鼠標(biāo)的點(diǎn)擊、長(zhǎng)按、不同方向的滑動(dòng)來(lái)模擬用戶手勢(shì)使用系統(tǒng)功能。所支持的功能包括除一部分僅在物理安卓手機(jī)上才存在的傳感器外一切的功能,包括應(yīng)用下載及使用、網(wǎng)絡(luò)訪問及地理位置模擬、系統(tǒng)參數(shù)設(shè)置等。
安卓模擬器的使用者除了能通過鼠標(biāo)操作來(lái)使用外,還能通過安卓集成開發(fā)工具中提供的命令行工具集來(lái)使用模擬器。在所提供的命令行工具集中,各類用于不同目的的命令行工具。舉例來(lái)說,Emulator命令可以以模擬器名字為索引啟動(dòng)或停止指定的安卓模擬器,或者列出當(dāng)前已創(chuàng)建的模擬器及它們當(dāng)前的運(yùn)行狀態(tài)。不僅如此,該命令還能模擬應(yīng)用在真實(shí)的物理?xiàng)l件中的情況,比如可以設(shè)置無(wú)線網(wǎng)絡(luò)時(shí)間延遲、指定GPS位置信息等。
在這些眾多支持的命令行工具中,有一項(xiàng)未在安卓官方文檔中詳細(xì)描述,但事實(shí)存在的命令工具。該工具的名稱是input。通過該工具,用戶可以觸發(fā)一些手勢(shì)動(dòng)作才能有的效果,比如點(diǎn)擊,滑動(dòng),截屏和進(jìn)入主界面快捷鍵等[9-11]。值得注意的是,雖然通過該命令行工具可以僅通過鍵盤命令,不需要鼠標(biāo)操作,來(lái)實(shí)現(xiàn)手勢(shì)效果,但由于每條命令需要手工輸入,因此使用命令行工具的時(shí)間效率仍不及鼠標(biāo)操作。
接口所能提供的功能,應(yīng)當(dāng)能完全模擬用戶能夠做到的所有手勢(shì)[12-13]。因此,接口需要提供的功能需要包括點(diǎn)擊、滑動(dòng)、輸入文字和回到主界面等。
點(diǎn)擊功能細(xì)化。用戶點(diǎn)擊分為兩種,一種為快速點(diǎn)擊屏幕,另一種為長(zhǎng)按屏幕。由于長(zhǎng)按屏幕的時(shí)間難以量化,因此接口需要支持長(zhǎng)按任意時(shí)間的效果。為達(dá)到此目的,點(diǎn)擊功能接口需要支持在屏幕上的任意一點(diǎn),點(diǎn)擊任意時(shí)間長(zhǎng)度。
滑動(dòng)功能細(xì)化。用戶的滑動(dòng)屏幕動(dòng)作,可以抽象為以屏幕中的任意一點(diǎn)作為起點(diǎn),再以屏幕中的任意一點(diǎn)作為終點(diǎn),手指從起點(diǎn)滑動(dòng)到終點(diǎn)。但在實(shí)際的移動(dòng)設(shè)備使用過程中,用戶滑動(dòng)實(shí)際需要達(dá)到的效果通常是從左至右滑動(dòng)、從右至左滑動(dòng)、從上至下滑動(dòng)、從下只上滑動(dòng)。為平衡實(shí)際中的使用情況和理論上可能出現(xiàn)的所有滑動(dòng)情況,滑動(dòng)功能因包括主流的四個(gè)方向上的滑動(dòng)接口,同時(shí)提供從屏幕上任意一點(diǎn)滑動(dòng)至屏幕上另一點(diǎn)的功能。除此以外,在實(shí)際使用過程中,人工的手指滑動(dòng)是需要消耗時(shí)間的,因此對(duì)上述每一種滑動(dòng)策略,都要能設(shè)定動(dòng)作完成時(shí)間。動(dòng)作完成時(shí)間的設(shè)置應(yīng)當(dāng)接受任意值。
文字輸入功能細(xì)化。用戶使用屏幕的一個(gè)可能情況是在可輸入的文本框中輸入內(nèi)容。雖然在界面沒有文本框的情況下,輸入內(nèi)容不會(huì)產(chǎn)生任何效果,但本文認(rèn)為該功能也是十分重要的。這類情況發(fā)生的上下文環(huán)境是,當(dāng)通過點(diǎn)擊功能所提供的接口點(diǎn)擊了屏幕中的輸入框,屏幕的關(guān)注點(diǎn)此時(shí)將變成輸入框。這時(shí)輸入文字的話,這些內(nèi)容就會(huì)出現(xiàn)在文本框中產(chǎn)生意義。也就是說,該功能與點(diǎn)擊功能一同考慮時(shí),便會(huì)產(chǎn)生意義。因此,需要提供輸入文字功能接口,接口的輸入?yún)?shù)僅需為預(yù)期輸入的文本信息即可。
重要快捷鍵功能。部分移動(dòng)設(shè)備中已成為事實(shí)標(biāo)準(zhǔn)的常用的快捷鍵也是不可或缺的功能,應(yīng)當(dāng)被支持。這類功能包括回到主菜單功能、截屏功能、屏幕解鎖功能?;氐街鞑藛谓涌趹?yīng)當(dāng)能在屏幕處在任何條件下時(shí),觸發(fā)該接口屏幕隨即回到主菜單。截屏功能接口應(yīng)當(dāng)能獲取接口調(diào)用時(shí)當(dāng)前屏幕的界面情況,以圖片的形式保存。保存的目錄應(yīng)當(dāng)作為參數(shù)由功能接口的使用者來(lái)提供。屏幕解鎖功能,應(yīng)使得已鎖屏的安卓系統(tǒng)重新回到能夠自由使用的狀態(tài)。并且在已解鎖的情況下,觸發(fā)屏幕解鎖功能不會(huì)帶來(lái)負(fù)面效果。
依照對(duì)應(yīng)實(shí)現(xiàn)功能的細(xì)化分析,相應(yīng)接口的接口簽名及接口之間的依賴關(guān)系可總結(jié),如圖所示。
其中shell()接口接受一條命令行指令,該命令行為具體的一個(gè)手勢(shì)動(dòng)作終端命令。為防止某動(dòng)作持續(xù)過長(zhǎng)仍不結(jié)束,設(shè)置了一項(xiàng)超時(shí)參數(shù)。當(dāng)執(zhí)行時(shí)間超時(shí),則該指令自動(dòng)結(jié)束,之后執(zhí)行下一條指令。
tap()命令代表點(diǎn)擊事件的使用,用戶應(yīng)當(dāng)能通過制定屏幕上的任意位置和點(diǎn)擊事件持續(xù)的時(shí)間來(lái)決定點(diǎn)擊事件的特點(diǎn)。其中點(diǎn)擊位置應(yīng)由某種數(shù)據(jù)數(shù)據(jù)結(jié)構(gòu)來(lái)表示,比如元組數(shù)據(jù)結(jié)構(gòu)。通過指定屏幕中的橫縱坐標(biāo)來(lái)精確地指定屏幕中的位置。
和滑動(dòng)相關(guān)的接口設(shè)計(jì)為5種,它們分別為swipe ()、swipeLeft()、swipeRight()、swipeUp () 和swipeDown()。 Swipe()接口應(yīng)當(dāng)作為一種通用的接口來(lái)實(shí)現(xiàn)。該接口應(yīng)當(dāng)指定滑動(dòng)動(dòng)作的起始點(diǎn)和終止點(diǎn),再附加整個(gè)過程需要消耗的時(shí)間。其中起始點(diǎn)和終止點(diǎn)可以用元組的形式,每個(gè)元組元素用橫縱坐標(biāo)的值來(lái)表示位置。其余的四項(xiàng)的接口,是出于便利起見,基于第一個(gè)通用接口實(shí)現(xiàn)的。額外實(shí)現(xiàn)向左滑動(dòng)、向右滑動(dòng)、向上滑動(dòng)、向下滑動(dòng)的有點(diǎn)在于,這些是最常用的功能。為最常用的功能提供捷徑,可以為加快用戶編寫控制界面腳本帶來(lái)好處。但值得注意的是,每個(gè)動(dòng)作的起點(diǎn)和終點(diǎn),需要通過在實(shí)現(xiàn)的過程中測(cè)試決定。
inputText()、screencap()、goHome()、unlockScreen()分別實(shí)現(xiàn)了一些其他重要的功能。inputText需要接受一段字符串文本作為需要在屏幕關(guān)注點(diǎn)直接顯示的內(nèi)容信息。screencap的調(diào)用不要參數(shù),效果為直接調(diào)用命令行來(lái)實(shí)現(xiàn)截屏。goHome的調(diào)用同樣并不需要參數(shù),只需要通過相應(yīng)命令行來(lái)實(shí)現(xiàn)。unlockScreen也一樣,該接口的調(diào)用不需要參數(shù),通過調(diào)用相應(yīng)命令行來(lái)實(shí)現(xiàn)。
圖1 接口架構(gòu)層次
對(duì)于編程接口的實(shí)現(xiàn),才用了主流腳本語(yǔ)言Python語(yǔ)言來(lái)實(shí)現(xiàn)以上接口[14-15]。各個(gè)接口的實(shí)現(xiàn)模式為,先向接口傳入?yún)?shù),接口實(shí)現(xiàn)中再根據(jù)參數(shù)構(gòu)造命令,再調(diào)用命令行接口講該命令實(shí)施。于是,用戶不需要知道具體的模擬器命令,僅僅通過調(diào)用腳本接口函數(shù),就可以實(shí)現(xiàn)安卓模擬器界面的自動(dòng)化控制。具體的接口簽名如下所示:
在滑動(dòng)接口的實(shí)現(xiàn)中,需要通過試驗(yàn)來(lái)得出的最有效滑動(dòng)參數(shù)。不失一般性,選擇從左至右滑動(dòng)接口作為樣例。首先需要確定的參數(shù)是起點(diǎn)和終點(diǎn)的位置如何確定。在確定這兩個(gè)值的過程中,有兩種解決策略。一種是通過絕對(duì)位置從左端滑動(dòng)到右端。這種方案的好處是,坐標(biāo)點(diǎn)的參數(shù)不要通過計(jì)算得出,可以節(jié)省計(jì)算時(shí)間和功耗。但是,這種方案有重要的缺陷。安卓模擬器可以支持不同的屏幕大小,多樣性是安卓的特點(diǎn)。而如果采用決定定位的方式,則對(duì)不同屏幕需要設(shè)置不同的坐標(biāo)點(diǎn),維護(hù)成本過高。因此,本文采取另一種策略,即根據(jù)屏幕的比例來(lái)計(jì)算出起點(diǎn)和終點(diǎn)的位置。具體算法如下:
在該算法中,引入了邊緣的概念。邊緣的起點(diǎn)設(shè)置為全寬的十分之一,左右兩端皆有,算出的點(diǎn)作為縱坐標(biāo)。而橫坐標(biāo)為屏幕高度的二分之一。通過這種方式,對(duì)任意屏幕都能有效的實(shí)現(xiàn)從左至右滑動(dòng)。這種方法有易于維護(hù),并對(duì)多樣的屏幕具備拓展性等優(yōu)勢(shì)。
對(duì)于滑動(dòng)時(shí)間的選取,經(jīng)過測(cè)試,得出200 ms是最佳值。超過該值的話,一個(gè)動(dòng)作需要花費(fèi)不必要的更多的時(shí)間來(lái)完成。而如果選擇更小的值的話,則由于安卓模擬器自身的特性,會(huì)使得該動(dòng)作無(wú)法順利完成。
經(jīng)過在安卓模擬器中的實(shí)際測(cè)試使用,我們驗(yàn)證了以上實(shí)現(xiàn)的有效性。由于每個(gè)接口的調(diào)用背后的實(shí)現(xiàn)都是基于安卓模擬器命令行的,因此每個(gè)接口相互之間都是阻塞的,從而實(shí)現(xiàn)了順序地執(zhí)行每個(gè)動(dòng)作。于是可以成功有效地在安卓模擬器中自動(dòng)化地模擬用戶的人工人機(jī)交互過程。
本文設(shè)計(jì)并實(shí)現(xiàn)了一套基于安卓模擬器,可用于自動(dòng)化模擬用戶手勢(shì)操作的編程接口。該技術(shù)可被用于模擬一系列復(fù)雜的用戶手勢(shì)操作。相比單純使用命令行工具,該技術(shù)封裝了命令行底層。使得基于安卓的人機(jī)交互可編程在技術(shù)上更透明,在實(shí)現(xiàn)上更便捷。
[1]蔡森.多終端數(shù)字皮影交互系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電子設(shè)計(jì)工程,2016(10):187-190.
[2]高瑞華.基于APK文件抓取系統(tǒng)的匹配模塊設(shè)計(jì)[J].電子設(shè)計(jì)工程,2016(3):47-49.
[3]王君,趙躍華.主動(dòng)防御技術(shù)在Android隱私保護(hù)中的應(yīng)用[J].電子設(shè)計(jì)工程,2015(20):79-81.
[4]劉彬彬,李永忠,舒俊.Android平臺(tái)下的病毒原理分析及其防御技術(shù)研究[J].電子設(shè)計(jì)工程,2013(4):40-43.
[5]周俊,李永忠,楊立華.基于Android平臺(tái)的藏文輸入法設(shè)計(jì)與實(shí)現(xiàn)[J].電子設(shè)計(jì)工程,2015(16):79-81.
[6]賀建英,袁小艷,唐青松.Android系統(tǒng)下人機(jī)交互解鎖屏功能的應(yīng)用研究 [J].電子設(shè)計(jì)工程,2016(13):4-6.
[7]林鑫.基于沙盒的Android惡意軟件檢測(cè)技術(shù)研究[J].電子設(shè)計(jì)工程,2016(12):48-50.
[8]曹歡歡,李永忠.Android平臺(tái)下的安全檢測(cè)軟件的設(shè)計(jì)與實(shí)現(xiàn)[J].電子設(shè)計(jì)工程,2015(12):141-144.
[9]陳義,馬云林.基于視覺的手勢(shì)識(shí)別技術(shù)在車載主機(jī)上的應(yīng)用[J].電子設(shè)計(jì)工程,2016(8):141-144.
[10]李楊韜,禹東川,靳來(lái)鵬,等.基于LeapMotion手勢(shì)識(shí)別的認(rèn)知訓(xùn)練系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)[J].電子設(shè)計(jì)工程,2016(9):12-14.
[11]張金龍.基于Memory-link協(xié)議的人機(jī)交互系統(tǒng)的可靠性設(shè)計(jì)[J].電子設(shè)計(jì)工程,2012(11):157-159.
[12]王秋茸.一種面向可適應(yīng)性的嵌入式設(shè)備HCI方案[J].電子設(shè)計(jì)工程,2011(2):137-140.
[13]王昶輝,蔡晴.DSP嵌入式系統(tǒng)人機(jī)接口設(shè)計(jì)[J].電子設(shè)計(jì)工程,2009(10):100-101.
[14]何浩,李滔.基于Python的Android應(yīng)用GUI的開發(fā)[J].電子設(shè)計(jì)工程,2013(9):63-65.
[15]何惠英,王兆合,王小宇,等.用Python語(yǔ)言跨平臺(tái)分析處理電子表格 [J].電子設(shè)計(jì)工程,2011(9):67-70.
Design and implementation of automatic user interface operation technology based on Android emulator
CAI Fang-da1,2
(1.Shanghai Institute of Microsystem and Information Technology, Shanghai200050,China;2.School of Information Science and Technology of Shanghai Tech.University, Shanghai201210,China)
TN06
A
1674-6236(2017)19-0071-04
2016-09-23稿件編號(hào)201609209
蔡方達(dá)(1990—),男,上海人,碩士研究生。研究方向:信息安全、移動(dòng)計(jì)算。