本發(fā)明屬于軟件工程技術(shù)領(lǐng)域,具體涉及基于用戶界面的Android應(yīng)用交互式遠(yuǎn)程協(xié)作以及相應(yīng)的Android應(yīng)用安裝包(APK文件)自動(dòng)分析與程序轉(zhuǎn)換。
背景技術(shù):
用戶在使用移動(dòng)應(yīng)用時(shí)經(jīng)常需要求助其他用戶進(jìn)行遠(yuǎn)程協(xié)作。例如,用戶在使用移動(dòng)購(gòu)物應(yīng)用幫他人購(gòu)買商品時(shí)希望其他用戶能遠(yuǎn)程填寫配送地址、時(shí)間和聯(lián)系人等信息;用戶在移動(dòng)應(yīng)用上進(jìn)行配置或填寫信息時(shí)無法獨(dú)立完成,需要請(qǐng)求家人或朋友協(xié)助填寫。傳統(tǒng)的遠(yuǎn)程協(xié)作軟件一般都不支持移動(dòng)設(shè)備之間的遠(yuǎn)程協(xié)作,少數(shù)移動(dòng)設(shè)備上的遠(yuǎn)程協(xié)作技術(shù)限定協(xié)作雙方必須使用特定廠商的移動(dòng)設(shè)備。此外,現(xiàn)有的遠(yuǎn)程協(xié)作技術(shù)基于屏幕復(fù)制和共享,需要較高的網(wǎng)絡(luò)流量同時(shí)網(wǎng)絡(luò)延遲較大,而且協(xié)作過程中協(xié)作方完全控制請(qǐng)求方設(shè)備,控制權(quán)限大且極易造成請(qǐng)求方的隱私泄露。
本發(fā)明針對(duì)Android應(yīng)用,通過對(duì)已有的Android應(yīng)用安裝包(APK文件)的自動(dòng)分析和程序轉(zhuǎn)換使其具有交互式遠(yuǎn)程協(xié)作能力。Android操作系統(tǒng)目前是三大主流移動(dòng)端操作系統(tǒng)之一,市場(chǎng)份額超過80%以上。Android應(yīng)用一般使用Java語言進(jìn)行編寫。Java源代碼首先被編譯成Java字節(jié)碼,然后被轉(zhuǎn)換成dex格式的字節(jié)碼。dex字節(jié)碼可以運(yùn)行在Android的Dalvik虛擬機(jī)上。Android應(yīng)用界面是基于Activity組件實(shí)現(xiàn)的。Activity組件提供了與用戶交互的界面并管理界面的生命周期。本發(fā)明通過分析Android應(yīng)用安裝包(APK文件)獲取其中各個(gè)Activity組件的信息,并通過修改dex字節(jié)碼增加交互式遠(yuǎn)程協(xié)作能力。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是提供一種Android應(yīng)用交互式遠(yuǎn)程協(xié)作方法,使得用戶在使用Android應(yīng)用時(shí)可以請(qǐng)求其他用戶通過網(wǎng)絡(luò)進(jìn)行基于應(yīng)用界面的交互式遠(yuǎn)程協(xié)作,同時(shí)可以靈活指定界面上的協(xié)作范圍。
本發(fā)明提供的Android應(yīng)用交互式遠(yuǎn)程協(xié)作方法,其核心思想是通過對(duì)Android應(yīng)用安裝包(APK文件)的自動(dòng)分析和程序轉(zhuǎn)換加入交互式遠(yuǎn)程協(xié)作能力,在Android應(yīng)用使用過程中通過輕量級(jí)的應(yīng)用界面內(nèi)容和事件同步機(jī)制實(shí)現(xiàn)交互式遠(yuǎn)程協(xié)作。
本發(fā)明的技術(shù)方案如下。首先,通過對(duì)已有的Android應(yīng)用安裝包(APK文件)的自動(dòng)分析和程序轉(zhuǎn)換使其具有交互式遠(yuǎn)程協(xié)作能力。在此基礎(chǔ)上,請(qǐng)求方使用具有交互式遠(yuǎn)程協(xié)作能力的Android應(yīng)用后,可以在任一界面上選定一個(gè)區(qū)域作為協(xié)作范圍并發(fā)起遠(yuǎn)程協(xié)作,其協(xié)作過程如圖1所示。協(xié)作方使用客戶端接受協(xié)作請(qǐng)求后,該客戶端將自動(dòng)生成一個(gè)與請(qǐng)求方應(yīng)用協(xié)作范圍內(nèi)的界面內(nèi)容一樣的模擬界面,協(xié)作方通過模擬界面進(jìn)行交互式協(xié)作。協(xié)作過程中,協(xié)作方的界面操作事件將回傳到請(qǐng)求方應(yīng)用界面上并進(jìn)行事件響應(yīng)處理,同時(shí)更新后的請(qǐng)求方應(yīng)用界面內(nèi)容將被發(fā)送給協(xié)作方用于更新模擬界面內(nèi)容。這種輕量級(jí)的交互式遠(yuǎn)程協(xié)作方法具有較低的網(wǎng)絡(luò)流量和延遲,同時(shí)請(qǐng)求方可以對(duì)界面協(xié)作范圍進(jìn)行細(xì)粒度的控制,具備更高的安全性。
本發(fā)明提供的Android應(yīng)用交互式遠(yuǎn)程協(xié)作方法,具體步驟為:
(1)讀取Android應(yīng)用安裝包(APK文件),分析其中的dex文件,獲取其中所有Activity類的子類以及與View控件相關(guān)的監(jiān)聽器子類,自動(dòng)向其中插入與交互式遠(yuǎn)程協(xié)作方法相關(guān)的實(shí)現(xiàn)代碼,然后將改造之后的類與其他dex文件以及附加的交互式遠(yuǎn)程協(xié)作運(yùn)行時(shí)庫(kù)一起重新打包并簽名,生成新的具有交互式遠(yuǎn)程協(xié)作能力的Android應(yīng)用;
(2)請(qǐng)求方用戶使用具有交互式遠(yuǎn)程協(xié)作能力的Android應(yīng)用,在任一應(yīng)用界面上長(zhǎng)按屏幕啟動(dòng)遠(yuǎn)程協(xié)作機(jī)制,然后在屏幕上選取一個(gè)區(qū)域作為協(xié)作范圍,并從當(dāng)前在線的其他用戶中選擇一個(gè)協(xié)作者發(fā)出請(qǐng)求;
(3)協(xié)作方使用專用的遠(yuǎn)程協(xié)作Android客戶端,收到請(qǐng)求方的協(xié)作請(qǐng)求并接受后,客戶端通過遠(yuǎn)程消息通信從請(qǐng)求方移動(dòng)設(shè)備獲取協(xié)作范圍內(nèi)的界面內(nèi)容,并在客戶端上生成并顯示一個(gè)模擬的交互式界面;
(4)協(xié)作方在模擬的交互式界面上進(jìn)行內(nèi)容輸入、點(diǎn)擊等操作,遠(yuǎn)程協(xié)作客戶端捕獲界面交互事件并發(fā)送給請(qǐng)求方設(shè)備;
(5)請(qǐng)求方設(shè)備上的應(yīng)用收到協(xié)作方事件消息后,在當(dāng)前應(yīng)用界面上重放該事件并引發(fā)界面內(nèi)容更新,然后抽取更新后的界面內(nèi)容并發(fā)送界面內(nèi)容消息給協(xié)作方設(shè)備;
(6)協(xié)作方設(shè)備上的客戶端收到界面內(nèi)容消息后更新模擬交互式界面上的內(nèi)容;
(7)重復(fù)執(zhí)行步驟(4)到步驟(6),直至請(qǐng)求方終止整個(gè)協(xié)作過程。
步驟(1)中的Android應(yīng)用交互式遠(yuǎn)程協(xié)作改造無需源代碼,針對(duì)Android應(yīng)用安裝包(APK文件)中的dex文件進(jìn)行分析并自動(dòng)插入與交互式遠(yuǎn)程協(xié)作相關(guān)的行為以及相應(yīng)的運(yùn)行時(shí)庫(kù),然后重新打包形成具備交互式遠(yuǎn)程協(xié)作能力的應(yīng)用。Android應(yīng)用交互式遠(yuǎn)程協(xié)作能力改造的具體方案,如圖2所示:
(1)對(duì)于Android應(yīng)用中與View控件內(nèi)容變動(dòng)相關(guān)的監(jiān)聽器子類,在其事件響應(yīng)方法中插入調(diào)用綁定界面內(nèi)容變化監(jiān)聽器的函數(shù)的字節(jié)碼指令;
(2)對(duì)于Android應(yīng)用中的Activity子類,在其onCreate、onResume、onPause、onDestroy以及dispatchTouchEvent方法(如果沒有則自動(dòng)加入)中插入調(diào)用遠(yuǎn)程協(xié)作發(fā)起、協(xié)作范圍選擇、協(xié)作者選擇、綁定界面內(nèi)容變化監(jiān)聽器等函數(shù)的字節(jié)碼指令;
(3)將修改過的監(jiān)聽器類和Activity類與運(yùn)行時(shí)庫(kù)(含有上述被調(diào)用函數(shù)的實(shí)現(xiàn)類以及一些輔功能的實(shí)現(xiàn)類)一起重新打包并簽名形成改造后的Android應(yīng)用。
步驟(3)和步驟(6)中的界面內(nèi)容是通過對(duì)于Android應(yīng)用運(yùn)行時(shí)界面的實(shí)時(shí)內(nèi)容分析獲得的結(jié)構(gòu)化表示。
附圖說明
圖1為本發(fā)明的Android應(yīng)用交互式遠(yuǎn)程協(xié)作過程圖。
圖2為本發(fā)明的Android應(yīng)用改造技術(shù)方案的示意圖。
圖3為界面內(nèi)容的JSON消息示例。
圖4為界面事件的JSON消息示例。
具體實(shí)施方式
下面以一個(gè)經(jīng)過改造具有交互式遠(yuǎn)程協(xié)作能力的Android購(gòu)物類應(yīng)用為例說明其協(xié)作效果:
(1)請(qǐng)求方用戶使用該應(yīng)用在界面上長(zhǎng)按發(fā)起協(xié)作請(qǐng)求,屏幕提示用戶選擇協(xié)作范圍;
(2)請(qǐng)求方用戶選擇好協(xié)作范圍后,屏幕上的紅框顯示協(xié)作范圍;
(3)屏幕提示請(qǐng)求方用戶選擇協(xié)作者;
(4)協(xié)作方使用的客戶端收到并接受協(xié)作請(qǐng)求后自動(dòng)生成一個(gè)模擬的應(yīng)用界面;
(5)協(xié)作方操作模擬的應(yīng)用界面,其操作內(nèi)容實(shí)時(shí)顯示在請(qǐng)求方應(yīng)用的界面上。
在此實(shí)施方案中,具有交互式遠(yuǎn)程協(xié)作能力的Android應(yīng)用與協(xié)作方客戶端之間通過socket消息進(jìn)行通信,所傳輸?shù)慕缑鎯?nèi)容和界面事件消息采用JSON格式進(jìn)行封裝(如圖3和圖4所示)。
下面介紹Android應(yīng)用交互式遠(yuǎn)程協(xié)作能力改造的具體實(shí)施方案:
(1)使用解壓縮軟件7z解壓Android應(yīng)用安裝包,獲取其dex文件,然后使用工具Dex2Jar將dex文件讀入到內(nèi)存中并遍歷其中所有的類;
(2)找到dex文件中與View控件內(nèi)容變動(dòng)相關(guān)的監(jiān)聽器子類,在其事件響應(yīng)方法中插入調(diào)用綁定界面內(nèi)容變化監(jiān)聽器的函數(shù)的字節(jié)碼指令;
(3)找到dex文件中所有的Activity子類,對(duì)于其中每一個(gè)類判斷其是否定義了onCreate、onResume、onPause、onDestroy以及dispatchTouchEvent方法,如果沒有則自動(dòng)生成這些方法并插入到Activity子類中。在這些方法中插入調(diào)用遠(yuǎn)程協(xié)作發(fā)起、協(xié)作范圍選擇、協(xié)作者選擇、綁定界面內(nèi)容變化監(jiān)聽器等函數(shù)的字節(jié)碼指令;
(4)將修改過的監(jiān)聽器類和Activity類通過Dex2Jar工具重新寫入磁盤形成改造后的dex文件,接著將運(yùn)行時(shí)庫(kù)(含有上述被調(diào)用函數(shù)的實(shí)現(xiàn)類以及一些輔功能的實(shí)現(xiàn)類)與改造后的dex文件通過7z壓縮軟件進(jìn)行壓縮并簽名生成改造后的Android應(yīng)用。