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

安卓應用日志的實現(xiàn)方法和裝置與流程

文檔序號:12801926閱讀:665來源:國知局
安卓應用日志的實現(xiàn)方法和裝置與流程

本申請涉及計算機及軟件技術領域,尤其涉及一種安卓應用日志的實現(xiàn)方法和裝置。



背景技術:

在軟件開發(fā)和測試過程中,對于定位軟件中存在的問題,日志具有難以替代的作用。即使在軟件完成測試、正式發(fā)布之后,仍有可能存在缺陷,定位缺陷如果沒有日志來輔助,無異于盲人摸象。

對android(安卓)系統(tǒng)中的應用,可以使用系統(tǒng)提供的日志工具來產(chǎn)生應用的日志,但是需要將運行應用的移動設備通過usb(universalserialbus,通用串行總線)等本地連接方式接入個人電腦后,利用個人電腦上的adb(androiddebugbridge,安卓調試橋)工具才能查看和分析這些日志。

現(xiàn)有技術還提供了另一種獲得應用日志的方案,運行一個日志獲取進程,通過調用android系統(tǒng)提供的函數(shù),實時向android自帶的系統(tǒng)日志進程請求某個應用的日志,并且將獲得的日志傳遞給該應用的進程。這樣,查看日志不再需要本地連接個人電腦。但是,這種方案需要運行一個新的進程來在系統(tǒng)日志進程和應用進程之間傳遞日志,實現(xiàn)復雜;并且由于安卓的系統(tǒng)日志進程始終處于運行狀態(tài),這個新的日志獲取進程也需要一直運行,要一直占用移動設備上有限的系統(tǒng)資源,并且使得移動設備耗電量增加。



技術實現(xiàn)要素:

有鑒于此,本申請?zhí)峁┮环N安卓應用日志的實現(xiàn)方法,包括:

將本應用的日志記錄寫入屬于本應用進程的存儲空間;

讀取所述日志記錄,根據(jù)預定條件生成本應用的日志。

本申請還提供了一種安卓應用日志的實現(xiàn)裝置,包括:

日志記錄寫入單元,用于將本應用的日志記錄寫入屬于本應用進程的存儲空間;

應用日志生成單元,用于讀取所述日志記錄,根據(jù)預定條件生成本應用的日志。

由以上技術方案可見,本申請的實施例中,應用進程將自身的日志記錄寫入到本應用進程的存儲空間,而非系統(tǒng)日志進程的存儲空間,應用進程可以利用這些日志記錄生成本應用的日志,從而不必增加新的進程即可實現(xiàn)通過應用進程所在的設備或遠程查看應用的日志,實現(xiàn)簡單,節(jié)省了所在設備的資源,不會對耗電量造成影響。

附圖說明

圖1是本申請實施例中一種安卓應用日志的實現(xiàn)方法的流程圖;

圖2是本申請應用示例中一種應用日志生成過程的示意圖;

圖3是終端或服務器的一種硬件結構圖;

圖4是本申請實施例中一種安卓應用日志的實現(xiàn)裝置的邏輯結構圖。

具體實施方式

android系統(tǒng)提供了自帶的日志實現(xiàn)機制。系統(tǒng)中運行的應用可以通過調用android.util.log類來輸出應用的日志記錄。android.util.log類提供了log.v()、log.d()、log.i()、log.w()、log.e()、log.println()等多個java層方法,可以由應用進程直接調用,來將應用進程在運行中產(chǎn)生的日志記錄輸出到系統(tǒng)的日志設備文件中。系統(tǒng)的日志設備文件用來在系統(tǒng)中運行的所有應用進程與android系統(tǒng)自帶的系統(tǒng)日志進程logcat之間傳遞日志記錄。系統(tǒng)日志進程logcat在日志設備文件中讀取所有應用的日志記錄,生成各個應用 的日志,用戶可以通過運行在本地連接的個人電腦上adb工具來查看。而前述現(xiàn)有技術的實現(xiàn)方案中,則是運行一個新的進程,來向系統(tǒng)日志進程logcat請求屬于某個應用的日志,并對logcat進程是否生成了該應用的新日志進行實時監(jiān)控,以及時獲得該應用的新日志。

本申請的實施例提出一種新的安卓應用日志的實現(xiàn)方法,將應用進程產(chǎn)生的日志記錄的輸出,從現(xiàn)有技術中的系統(tǒng)日志設備文件修改為屬于本應用進程的存儲空間,由應用進程利用日志記錄來生成日志,這樣,不需額外的進程即可在應用所安裝的設備上或者遠程查看該應用的日志,避免了對設備系統(tǒng)資源和電量的消耗,以解決現(xiàn)有技術中存在的問題。

本申請的實施例應用在運行android系統(tǒng)應用程序的終端或服務器上,其中,終端可以是手機、平板電腦、pc(personalcomputer,個人電腦)、筆記本等設備;服務器可以是物理或邏輯服務器;不做限定。

本申請的實施例中,android應用日志的實現(xiàn)方法的流程如圖1所示。

步驟110,將本應用的日志記錄寫入屬于本應用進程的存儲空間。

android系統(tǒng)為每個進程分配了獨立的存儲空間,一個進程不能直接訪問屬于另一個進程的存儲空間。每個應用的日志記錄由該應用的進程來搜集,本發(fā)明的實施例中,應用進程在采集運行中的日志記錄后,將日志記錄寫入到android系統(tǒng)為本應用進程分配的存儲空間中。根據(jù)android系統(tǒng)所在設備的具體實現(xiàn),存儲空間可以是內存、虛擬內存、閃存或其他存儲設備中的一段到幾段可讀寫的地址范圍。

應用進程可以采用自定義的方式來采集本應用的日志記錄,并將采集到日志記錄寫入屬于本應用進程的存儲空間中,但是,這種方式改變了開發(fā)人員的習慣,并且增加了應用的編程復雜程度。為了避免上述兩個問題,在一種實現(xiàn)方式中,可以利用android系統(tǒng)提供的native函數(shù)注冊機制來將應用進程日志記錄的輸出,由現(xiàn)有的設備文件修改為分配給本應用進程的存儲空間。

android系統(tǒng)中的java層方法在運行時,其調用的每個函數(shù)對應于java 虛擬機中的一個數(shù)據(jù)結構,該數(shù)據(jù)結構有屬性來表示該函數(shù)是否是一個native函數(shù),并且包含一個指針來指向對應的native函數(shù)。android的jni提供了一個動態(tài)注冊native函數(shù)的方式,在動態(tài)注冊后java虛擬機中該函數(shù)對應的數(shù)據(jù)結構中,指針會指向新注冊的native函數(shù),這樣,在java虛擬機將調用新注冊的native函數(shù),而不會運行動態(tài)注冊前指針指向的native函數(shù)。本申請的實施例中,可以通過動態(tài)注冊用于日志記錄輸出的native函數(shù),在新注冊的native函數(shù)中將日志記錄輸出到分配給本應用進程的存儲空間中,即可通過調用注冊后的native函數(shù)來將本應用的日志記錄寫入屬于本應用進程的存儲空間。這樣,只要修改并動態(tài)注冊用于日志記錄輸出的native函數(shù),開發(fā)人員調用動態(tài)注冊后android系統(tǒng)的日志工具即可實現(xiàn)本步驟。

具體而言,應用進程可以通過調用android系統(tǒng)提供的android.util.log類中的各種java層方法,如log.v()、log.d()、log.i()、log.w()、log.e()、log.println()等來輸出應用運行中產(chǎn)生的日志記錄。android.util.log類中的上述java層方法都通過調用jni(javanativeinterface,java本地接口)的native(本地)函數(shù)println_native來將應用的日志記錄輸出到系統(tǒng)的日志設備文件。這樣,修改println_native函數(shù),將日志記錄的輸出從系統(tǒng)日志設備文件修改為應用進程的存儲空間后,動態(tài)注冊修改后的println_native函數(shù),開發(fā)人員在編程時仍調用android.util.log類中的上述各種java層方法來實現(xiàn)日志記錄的輸出,而該應用的日志記錄即可寫入到屬于該應用進程的存儲空間中。

應用進程可以在屬于其的存儲空間中設置一段緩沖區(qū),來存放在運行的過程中不斷產(chǎn)生的日志記錄。應用進程可以將本應用的日志記錄按照循環(huán)隊列寫入設置的緩沖區(qū)中。當有新的日志記錄產(chǎn)生時,應用進程將新的日志記錄寫入循環(huán)隊列當前寫指針指向的存儲位置,并將寫指針向循環(huán)隊列的尾部移動,如果寫指針已經(jīng)到達循環(huán)隊列尾部,則將寫指針置為循環(huán)隊列的頭部。循環(huán)隊列的具體實現(xiàn)方式可以借鑒現(xiàn)有技術中系統(tǒng)設備文件的循環(huán)隊列實現(xiàn)方式,不再贅述。

步驟120,讀取本應用進程存儲空間中的日志記錄,根據(jù)預定條件生成 本應用的日志。

對采用循環(huán)隊列緩沖區(qū)來寫入日志記錄的實現(xiàn),當緩沖區(qū)中有未讀取的日志記錄時,讀取這些日志記錄來生成本應用的日志。例如,應用進程可以讀取當前讀指針指向的日志記錄,并在讀取后將讀指針向循環(huán)隊列的尾部移動,如果讀指針已經(jīng)到達循環(huán)隊列尾部,則將讀指針置為循環(huán)隊列的頭部。由于日志記錄在應用運行中不斷被寫入緩沖區(qū),當有新的日志記錄寫入后,讀指針與寫指針不重合,此時表明緩沖區(qū)中有未讀取的日志記錄,則應用進程可以進行日志記錄的讀取,直到讀指針與寫指針重合。

應用進程可以通過預定條件來控制用哪些記錄生成日志和所生成日志的形式。一個例子中,可以設置預定過濾條件來對讀取的日志記錄進行篩選,如將符合預定過濾條件的日志記錄寫入本應用的日志中,而將不符合預定過濾條件的日志記錄丟棄。另一個例子中,可以設置預定分組條件將日志記錄歸屬為不同類型的日志,如采用android系統(tǒng)自帶的日志記錄優(yōu)先級,來將不同優(yōu)先級的日志記錄,作為不同類型的日志寫入到本應用日志中。預定過濾條件和預定分組條件可以結合使用,在對日志記錄按照預定過濾條件進行篩選后,將篩選出的日志記錄再按照預定分組條件來歸為不同類型的日志。

應用進程在生成本應用的日志后,可以將日志保存在本地,供用戶在運行應用的設備上查看該應用的日志;也可以將日志通過通信網(wǎng)絡傳輸給網(wǎng)絡中的其他節(jié)點,供用戶遠程查看。

如果在應用中提供對預定篩選條件、預定分組條件、保存或發(fā)送生成的日志的設置手段,用戶在應用中即可控制是否生成日志、用哪些記錄生成日志、生成怎樣的日志以及如何處理生成的日志。這樣,不僅在應用軟件的調試和測試過程中可以方便高效的得到應用的日志,在應用發(fā)布后,同樣可以在需要時將日志從用戶設備傳輸給開發(fā)人員,便于開發(fā)人員改進未能在測試階段發(fā)現(xiàn)的軟件缺陷。

可見,本申請的實施例中,應用進程將產(chǎn)生的日志記錄輸出到屬于本應用進程的存儲空間,由應用進程自身利用日志記錄來生成日志,從而不必增 加新的進程即可實現(xiàn)通過應用進程所在的設備或遠程查看應用的日志,實現(xiàn)簡單,避免了因跨進程獲取日志對設備系統(tǒng)資源和電量的消耗。

在本申請的一個應用示例中,java層函數(shù)println_java用來將日志記錄寫入到應用進程在其內存里設置的循環(huán)隊列緩沖區(qū)中。某個應用采用android系統(tǒng)提供的native函數(shù)動態(tài)注冊機制,將jni的native函數(shù)println_native動態(tài)注冊為java層println_java函數(shù)。本應用示例的流程示意圖如圖2所示。

該應用的開發(fā)人員在編程時使用android系統(tǒng)原生的日志工具android.util.log來產(chǎn)生本應用的日志記錄。由于android.util.log類中的各個java層方法在將日志記錄寫入存儲區(qū)時都是調用native函數(shù)println_native,而在將println_native函數(shù)動態(tài)注冊為println_java函數(shù)后,當android.util.log類的方法在調用println_native函數(shù)時,實際上調用的是println_java函數(shù)。這樣,在應用運行時,android.util.log類的方法將該應用的日志記錄寫入到該應用內存的循環(huán)隊列緩沖區(qū)中。

應用進程串行讀取循環(huán)隊列緩沖區(qū)中的日志記錄,按照預定篩選條件對日志記錄進行過濾,利用通過篩選的日志記錄生成本應用的日志,保存在本地,同時通過網(wǎng)絡發(fā)送給遠程主機。當收到用戶的指令時,應用進程還可以在所運行的設備上展示在本地保存的日志。

與上述流程實現(xiàn)對應,本申請的實施例還提供了一種安卓應用日志的實現(xiàn)裝置。該裝置可以通過軟件實現(xiàn),也可以通過硬件或者軟硬件結合的方式實現(xiàn)。以軟件實現(xiàn)為例,作為邏輯意義上的裝置,是通過終端或服務器的cpu(centralprocessunit,中央處理器)將對應的計算機程序指令讀取到內存中運行形成的。從硬件層面而言,除了圖3所示的cpu、內存以及非易失性存儲器之外,該裝置所在的終端通常還包括用于進行無線信號收發(fā)的芯片等其他硬件,該裝置所在的服務器通常還包括用于實現(xiàn)網(wǎng)絡通信功能的板卡等其他硬件。

圖4所示為本申請實施例提供的一種安卓應用日志的實現(xiàn)裝置,包括日志記錄寫入單元和應用日志生成單元,其中:日志記錄寫入單元用于將本應 用的日志記錄寫入屬于本應用進程的存儲空間;應用日志生成單元用于讀取所述日志記錄,根據(jù)預定條件生成本應用的日志。

可選的,所述裝置還包括應用日志處理單元,用于將本應用的日志保存在本地或通過網(wǎng)絡傳輸給其他主機。

一個例子中,所述日志記錄寫入單元具體用于:在屬于本應用進程的存儲空間中設置緩沖區(qū),將本應用的日志記錄按照循環(huán)隊列寫入所述緩沖區(qū)。

上個例子中,所述應用日志生成單元可以具體用于:當所述緩沖區(qū)中有未讀取的日志記錄時,讀取所述未讀取的日志記錄,根據(jù)預定條件生成本應用的日志。

可選的,所述預定條件包括預定過濾條件和/或預定分組條件;所述預定過濾條件用來對讀取的日志記錄進行篩選;所述預定分組條件用來將日志記錄歸屬為不同類型的日志。

可選的,所述日志記錄寫入單元具體用于:動態(tài)注冊用于日志記錄輸出的安卓本地native函數(shù),調用注冊后的native函數(shù)將本應用的日志記錄寫入屬于本應用進程的存儲空間。

可選的,所述安卓native函數(shù)包括:println_native函數(shù)。

以上所述僅為本申請的較佳實施例而已,并不用以限制本申請,凡在本申請的精神和原則之內,所做的任何修改、等同替換、改進等,均應包含在本申請保護的范圍之內。

在一個典型的配置中,計算設備包括一個或多個處理器(cpu)、輸入/輸出接口、網(wǎng)絡接口和內存。

內存可能包括計算機可讀介質中的非永久性存儲器,隨機存取存儲器(ram)和/或非易失性內存等形式,如只讀存儲器(rom)或閃存(flashram)。內存是計算機可讀介質的示例。

計算機可讀介質包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術來實現(xiàn)信息存儲。信息可以是計算機可讀指令、數(shù)據(jù)結構、程序的模塊或其他數(shù)據(jù)。計算機的存儲介質的例子包括,但不限于相變內存(pram)、 靜態(tài)隨機存取存儲器(sram)、動態(tài)隨機存取存儲器(dram)、其他類型的隨機存取存儲器(ram)、只讀存儲器(rom)、電可擦除可編程只讀存儲器(eeprom)、快閃記憶體或其他內存技術、只讀光盤只讀存儲器(cd-rom)、數(shù)字多功能光盤(dvd)或其他光學存儲、磁盒式磁帶,磁帶磁磁盤存儲或其他磁性存儲設備或任何其他非傳輸介質,可用于存儲可以被計算設備訪問的信息。按照本文中的界定,計算機可讀介質不包括暫存電腦可讀媒體(transitorymedia),如調制的數(shù)據(jù)信號和載波。

還需要說明的是,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、商品或者設備中還存在另外的相同要素。

本領域技術人員應明白,本申請的實施例可提供為方法、系統(tǒng)或計算機程序產(chǎn)品。因此,本申請可采用完全硬件實施例、完全軟件實施例或結合軟件和硬件方面的實施例的形式。而且,本申請可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(包括但不限于磁盤存儲器、cd-rom、光學存儲器等)上實施的計算機程序產(chǎn)品的形式。

當前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1