一種針對(duì)安卓應(yīng)用對(duì)傳感器的能耗漏洞的分析與檢測(cè)系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及安卓應(yīng)用對(duì)傳感器能耗漏洞的檢測(cè)系統(tǒng)。
【背景技術(shù)】
[0002]由于安卓移動(dòng)操作系統(tǒng)是一個(gè)開源的平臺(tái),它吸引了眾多的應(yīng)用開發(fā)者,使得近年來安卓系統(tǒng)在移動(dòng)設(shè)備市場(chǎng)中占據(jù)了極大的份額。為了實(shí)現(xiàn)豐富多彩的應(yīng)用,智能手機(jī)都配備了各種各樣的傳感器。這些傳感器通過感知用戶當(dāng)前的物理環(huán)境,從而為用戶提供更加個(gè)性化的服務(wù)。但是另一方面,這些傳感器會(huì)消耗大量的電量,從而極大地縮短智能手機(jī)的續(xù)航時(shí)間。因此,傳感器采集到的數(shù)據(jù)應(yīng)當(dāng)被應(yīng)用很好地利用,并對(duì)用戶產(chǎn)生一定的益處。如果傳感器數(shù)據(jù)的利用率過低,則說明相應(yīng)的電量被浪費(fèi)了,該應(yīng)用存在著能耗漏洞。能耗漏洞的存在會(huì)造成較差的用戶體驗(yàn),并對(duì)安卓應(yīng)用的進(jìn)一步發(fā)展產(chǎn)生負(fù)面作用。
[0003]目前傳統(tǒng)的解決辦法都只考慮產(chǎn)生相應(yīng)的事件,包括普通事件和傳感器事件,并不考慮傳感器事件中所包含的數(shù)據(jù)。傳統(tǒng)的工具在產(chǎn)生傳感器事件時(shí),會(huì)隨機(jī)產(chǎn)生所需要的數(shù)據(jù)并將其附著在事件之中。這導(dǎo)致相應(yīng)的處理函數(shù)中的許多與傳感器數(shù)據(jù)相關(guān)的路徑都無法被執(zhí)行,即較低的路徑覆蓋率。這進(jìn)一步造成應(yīng)用無法到達(dá)一些與傳感器數(shù)據(jù)相關(guān)的特定狀態(tài),從而漏報(bào)許多存在問題的狀態(tài)。并且由于產(chǎn)生的數(shù)據(jù)的隨機(jī)性,多次分析將會(huì)出現(xiàn)不一樣的結(jié)果。這會(huì)極大地困擾用戶,降低工具的穩(wěn)定性和實(shí)用性。另一方面,傳統(tǒng)的工具在處理傳感器事件時(shí),不論程序執(zhí)行了哪一條路徑,都只會(huì)轉(zhuǎn)移到同一個(gè)新的狀態(tài)。然而大多數(shù)應(yīng)用都會(huì)根據(jù)傳感器數(shù)據(jù)的不同而轉(zhuǎn)移到不同的狀態(tài)以實(shí)現(xiàn)智能化的服務(wù),因此這些應(yīng)用都無法被傳統(tǒng)的工具分析。
【發(fā)明內(nèi)容】
[0004]1、所要解決的技術(shù)問題:
[0005]目前的安卓應(yīng)用的傳感器分析檢測(cè)系統(tǒng)存在覆蓋范圍窄,效率低,分析檢測(cè)結(jié)果不穩(wěn)定。
[0006]2、技術(shù)方案:
[0007]為了解決以上問題,本發(fā)明提供了一種針對(duì)安卓應(yīng)用對(duì)傳感器的能耗漏洞的分析與檢測(cè)系統(tǒng),由安卓應(yīng)用執(zhí)行模塊,傳感器數(shù)據(jù)產(chǎn)生模塊和傳感器數(shù)據(jù)利用率分析模塊構(gòu)成,安卓應(yīng)用執(zhí)行模塊分別和傳感器數(shù)據(jù)產(chǎn)生模塊和傳感器數(shù)據(jù)利用率分析模塊連接,并且所有的模塊運(yùn)行于驗(yàn)證可執(zhí)行Java程序的JPF系統(tǒng)上。
[0008]JPF 的全稱為 Java Pathfinder。
[0009]所述安卓應(yīng)用執(zhí)行模塊是指解析得到應(yīng)用的所有事件處理方法,產(chǎn)生模擬事件以激活相應(yīng)的處理方法,并在事件處理結(jié)束后更新事件處理方法的集合,通過產(chǎn)生特定的事件序列,到達(dá)對(duì)應(yīng)的程序狀態(tài)。
[0010]所述的傳感器數(shù)據(jù)產(chǎn)生模塊是指在將初始的數(shù)據(jù)范圍的邊界值傳遞給應(yīng)用后,記錄應(yīng)用在處理對(duì)應(yīng)的傳感器事件過程中執(zhí)行的所有的關(guān)鍵代碼,并判斷各個(gè)邊界值對(duì)應(yīng)的關(guān)鍵代碼是否相同,如果相同且該數(shù)據(jù)范圍大于一定的閾值,則將該數(shù)據(jù)范圍劃分為較小的范圍,如果不同但該數(shù)據(jù)范圍大于另一個(gè)較小的閾值,依然將其劃分為較小的子范圍。
[0011]所述的傳感器數(shù)據(jù)利用率分析模塊是指利用動(dòng)態(tài)染色技術(shù)標(biāo)識(shí)定位出所有利用了傳感器數(shù)據(jù)的方法調(diào)用,并記錄其中對(duì)用戶帶來好處的方法調(diào)用,統(tǒng)計(jì)得到每次由傳感器事件所觸發(fā)的狀態(tài)轉(zhuǎn)移時(shí)的數(shù)據(jù)利用數(shù),并通過比較所有的狀態(tài)轉(zhuǎn)移的利用數(shù)計(jì)算得到每次狀態(tài)轉(zhuǎn)移的相對(duì)傳感器數(shù)據(jù)利用率。
[0012]3、有益效果:
[0013]本發(fā)明能分析并執(zhí)行一個(gè)安卓應(yīng)用,產(chǎn)生一系列的事件序列并傳遞給應(yīng)用進(jìn)行相應(yīng)的處理,在產(chǎn)生傳感器事件時(shí),能夠以較小的代價(jià)生成足夠的數(shù)據(jù)以覆蓋事件處理方法中與傳感器數(shù)據(jù)相關(guān)的程序路徑,并按照深度優(yōu)先的方式遍歷應(yīng)用的狀態(tài)空間,通過計(jì)算傳感器數(shù)據(jù)利用率找到有問題的程序狀態(tài),最后得到的診斷結(jié)果是正確的、高效的和穩(wěn)定的,上述所有的過程都是自動(dòng)化的,不需要用戶的額外參與。
【附圖說明】
[0014]圖1為本發(fā)明的安卓應(yīng)用能耗問題診斷系統(tǒng)的結(jié)構(gòu)圖。
[0015]圖2為自動(dòng)執(zhí)行安卓應(yīng)用的算法流程圖。
[0016]圖3為自動(dòng)生成傳感器數(shù)據(jù)的算法流程圖。
[0017]圖4為自動(dòng)分析傳感器數(shù)據(jù)利用率的算法流程圖。
【具體實(shí)施方式】
[0018]為了更清楚的對(duì)發(fā)明進(jìn)行說明,首先,對(duì)一些用詞進(jìn)行解釋。
[0019]安卓應(yīng)用是指一個(gè)可以在安卓移動(dòng)設(shè)備上的安裝并運(yùn)行的應(yīng)用,當(dāng)明確對(duì)之進(jìn)行操作時(shí)特指這個(gè)應(yīng)用的資源文件和字節(jié)碼文件。
[0020]Java應(yīng)用是指一個(gè)可以在裝有JVM的計(jì)算機(jī)上運(yùn)行的由Java語言編寫的應(yīng)用。[0021 ] 安卓應(yīng)用的字節(jié)碼是安卓應(yīng)用的本質(zhì),它由若干個(gè)類文件組成,這些類中各自包含若干方法,這些類中的方法通過合作,共同實(shí)現(xiàn)特定的功能。
[0022]安卓應(yīng)用⑶I部件是指應(yīng)用在運(yùn)行過程中能夠顯示在屏幕上的部分,從應(yīng)用的資源文件中解析得到應(yīng)用初始時(shí)刻的GUI部件,當(dāng)應(yīng)用運(yùn)行后,GUI部件可能會(huì)動(dòng)態(tài)變化。
[0023]安卓應(yīng)用事件是指由安卓系統(tǒng)或者用戶產(chǎn)生的行為和動(dòng)作,通過產(chǎn)生這樣一系列的操作使用安卓應(yīng)用,安卓應(yīng)用通過響應(yīng)這樣一系列的操作為用戶提供服務(wù)。
[0024]安卓應(yīng)用傳感器事件是指智能手機(jī)中所配備的傳感器在采集物理環(huán)境數(shù)據(jù)時(shí)產(chǎn)生的行為和動(dòng)作,安卓應(yīng)用在需要使用傳感器時(shí)打開傳感器,在不需要使用時(shí)關(guān)閉傳感器。
[0025]傳感器數(shù)據(jù)是指?jìng)鞲衅魇占降碾x散化了的真實(shí)物理環(huán)境的數(shù)據(jù),傳感器數(shù)據(jù)附著在傳感器事件之中。
[0026]安卓應(yīng)用事件處理方法是指應(yīng)用中定義的用于響應(yīng)事件的回調(diào)函數(shù),當(dāng)產(chǎn)生了事件后,安卓系統(tǒng)會(huì)自動(dòng)調(diào)用注冊(cè)過的對(duì)應(yīng)的事件處理方法進(jìn)行處理。
[0027]傳感器事件處理過程是指從調(diào)用事件處理方法開始,到事件處理方法返回結(jié)束,這包含所有由事件處理方法直接或間接創(chuàng)建的工作線程結(jié)束。
[0028]程序狀態(tài)是指安卓應(yīng)用所處于的一種狀態(tài),此時(shí)程序的全局變量、局部變量和數(shù)據(jù)庫(kù)等都有特定的值。
[0029]程序狀態(tài)轉(zhuǎn)移是指安卓應(yīng)用在處于某一狀態(tài)時(shí),在處理了某個(gè)事件后,程序的內(nèi)部某個(gè)值發(fā)生了改變,從而轉(zhuǎn)移到了一個(gè)新的狀態(tài)。
[0030]程序狀態(tài)空間是指程序所有的狀態(tài)的集合,并包含這些狀態(tài)之間可能存在的轉(zhuǎn)移,按照一定的方式,如深度優(yōu)先方式,可以對(duì)程序的狀態(tài)空間進(jìn)行遍歷。
[0031]處理傳感器事件時(shí)的關(guān)鍵代碼是指能夠影響處理結(jié)果的指令,包括跳轉(zhuǎn)指令、數(shù)據(jù)類型轉(zhuǎn)換和庫(kù)函數(shù)調(diào)用。
[0032]數(shù)據(jù)范圍是指所需要采用的傳感器數(shù)據(jù)的空間大小,包含組成該數(shù)據(jù)的變量及其值域。
[0033]關(guān)鍵代碼是指改變程序執(zhí)行流程,從而影響處理結(jié)果的指令,包括跳轉(zhuǎn)指令、數(shù)據(jù)類型轉(zhuǎn)換和庫(kù)函數(shù)調(diào)用。
[0034]動(dòng)態(tài)染色技術(shù)是指在調(diào)用事件處理方法時(shí),為初始數(shù)據(jù)附著一個(gè)標(biāo)識(shí),如果某一個(gè)指令利用了帶有標(biāo)識(shí)的對(duì)象,則將標(biāo)識(shí)傳遞下去,這樣可以定位所有利用了初始數(shù)據(jù)的指令。
[0035]對(duì)用戶的好處是指更新了用戶可以感受到的數(shù)據(jù)或界面,如更新數(shù)據(jù)庫(kù)、刷新屏蒂。
[0036]下面通過附圖和實(shí)施例來對(duì)本發(fā)明進(jìn)行詳細(xì)說明。
[0037]如圖1所示,本發(fā)明的針對(duì)安卓應(yīng)用對(duì)傳感器的能耗漏洞的分析與檢測(cè)系統(tǒng),由安卓應(yīng)用執(zhí)行模塊,傳感器數(shù)據(jù)產(chǎn)生模塊和傳感器數(shù)據(jù)利用率分析模塊構(gòu)成,安卓應(yīng)用執(zhí)行模塊分別和傳感器數(shù)據(jù)產(chǎn)生模塊和傳感器數(shù)據(jù)利用率分析模塊連接,并且所有的模塊運(yùn)行于驗(yàn)證可執(zhí)行Java程序的JPF (Java Pathfinder)系統(tǒng)上。JPF是一個(gè)搭建在Java虛擬機(jī)JVM之上的虛擬機(jī),能夠保存程序運(yùn)行時(shí)的快照,即狀態(tài),并根據(jù)需要取出這些狀態(tài)以繼續(xù)運(yùn)行。這個(gè)性質(zhì)保證了安卓應(yīng)用執(zhí)行模塊