張 天,耿慶田,高琦坤
(長春師范大學計算機科學與技術學院,吉林長春 130032)
隨著“互聯(lián)網(wǎng)+”和大數(shù)據(jù)應用的不斷深入,移動互聯(lián)終端在各個行業(yè)中的應用越來越普及,移動終端的應用程序也越來越多,尤其一些專業(yè)領域,需要特殊定制行業(yè)移動應用。由于Android的免費特性,很多移動終端都以其作為運行平臺來開發(fā)相應的行業(yè)應用。在編制過程中,程序員經(jīng)常需要調(diào)用相關行業(yè)專用硬件信息來獲取數(shù)據(jù),而在編制應用程序過程中未必具備某些專用硬件,或者應用程序編制者不能熟悉使用這些專用硬件,而從專用硬件中得到數(shù)據(jù)才能保證應用程序的測試運行,此時可以利用Android程序的運行機制進行程序替換,以獲取和設定上層應用程序需要的特定數(shù)據(jù)進行測試。
Android應用程序采取了MVC的設計模式,程序界面與程序運行代碼是分離的。我們每設計一個窗口程序界面,需要同時完成兩項工作:一是應用程序的界面設計;一是用戶在界面操作時的響應代碼。程序界面在項目工程中以布局文件形式存在,而界面響應代碼則以JAVA類的形式存在。在Android中將這兩項統(tǒng)一稱作Activity(活動)。在Android Studio中創(chuàng)建活動如圖1所示,從中可看出活動的組成。
圖1 Android Studio創(chuàng)建活動
在Android的項目中,會有一個活動作為主活動,當程序第一次運行時最先顯示給用戶,然后通過這個活動進行其它活動的調(diào)用執(zhí)行。為了使Android平臺可以自動啟動主活動,在每個項目中有一個配置文件,文件名為AndroidManifest.xml,在這個文件中定義了我們所建立的每一個活動的屬性與關聯(lián)。代碼如下:
android:name=".MainActivity" android:label="@string/app_name" android:theme="@style/AppTheme.NoActionBar">
Android通過intent-filter標簽中action屬性值來確定哪一個活動會作為主活動啟動,從上述代碼中可以看到,action值為“android.intent.action.MAIN”時,Android平臺將調(diào)用對應的活動作為應用程序的第一個窗口呈現(xiàn)在用戶眼前。通過使action取不同的值,可以啟動不同的活動,其中包括一些系統(tǒng)活動和用戶所設定的活動。
在Android系統(tǒng)中,要啟動某一個活動,需要發(fā)送Intent對象給Android平臺,Android平臺通過Intent中包含的action名稱來決定啟動哪一個Activity??梢酝ㄟ^這種方式來對一些現(xiàn)有應用程序中的運行活動進行替代,向應用程序發(fā)送模擬數(shù)據(jù),對應用程序進行運行測試。
以替代Android相機程序為例,假設程序員在編制程序過程中,需要調(diào)用相機獲取圖像之后才能繼續(xù)進行程序調(diào)試,但是每次打開相機獲取圖像時操作過于緩慢。我們可以創(chuàng)建一個測試應用項目,通過修改Intent調(diào)用機制,使應用程序每次只調(diào)用我們編寫的測試應用,而不啟動Android平臺中的相機應用,在測試應用中,可以直接為調(diào)用者提供他們所需要的已經(jīng)拍照好的圖像,這樣就可以節(jié)省大量程序調(diào)試時間,同時為程序調(diào)試提供特定數(shù)據(jù)。
首先,明確在我們所使用的Android平臺中需要替換的應用程序的完整包名和調(diào)用此應用程序所指定的Intent的屬性值內(nèi)容。為獲取以上兩方面信息,可以借助網(wǎng)絡上的APK反編譯工具對所要替代程序的安裝包進行反編譯,本文推薦比較常用的APK反編譯工具APK Editor Pro,圖形化界面易操作。之后在反編譯好的文件夾中找到該程序的AndroidManifest.xml文件,在該文件中查找到此程序的完整包名和調(diào)用該程序所發(fā)出的intent值并記錄。
圖2 Android對相同Intent請求調(diào)用示意圖
然后,在建立測試應用項目時對該項目空間命名,采用剛剛查找到的包名信息進行命名,在測試項目的AndroidManifest.xml文件中對Activity進行定義時,intent-filter標簽中的action屬性值設成我們記錄的intent值。以這種方式進行設置后,如果將測試程序安裝到現(xiàn)有Android平臺后,在平臺當中就會出現(xiàn)兩個同名包的應用程序,那么當啟動該名稱的程序時,Android系統(tǒng)會調(diào)用最后安裝的應用程序,這樣就實現(xiàn)了原有啟動程序的替換。此方案詳細替換過程如圖2所示,經(jīng)過替換后,由測試程序向主程序提供調(diào)用返回數(shù)據(jù)。
最后,可以在測試程序中按照預先設定,為主程序提供所需的測試數(shù)據(jù),在提供數(shù)據(jù)之前,也可以在測試程序中對測試數(shù)據(jù)進行加工處理,以適應主程序要求。
本文中提供的方法可以用作替換現(xiàn)有第三方應用程序被自開發(fā)的程序調(diào)用,針對不便修改的第三方程序也可以調(diào)用其它活動進行替換,從而為第三方程序提供我們想提供給它的數(shù)據(jù)內(nèi)容,但在這方面應用時,需要注意相關的版權問題及相關的法律法規(guī)。