您的位置: 首頁 >產經 >

IT動態(tài):淺談Android的日志機制:Log和logcat

2022-04-04 00:29:01 編輯:鄧琛曼 來源:
導讀 5G已經片區(qū)使用,很多小伙伴對通信這塊還不熟系!越來越多的人開始對IT、5G信息方面產生興趣,近來的話題也是引起了很多人的關注,那么既然

5G已經片區(qū)使用,很多小伙伴對通信這塊還不熟系!越來越多的人開始對IT、5G信息方面產生興趣,近來的話題也是引起了很多人的關注,那么既然現(xiàn)在大家都想要知道,小編今天就來給大家針對做個詳細介紹。

感謝IT之家網友 東京特許許可局局長 的原創(chuàng)投稿

注:測試設備Android版本為7.1。

一、日志的概況,Android自帶終端的使用和初次使用logcat

要對應用程序進行調試,記錄日志是最常見快捷的方式。日志可以清楚地展現(xiàn)出應用的運行狀態(tài)。從而給程序員提供修正和改進的建議。

(Windows事件管理器中的Windows系統(tǒng)日志)

和Windows一樣,在Android系統(tǒng)中也提供了類似的日志記錄機制。只不過與Windows不同,在Android中并沒有明顯的可以查看日志的入口。其實Android中已經內置了查看日志的工具,只不過我們需要比較特殊的手段召喚它出來。

(打開開發(fā)者選項,打開本地終端的開關)

(打開啟動器界面中新增的“終端”圖標)

當然,除了以上方法。對于其他基于Android深度優(yōu)化的ROM,本選項被閹割時,可以下載第三方終端模擬器類應用。

(這是一個第三方Terminal應用)

(在黑色界面中輸入logcat,回車執(zhí)行)

1.logcat

二、logcat概況、日志格式、logcat詳細用法、還有MatLog

logcat是Android中用來查看日志的命令行工具(Log Catcher),由圖可知,logcat以

1.---------beginningofxxx

為起點,開始捕捉Android日志。xxx對應這存儲著Android日志記錄器的環(huán)形緩沖區(qū)。Android系統(tǒng)在運行時會時刻在幾個設備文件中的一個中寫入字符串。而這幾個設備文件指向幾個環(huán)形緩沖區(qū)。這是Android日志的記錄原理。而這幾個緩沖區(qū)合稱日志記錄器緩沖區(qū)。

(打開開發(fā)者選項,可以看到有個選項叫做“日志記錄器緩沖區(qū)大小”,默認是256K。由上文所述,日志是循環(huán)寫入環(huán)形緩沖區(qū)的。在通常情況下,寫滿時最舊的日志會被刪除以給新輸出的日志留內存空間。設置的越大就可以保存離當前時間越久遠的日志。但相對地,設置的越大對內存的占用也越大,內存的可用空間也越少,請酌情修改)

默認輸出的日志格式如下文所示:(不帶任何參數(shù)的logcat命令)

1.07-2220:31:21.5659931032WBroadcastQueue:Backgroundexecutionnotallowed:receivingIntent{act=com.tencent.mm.plugin.openapi.Intent.ACTION_HANDLE_APP_REGISTERflg=0x10(hasextras)}tocom.tencent.mm/.plugin.base.stub.WXEntryActivity$EntryReceiver

由六部分組成:

1. 寫下日志時的時間,如上中07-22 20:31:21.565。

2. PID(進程ID),如上中993。

3. TID(線程ID),如上中1032。

4. 優(yōu)先級,在Android中,日志的優(yōu)先級從低到高分以下幾種:

V—Verbose(啰嗦,最低級別,開發(fā)調試中的一些詳細信息,僅在開發(fā)中使用,不可在發(fā)布產品中輸出,不是很常見,包含諸如方法名,變量值之類的信息)

D—Debug(調試,用于調試的信息,可以在發(fā)布產品中關閉,比較常見,開發(fā)中經常選擇輸出此種級別的日志,有時在beta版應用中出現(xiàn))

I—Info(信息,該等級日志顯示運行狀態(tài)信息,可在產品出現(xiàn)問題時提供幫助,從該級別開始的日志通常包含完整意義的英語語句和調試信息,是最常見的日志級別)

W—Warning(警告,運行出現(xiàn)異常即將發(fā)生錯誤或表明已發(fā)生非致命性錯誤,該級別日志通常顯示出執(zhí)行過程中的意外情況,例如將try-catch語句塊中的異常打印堆棧軌跡之后可輸出此種級別日志)

E—Error(錯誤,已經出現(xiàn)可影響運行的錯誤,比如應用crash時輸出的日志)

F—Fatal(嚴重錯誤,比error級別更高,目前我只在android系統(tǒng)內核發(fā)出的日志中看到此種級別。在Android6.0以前表明開發(fā)者認為絕對不應該出現(xiàn)的錯誤,在此以后一般開發(fā)場景下絕不應該輸出此種級別的日志)

S—Silent(寂靜,最高級別,沒有一條日志會屬于這個級別,僅僅作為關閉logcat輸出的過濾器參數(shù))

示例中日志等級顯示為W,表示警告級別。

5. 標簽,標明日志發(fā)起者和方便日志的過濾篩選,如上中BroadcastQueue,表示該日志關于廣播隊列。

6. 正文,本日志的主體內容。示例日志中表示一個后臺執(zhí)行被阻止,并顯示出了接收到的意圖的詳細信息。

在之前的操作中,日志只是輸出了幾段就暫停了輸出。其實在非root的系統(tǒng)權限下,logcat只能夠輸出當前應用動作引起的日志(這里是指終端應用)。如果想獲取全局日志,必須在root權限下獲取,所以。。。

1.kenzo:/$su

2.kenzo:/#logcat

輸入su回車之后再輸入logcat回車,輸出的全局日志看起來像流水一樣,只不過由于新日志的不斷輸出,方向是向上流的。

logcat的使用姿勢很豐富。用法如下:

logcat [選項] [過濾器]?

選項:

-s <過濾器>設置過濾器,后加過濾器,多個過濾器用逗號分隔。若其后不加過濾器。等效于"-s *:S",不輸出日志。

除了方便查看日志的MatLog之外,這里再介紹一個應用叫LiveBoot。這個應用可以將開機時正式進入系統(tǒng)前,還在播放開機動畫時,就將日志顯示在屏幕上。這個功能最大的好處就是當系統(tǒng)長期播放開機動畫時,通過顯示出的日志可以判斷系統(tǒng)是在建立虛擬機緩存(比如在Recovery中清除Cache和Dalvik/ART Cache了之后的重啟)還是變成了bootloop軟磚。(永久開機動畫循環(huán))

(應用界面,可以看到這個應用的作者是大名鼎鼎的誰)

(開機效果,看起來很裝逼不是嗎)

這個工具需要root權限支持。而且并不是都支持所有非類原生ROM,還會稍微拖慢開機時間。不過想到在疑似系統(tǒng)故障的時候不知道系統(tǒng)到底是好是壞的忐忑心情,這點小瑕疵算得了什么?

四、免root獲取全局日志,F(xiàn)lyme6獲取真正全局日志的方法

之前就說過,要想獲取全局日志,必須要在root權限下執(zhí)行l(wèi)ogcat才能達到目的。這樣做的目的是為了保護用戶隱私信息。(大家如果閑著沒事的話,打開MatLog,如果懂點英語的話看看正在輸出的日志會透露出多少用戶隱私。或者正常使用設備一段時間后再用logcat導出日志到文件查看,這樣顯示出的用戶隱私更多)不過,Google并沒有完全禁止免root查看日志。Android中有一個權限叫"android.permission.READ_LOGS"。從字面意思上看就是讀取日志時使用的權限。這個權限默認不授予給第三方應用,如果想要將這個權限授予給第三方應用??梢允褂迷陔娔X上安裝ADB和相關驅動。在Android設備上打開USB調試權限。(adb大家都很熟悉吧)。然后輸入以下命令。

1.adbshellpmgrant<要授權的應用包名>android.permission.READ_LOGS

正常的情況下。執(zhí)行完即退出,不會輸出任何字符。第三方應用在授權之后重新啟動,通過使用shell召喚logcat,即使在非root權限下也能獲取日志。如果出現(xiàn)以下錯誤:

1.Operation not allowed: java.lang.SecurityException:Package<應用包名>hasnotrequestedpermissionandroid.permission.READ_LOGS

則表明應用的清單文件(AndroidManifest.xml)中需要添加以下權限:

1.<uses-permissionandroid:name="android.permission.READ_LOGS"/>

而且目標SDK(targetSdkVersion)必須不小于21。

在MIUI上,可能還會出現(xiàn)這個錯誤。

1.Operationnotallowed:java.lang.SecurityException:grantRuntimePermission:Neitheruser2000norcurrentprocesshasandroid.permission.GRANT_RUNTIME_PERMISSIONS.

其實MIUI默認不允許adb權限更改。如果要想允許權限更改。需要打開USB調試的安全設置開關。

注意:需要登錄MIUI賬號。

由于日志本身的隱私屬性。有一些非原生ROM,就算是在root權限的logcat也無法全部獲取日志。比如說Flyme。這時也需要找深藏的設置開關來解決此問題。

(同樣是點擊系統(tǒng)版本打開開發(fā)者模式)

(設置--輔助功能--開發(fā)者選項--性能優(yōu)化--高級日志輸出--全部允許)

不同的xxOS,XXUI有不同的方法,請大家自行查找。

五、總結

總的來說,這篇文章,也就是圍繞著“Android日志”這個主題講了一些東西。不過個人感覺最好的部分還是在logcat的詳細介紹中。(畢竟這部分我是做得最辛苦的,網上說的太簡單了,每一條命令都是我測試過的。當然,這文章的所有做法我都嚴格測試過以證明其有效性)當然,這篇文章對于普羅大眾來說最大的用處就是知道Android中有日志這個東西,并且能夠查看,導出并使用它。日志中,我認為,盡管只是對于愛好玩機的普羅大眾,也蘊含著豐富的財富。通過查看日志,可以了解到Android系統(tǒng)中的許多奧秘,這種好奇心被滿足的興奮感絕不亞于小時候拆開機械手表查看其中的齒輪運轉所感受到的心情??傊獦Sしみ下さい(請盡情享【shi】受【jian】吧)!謝謝大家!


免責聲明:本文由用戶上傳,如有侵權請聯(lián)系刪除!

精彩推薦

圖文推薦

點擊排行

2016-2022 All Rights Reserved.平安財經網.復制必究 聯(lián)系QQ280 715 8082   備案號:閩ICP備19027007號-6

本站除標明“本站原創(chuàng)”外所有信息均轉載自互聯(lián)網 版權歸原作者所有。