亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種安卓目標(biāo)應(yīng)用崩潰統(tǒng)計(jì)方法和裝置的制造方法_2

文檔序號(hào):9750696閱讀:來源:國(guó)知局
初始化工作,這個(gè)函數(shù)調(diào)用完后,這個(gè)Activity并不是說就已經(jīng)啟動(dòng)了,或者是跳到前臺(tái)了。而是還需要其他的大量工作,我們知道:onCreate之后還有onRestart函數(shù)和onStart函數(shù)等。實(shí)際上onStart函數(shù)調(diào)用完畢了這個(gè)Acti vity還沒有完全啟動(dòng),也只是前臺(tái)可見,直到onResume函數(shù)調(diào)用后這個(gè)OnCreate才算完全啟動(dòng)。
[0066]步驟120,通過鉤子函數(shù)鉤取所述異常捕獲函數(shù)。
[0067]在本發(fā)明實(shí)施例中,可以利用鉤子函數(shù)鉤取UncaughtExcept1n函數(shù),那么不管目標(biāo)應(yīng)用中是否已經(jīng)實(shí)現(xiàn)UncaughtExcept1nHandler,都可以針對(duì)目標(biāo)應(yīng)用繼續(xù)執(zhí)行在Activity的窗口啟用函數(shù)內(nèi)鉤取異常捕獲函數(shù)的邏輯。從而可以使外部的進(jìn)程可以對(duì)目標(biāo)應(yīng)用的異常消息進(jìn)行統(tǒng)計(jì)。
[0068]在實(shí)際應(yīng)用中,若監(jiān)控到目標(biāo)應(yīng)用的Activity的窗口啟用函數(shù),S卩OnCreate函數(shù),調(diào)用異常捕獲函數(shù),則表明此時(shí)目標(biāo)應(yīng)用出現(xiàn)異常而導(dǎo)致崩潰,則可以觸發(fā)調(diào)用鉤子函數(shù)鉤取異常捕獲函數(shù)。
[0069]步驟130,通過所述異常捕獲函數(shù)獲取異常消息。
[0070]如上述,異常捕獲函數(shù)的作用是獲取導(dǎo)致目標(biāo)應(yīng)用崩潰的異常消息,所以在本發(fā)明實(shí)施例中,在利用鉤子函數(shù)鉤取異常捕獲函數(shù)后,會(huì)通過異常捕獲函數(shù)獲取導(dǎo)致目標(biāo)應(yīng)用崩潰的異常消息。
[0071]步驟140,將所述異常消息進(jìn)行統(tǒng)計(jì)。
[0072]在實(shí)際應(yīng)用中,可以將獲取的異常消息按照當(dāng)前的系統(tǒng)時(shí)間進(jìn)行統(tǒng)計(jì),并存放在消息隊(duì)列中,然后還可以根據(jù)需求,將該消息隊(duì)列發(fā)送至第一進(jìn)程,然后由第一進(jìn)程進(jìn)行記錄或者進(jìn)行后續(xù)的展示。當(dāng)然,也可以按照其他方式進(jìn)行統(tǒng)計(jì)和存放,對(duì)此本發(fā)明實(shí)施例不加以限定。
[0073]優(yōu)選的,在步驟140之后,還包括:
[0074]子步驟251,將統(tǒng)計(jì)得到的異常消息以廣播的形式發(fā)送給第一進(jìn)程。
[0075]在本發(fā)明實(shí)施例中,統(tǒng)計(jì)異常消息是由目標(biāo)應(yīng)用的應(yīng)用進(jìn)程執(zhí)行的,那么如果要對(duì)統(tǒng)計(jì)得到的異常消息進(jìn)行處理,則需要另外的進(jìn)程。那么本發(fā)明實(shí)施例中可以利用廣播的形式將統(tǒng)計(jì)得到的異常消息發(fā)送給第一進(jìn)程,第一進(jìn)程則接收統(tǒng)計(jì)得到的異常消息,對(duì)其進(jìn)行記錄或者進(jìn)行展示。
[0076]在本發(fā)明實(shí)施例中,可以由前述鉤子函數(shù)在統(tǒng)計(jì)異常消息后,將統(tǒng)計(jì)的異常消息以廣播的形式發(fā)發(fā)送,第一進(jìn)程則接收該廣播,從中統(tǒng)計(jì)的異常消息進(jìn)行處理。
[0077]在實(shí)際應(yīng)用中,以廣播的形式發(fā)送統(tǒng)計(jì)的異常消息的過程是以ActivityManagerService 為中心。廣播的發(fā)送者將廣播發(fā)送到 ActivityManagerService,ActivityManagerService接收到這個(gè)廣播以后,就會(huì)在自己的注冊(cè)中心查看有哪些進(jìn)程訂閱了該廣播,然后把這個(gè)廣播發(fā)送到這些進(jìn)程中。概括來說,廣播的發(fā)送路徑就是從發(fā)送者到 ActivityManagerService,再?gòu)?ActivityManagerService 到接收者,這中間的兩個(gè)過程都是通過Binder進(jìn)程間通彳目機(jī)制來完成的。
[0078]在本發(fā)明實(shí)施例中,可以預(yù)先在ActivityManagerService的注冊(cè)中心中設(shè)定第一進(jìn)程訂閱統(tǒng)計(jì)的異常消息對(duì)應(yīng)的廣播。
[0079]子步驟252,所述第一進(jìn)程接收到所述統(tǒng)計(jì)的異常消息后,將所述統(tǒng)計(jì)的異常消息進(jìn)行記錄或者展示。
[0080]第一進(jìn)程在接收到統(tǒng)計(jì)的異常消息后,可以在對(duì)應(yīng)的Android系統(tǒng)的特定界面上展示該統(tǒng)計(jì)的異常消息。
[0081]在本發(fā)明實(shí)施例中,可以在接收到某一APP所包含的全部統(tǒng)計(jì)的異常消息之后,再將各統(tǒng)計(jì)的異常消息在特定界面上展示。當(dāng)然,也可以按照其他方式展示統(tǒng)計(jì)的異常消息,對(duì)此,本發(fā)明實(shí)施例不加以限定。
[0082]在本發(fā)明實(shí)施例中,監(jiān)控目標(biāo)應(yīng)用的Activity的窗口啟用函數(shù)是否調(diào)用異常捕獲函數(shù),如果Activity的窗口啟用函數(shù)調(diào)用異常捕獲函數(shù),則通過鉤子函數(shù)鉤取所述異常捕獲函數(shù),通過所述異常捕獲函數(shù)獲取異常消息,并將所述異常消息進(jìn)行統(tǒng)計(jì),可以針對(duì)Android系統(tǒng)中全部應(yīng)用,獲取目標(biāo)應(yīng)用崩潰對(duì)應(yīng)的異常消息,從而提高了目標(biāo)應(yīng)用崩潰統(tǒng)計(jì)的全面性和適用性。
[0083]實(shí)施例二
[0084]參照?qǐng)D2,示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種安卓目標(biāo)應(yīng)用崩潰統(tǒng)計(jì)方法實(shí)施例的步驟流程圖,具體可以包括如下步驟:
[0085]步驟210,將鉤子函數(shù)注入所述目標(biāo)應(yīng)用的應(yīng)用進(jìn)程中。
[0086]在本發(fā)明實(shí)施例中,鉤子函數(shù)用于攔截權(quán)限驗(yàn)證函數(shù)返回的權(quán)限驗(yàn)證結(jié)果,同時(shí)執(zhí)行將表示通過驗(yàn)證的權(quán)限驗(yàn)證結(jié)果返回至系統(tǒng)的邏輯過程。所以,本發(fā)明實(shí)施例需要先將鉤子函數(shù)注入各應(yīng)用的應(yīng)用進(jìn)程中。
[0087]優(yōu)選地,步驟210,包括:
[0088]子步驟211,在系統(tǒng)啟動(dòng)時(shí),將系統(tǒng)自帶的初始孵化進(jìn)程替換為預(yù)定的第一孵化進(jìn)程。
[0089]在實(shí)際應(yīng)用中,Android系統(tǒng)的正常啟動(dòng)過程大致為:啟動(dòng)系統(tǒng)一〉init進(jìn)程讀取啟動(dòng)init.rc—> ini t進(jìn)程創(chuàng)建zygote (孵化器)進(jìn)程一>zygote進(jìn)程創(chuàng)建java虛擬機(jī)載入zygotelnit類一 > 通過所述虛擬機(jī)注冊(cè)需要監(jiān)聽的socket — >等待ActivityManagerService向socket寫入創(chuàng)建進(jìn)程的創(chuàng)建消息一>zygote進(jìn)程根據(jù)所述創(chuàng)建消息創(chuàng)建對(duì)應(yīng)進(jìn)程。
[0090]在本發(fā)明實(shí)施例中,為了實(shí)現(xiàn)對(duì)各應(yīng)用調(diào)用權(quán)限驗(yàn)證函數(shù)的監(jiān)控,需要首先對(duì)Android系統(tǒng)初始的孵化器進(jìn)程即zygote進(jìn)程進(jìn)行替換,替換為指定的第一孵化器進(jìn)程,SP第一 zygote進(jìn)程,該第一 zygote進(jìn)程可以監(jiān)聽各應(yīng)用的應(yīng)用進(jìn)程是否需要?jiǎng)?chuàng)建,即監(jiān)聽前述socket是否有創(chuàng)建消息,如果有則創(chuàng)建該應(yīng)用進(jìn)程,在創(chuàng)建過程中將本發(fā)明實(shí)施例的各鉤取函數(shù)注入該應(yīng)用進(jìn)程,同時(shí)該第一 zygote進(jìn)程可以在Android系統(tǒng)中創(chuàng)建一指定進(jìn)程,用以調(diào)用接口從指定位置讀取私有類并完成所讀取的私有類在Android系統(tǒng)中的注冊(cè),SP將讀取的各私有類可以在Andro id系統(tǒng)中正常運(yùn)行也不會(huì)影響到其他程序的運(yùn)行。
[0091]在實(shí)際應(yīng)用中將鉤取函數(shù)對(duì)應(yīng)的SO庫注入該應(yīng)用進(jìn)程,該SO庫包括鉤子函數(shù)的邏輯代碼,從而可以監(jiān)聽該應(yīng)用進(jìn)程是否調(diào)用權(quán)限驗(yàn)證函數(shù)。
[0092]在Android系統(tǒng)中,所有的應(yīng)用程序進(jìn)程以及系統(tǒng)服務(wù)進(jìn)程System Server都是由zygote進(jìn)程孕育(fork)出來的,因此,本發(fā)明可通過Android系統(tǒng)初始的zygote進(jìn)程替換為第一 zygote進(jìn)程實(shí)現(xiàn)監(jiān)聽和注入過程。
[0093]當(dāng)然,在替換Android系統(tǒng)初始的zygote進(jìn)程為第一zygote進(jìn)程后,需要重啟Android系統(tǒng)。替換后的第一 zygote進(jìn)程的功能除了包括初始的zygote進(jìn)程的功能之外,還添加了監(jiān)控各應(yīng)用是否調(diào)用權(quán)限驗(yàn)證函數(shù)。
[0094]在實(shí)際應(yīng)用中,可以利用Xposed框架實(shí)現(xiàn)將Android系統(tǒng)初始的孵化器進(jìn)程替換為指定的第一孵化器進(jìn)程。其中,Xposed框架是一款可以在不修改APK(AndroidPackage,安卓安裝包)的情況下影響程序運(yùn)行的框架服務(wù),基于它可以制作出許多功能強(qiáng)大的模塊,且在功能不沖突的情況下同時(shí)運(yùn)作。所以,在本發(fā)明實(shí)施例中,利用Xposed框架,將Android系統(tǒng)初始的孵化器進(jìn)程替換為指定的第一孵化器進(jìn)程,但是不會(huì)影響Android系統(tǒng)原始的其他任何功能。
[0095]子步驟212,通過所述第一孵化進(jìn)程將所述鉤子函數(shù)注入所述目標(biāo)應(yīng)用的應(yīng)用進(jìn)程中。
[0096]基于前述第一 zygote進(jìn)程的邏輯,可以通過第一 zygote進(jìn)程將鉤子函數(shù)注入各應(yīng)用的應(yīng)用進(jìn)程中。
[0097]優(yōu)選地,子步驟212,包括:
[0098]子步驟2121,通過所述第一孵化進(jìn)程監(jiān)控所述目標(biāo)應(yīng)用的目標(biāo)應(yīng)用進(jìn)程是否開始啟動(dòng)。
[0099]在實(shí)際應(yīng)用中,在各應(yīng)用調(diào)用權(quán)限驗(yàn)證函數(shù)之前,首先需要啟動(dòng)該應(yīng)用的應(yīng)用進(jìn)程,進(jìn)而可以利用應(yīng)用進(jìn)程調(diào)用權(quán)限驗(yàn)證函數(shù)。
[0100]在本發(fā)明實(shí)施例中,可以由第一孵化進(jìn)程監(jiān)控各應(yīng)用的應(yīng)用進(jìn)程是否開始啟動(dòng)。[0101 ]子步驟2122,如果所述目標(biāo)應(yīng)用的目標(biāo)應(yīng)用進(jìn)程開始啟動(dòng),則將所述鉤子函數(shù)注入所述目標(biāo)應(yīng)用的應(yīng)用進(jìn)程,完成目標(biāo)應(yīng)用進(jìn)程的啟動(dòng)。
[0102]鉤子(Hook)函數(shù)的本質(zhì)是一段用以處理系統(tǒng)消息的程序,可以通過系統(tǒng)調(diào)用,把它注入系統(tǒng)。在本發(fā)明實(shí)施例中,可以在應(yīng)用進(jìn)程啟動(dòng)時(shí),由第一zygote進(jìn)程,將鉤子函數(shù)注入各應(yīng)用進(jìn)程中,然后完成應(yīng)用進(jìn)程的啟動(dòng)。
[0103]在實(shí)際應(yīng)用中將鉤取函數(shù)對(duì)應(yīng)的SO庫注入該應(yīng)用進(jìn)程,該SO庫包含鉤子函數(shù)的邏輯代碼,從而可以監(jiān)聽該應(yīng)用進(jìn)程是否調(diào)用權(quán)限驗(yàn)證函數(shù)。
[0104]步驟220,監(jiān)控目標(biāo)應(yīng)用的Activity的窗口啟用函數(shù)是否調(diào)用異常捕獲函數(shù);如果Activity的窗口啟用函數(shù)調(diào)用異常捕獲函數(shù),則進(jìn)入步驟230。
[0105]步驟230,通過鉤子函數(shù)鉤取所述異常捕獲函數(shù)。
[0106]步驟240,通過所述異常捕獲函數(shù)獲取異常消息。
[0107]步驟250,將所述異常消息進(jìn)行統(tǒng)計(jì)。
[0108]步驟260,判斷是否有重復(fù)的異常消息;如果有重復(fù)的異常消息,則進(jìn)入步驟270。
[0109]在實(shí)際應(yīng)用中,在針對(duì)目標(biāo)應(yīng)用進(jìn)行崩潰統(tǒng)計(jì)時(shí),在打開一個(gè)界面后,測(cè)試人員可能會(huì)切換至另一界面,則前一界面對(duì)應(yīng)的Activity在棧中的位置會(huì)下移,新產(chǎn)生的界面對(duì)應(yīng)的Activity會(huì)取代前一界面對(duì)應(yīng)的Activity在桟頂?shù)奈恢谩4藭r(shí)前一界面對(duì)應(yīng)的程序仍然在后臺(tái)保持運(yùn)行的狀態(tài)。
[0110]所以,當(dāng)目標(biāo)應(yīng)用出現(xiàn)異常導(dǎo)致崩潰時(shí),則此時(shí)與目標(biāo)應(yīng)用對(duì)應(yīng)的顯示的Activity以及在后臺(tái)運(yùn)行的Activity都會(huì)同時(shí)調(diào)用異常捕獲函數(shù),然后執(zhí)行步驟230-250,那么就會(huì)針對(duì)該異常情況,同時(shí)獲取多個(gè)異常消息,那么在這種情況下,所獲取的多個(gè)異常消息是一樣的。
[0111]由此可見,在實(shí)際應(yīng)用中可能會(huì)出現(xiàn)獲取的異常消息是重復(fù)的情況,所以在本發(fā)明實(shí)施例中,
當(dāng)前第2頁1 2 3 4 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1