,決不作為對本發(fā)明及其應(yīng)用或使用的任何限制。
[0047]對于相關(guān)領(lǐng)域普通技術(shù)人員已知的技術(shù)、方法和設(shè)備可能不作詳細(xì)討論,但在適當(dāng)情況下,所述技術(shù)、方法和設(shè)備應(yīng)當(dāng)被視為說明書的一部分。
[0048]應(yīng)注意到:相似的標(biāo)號和字母在下面的附圖中表示類似項,因此,一旦某一項在一個附圖中被定義,則在隨后的附圖中不需要對其進(jìn)行進(jìn)一步討論。
[0049]圖1為本發(fā)明一實施例中的應(yīng)用崩潰日志的獲取方法的流程圖。圖1中應(yīng)用崩潰日志的獲取方法包括:
[0050]S102,將守護(hù)文件作為代碼數(shù)據(jù)寫入應(yīng)用的殼程序文件中,殼程序文件還包括應(yīng)用程序文件;
[0051 ] S104,運(yùn)行殼程序文件;
[0052] S106,判斷應(yīng)用是否發(fā)生崩潰;
[0053]在S106中,若應(yīng)用發(fā)生崩潰,則執(zhí)行S108。
[0054]S108,通過所述守護(hù)文件獲取所述應(yīng)用的崩潰信息。
[0055]本實施例中,所述應(yīng)用程序文件包括dex文件和SO文件;所述SO文件為所述應(yīng)用程序文件中dex文件進(jìn)行加密保護(hù)的代碼或者應(yīng)用程序文件中的dex文件核心代碼。SO文件是指Iinux下的庫文件,后綴為.so,因此得名。SO文件是ELF格式的動態(tài)鏈接庫文件,該類文件在程序運(yùn)行需要的時候才動態(tài)加載到程序中,支持程序的運(yùn)行。
[0056]殼程序文件為對應(yīng)用程序文件(即安卓安裝包,Android applicat1n packagefile,簡稱為APK,其為ZIP文件格式,但后綴名被修改成.apk,可以通過Unzip等工具解壓看到其內(nèi)部文件結(jié)構(gòu))加殼處理后形成的程序文件,實現(xiàn)了對SO文件的多重保護(hù),可阻止惡意程序?qū)O文件的反匯編分析,提高SO文件的內(nèi)容的安全等級,以及提高應(yīng)用程序文件運(yùn)行的穩(wěn)定性。殼程序文件中包含能夠?qū)颖Wo(hù)處理后的SO文件進(jìn)行解密處理的代碼。在加載運(yùn)行SO文件時,殼程序文件會先于SO文件運(yùn)行,取得優(yōu)先權(quán),對加保護(hù)處理后的SO文件進(jìn)行解密處理,使得SO文件的源代碼恢復(fù)為完整的、代碼排序正常的、無加密的、可完全還原的代碼,進(jìn)而在解殼后可以正常的加載運(yùn)行。
[0057]本實施例中,崩潰信息可包括崩潰的進(jìn)程、崩潰的線程、堆棧信息、寄存器信息、調(diào)用棧信息和Map信息中的一種或幾種。
[0058]本實施例中,應(yīng)用發(fā)生崩潰的原因可為應(yīng)用程序中存在缺陷(Bug),也可以為殼程序文件中存在Bug。
[0059]在本申請實施例中,應(yīng)用的殼程序文件中不僅包括應(yīng)用程序文件,還將守護(hù)文件作為代碼數(shù)據(jù)寫入應(yīng)用的殼程序文件中,從而在運(yùn)行所述殼程序文件時,若應(yīng)用發(fā)生崩潰,能夠通過守護(hù)文件獲取該應(yīng)用的崩潰信息。在保護(hù)應(yīng)用程序文件的基礎(chǔ)上,能夠快速準(zhǔn)確的獲取文件的崩潰信息,定位發(fā)生崩潰的位置,方便后續(xù)對發(fā)生崩潰的文件中的Bug進(jìn)行清除,提高應(yīng)用運(yùn)行的穩(wěn)定性。
[0060]圖2為圖1中判斷應(yīng)用是否發(fā)生崩潰的流程圖,圖2中判斷應(yīng)用是否發(fā)生崩潰進(jìn)一步包括:
[0061 ] S202,啟動殼程序文件,并運(yùn)行殼程序文件中的守護(hù)文件;
[0062]S204,守護(hù)進(jìn)程在主進(jìn)程中注冊各類崩潰信息對應(yīng)的信號,守護(hù)進(jìn)程與守護(hù)程序文件對應(yīng),主進(jìn)程與殼程序文件對應(yīng);
[0063]S206,運(yùn)行應(yīng)用程序文件;
[0064]S208,在主進(jìn)程獲取所述信號時,確定應(yīng)用發(fā)生崩潰。
[0065]在另一個實施例中,圖1中S108通過所述守護(hù)文件獲取所述應(yīng)用的崩潰信息可進(jìn)一步包括:
[0066]守護(hù)進(jìn)程與主進(jìn)程進(jìn)行信息交互;
[0067]守護(hù)進(jìn)程根據(jù)主進(jìn)程獲取的信號確定崩潰進(jìn)程,獲取應(yīng)用的崩潰信息。
[0068]具體的,守護(hù)進(jìn)程通過handler與主進(jìn)程進(jìn)行信息交互。Handler能夠接受守護(hù)線程發(fā)送的數(shù)據(jù),并用此數(shù)據(jù)配合主線程更新。
[0069]在再一個實施例中,所述SO文件還包括debug代碼。此時,守護(hù)進(jìn)程根據(jù)主進(jìn)程獲取的信號確定崩潰進(jìn)程,獲取應(yīng)用的崩潰信息可包括:
[0070]守護(hù)進(jìn)程與崩潰進(jìn)程進(jìn)行交互,利用SO文件中debug代碼通過系統(tǒng)調(diào)用棧(backtrace,追蹤函數(shù))逐步回溯,直至回溯失敗,確定崩潰函數(shù)的位置。
[0071]本實施例中,守護(hù)進(jìn)程通過ptrace系統(tǒng)接口與崩潰進(jìn)程進(jìn)行交互。Ptrate能夠提供了主進(jìn)程觀察和控制其子進(jìn)程(本實施例中對應(yīng)守護(hù)進(jìn)程)執(zhí)行的能力,并允許主進(jìn)程檢查和替換子進(jìn)程的內(nèi)核鏡像(包括寄存器)的值。其基本原理是:當(dāng)使用了Ptrace跟蹤后,所有發(fā)送給被跟蹤的子進(jìn)程的信號(除了 SIGKILL,SIGKILL信號不能被捕捉、封鎖或者忽略),都會被轉(zhuǎn)發(fā)給主進(jìn)程,而子進(jìn)程則會被阻塞,這時子進(jìn)程的狀態(tài)就會被系統(tǒng)標(biāo)注為TASK_TRACED。而主進(jìn)程收到信號后,就可以對停止下來的子進(jìn)程進(jìn)行檢查和修改,然后讓子進(jìn)程繼續(xù)運(yùn)行。
[0072]與上一實施例相比,本實施例能夠利用SO文件中debug代碼通過系統(tǒng)調(diào)用桟逐步回溯,以在應(yīng)用崩潰時定位崩潰函數(shù)的位置,方便后續(xù)Bug的查找和修改,進(jìn)而提高殼程序文件與應(yīng)用程序的兼容性以及應(yīng)用運(yùn)行的穩(wěn)定性。
[0073]圖3為本發(fā)明另一實施例中的應(yīng)用崩潰日志的獲取方法的流程圖。圖3中應(yīng)用崩潰日志的獲取方法包括:
[0074]S302,將守護(hù)文件作為代碼數(shù)據(jù)寫入應(yīng)用的殼程序文件中,殼程序文件還包括應(yīng)用程序文件;
[0075]S304,運(yùn)行殼程序文件;
[0076]S306,判斷應(yīng)用是否發(fā)生崩潰;
[0077]在S306中,若應(yīng)用發(fā)生崩潰,則執(zhí)行S308。
[0078]S308,通過所述守護(hù)文件獲取所述應(yīng)用的崩潰信息;
[0079]S310,將所獲取的崩潰信息發(fā)送至殼程序文件的開發(fā)方或者應(yīng)用程序文件的開發(fā)方。
[0080]本實施例中,崩潰信息可包括崩潰的進(jìn)程、崩潰的線程、堆棧信息、寄存器信息、調(diào)用棧信息和Map信息中的一種或幾種,以用于崩潰位置的確定。
[0081]與圖1中實施例相比,本實施例還將所獲取的崩潰信息發(fā)送至殼程序文件的開發(fā)方或者應(yīng)用程序文件的開發(fā)方,方便開發(fā)者及時查看崩潰信息,確定崩潰位置,以及查找崩潰原因,利于殼程序文件中Bug的及時查找和清除,提高了應(yīng)用運(yùn)行的穩(wěn)定性。
[0082]在另一個實施例中,崩潰信息還可包括安裝應(yīng)用的設(shè)備型號。殼程序文件的開發(fā)方或者應(yīng)用程序文件的開發(fā)方在安裝應(yīng)用的設(shè)備型號之后,能夠?qū)こ绦蛭募惭b于對應(yīng)的設(shè)備中,進(jìn)行場景重現(xiàn),便于開發(fā)方查找和清除殼程序文件中的Bug,提高應(yīng)用運(yùn)行的穩(wěn)定性。
[0083]在再一個實施例中,每隔預(yù)設(shè)時間,通過郵件將所獲取的崩潰信息發(fā)送至殼程序文件的開發(fā)方或者應(yīng)用程序文件的開發(fā)方。與上一實施例相比,本實施例提供了通知開發(fā)方崩潰信息的郵件,能夠提醒開發(fā)者及時查看崩潰信息,確定崩潰位置,以及查找崩潰原因,利于殼代碼文件中Bug的及時查找和清除,提高了應(yīng)用運(yùn)行的穩(wěn)定性。
[0084]下面根據(jù)本申請實施例,提供了一種應(yīng)用崩潰日志的獲取裝置。
[0085]需要說明的是,本申請實施例的應(yīng)用崩潰日志的獲取裝置可以用于執(zhí)行本申請實施例的應(yīng)用崩潰日志的獲取方法,根據(jù)本申請實施例的應(yīng)用崩潰日志的獲取方法也可以通過本申請實施例的應(yīng)用崩潰日志的獲取裝置來執(zhí)行。
[0086]圖4為本發(fā)明一實施例中的應(yīng)用崩潰日志的獲取裝置的示意圖。圖4中的應(yīng)用崩潰日志的獲取裝置包括:
[0087]寫入單元10,用于將守護(hù)文件作為代碼數(shù)據(jù)寫入應(yīng)用的殼程序文件中,殼程序文件還包括應(yīng)用程序文件;
[0088]處理單元20,用于運(yùn)行殼程序文件,以及確定應(yīng)用是否發(fā)生崩潰;
[0089]獲取單元30,用于在應(yīng)用發(fā)生崩潰時,通過守護(hù)文件獲