adb進階知識,如何過濾只查看某一個app的日志


前面大概學習了adb基礎,但是adb的存在,在測試人員中究竟有什么必要,以及看log時,那么多的log,讓我們看個屁啊,所以這一次,我決定一定要把adb這件事情搞清楚。
 
1.先來看最感興趣的adb日志
首先來了解一共概念,安卓的日志有那些:
Android 系統的日志分為兩部分,底層的 Linux 內核日志輸出到 /proc/kmsg,Android 的日志輸出到 /dev/log。一般我們說的adb logcat看的都是android的日志
 
使用adb shell dmesg 可以能看Android的內核日志,內核日志我們可以做一些事情,比如衡量內核啟動時間,在系統啟動完畢后的內核日志里找到  Freeing init memory 那一行前面的時間就是。
內核啟動時間看了有啥用呢?
 
 
作為測試做常用的adb查看日志命令:
1.adb logcat -v time   打印log的詳情日志
2.adb logcat -v time > D:\log.txt   把日志輸出到電腦的上查看,在窗口打印的同時,文件也會同時打印的
3.adb logcat -c       清除之前的日志信息,一般在看日志前都會執行這個命令,目的是好看日志,不然前面的日志應該會超級多,不好看問題
 
2.過濾規則
有兩種規則,一種是按照日志級別過濾,一種是按照日志中的tag過濾,當然會有混合日志和tag在一起過濾
過濾格式:
adb logcat <tag>[:priority]
tag表示標簽,priority輸出的級別,注意如果要是要根據級別查看時記得要tag一定要給,如果沒有指定,那個tag哪里輸入*號就行了
 
日志級別過濾:
默認級別為V,輸出人日志最低,日志級別最低
D —— Debug
I —— Info
W —— Warning
E —— Error
F —— Fatal  致命
S —— Silent(最高,啥也不輸出)
實例:比如想要查看手機的級別為錯誤的日志
 
adb logcat *:E(不區分大小寫)
 
tag級別過濾:
用這個過濾首先要知道手機上的tag,可以用這個命令查看手機日志的tag
adb logcat -v tag
輸出后格式會是:<priority>/<tag>: <message>
 
但是在日志中的tag究竟是什么意思呢?標簽,顧名思義,但是還是不明白,后面明白再來看這快
現在我要知道的就是tag如何過濾日志,可以使用下面的命令:
adb logcat ActivityManager:I
發現tag過濾並沒有生效,為啥??
而網上下面這個命令卻是生效的:
adb logcat ActivityManager:I PowerManagerService:D *:S
 
組合起來的使用其實再這里也講了
 
3, 使用管道進程來查看日志,這個應該是最好的
adb logcat | grep MyApp
adb logcat | grep -i myapp #忽略大小寫。
后期強大的話,還可以使用正則表達式來學習
 
再windows上不能使用grep關鍵字,而是應該用findstr
只抓取某個app的命令        
adb logcat | findstr app進程號
 
如何只查看某個app日志的方法
1.adb shell pm list packages -3 查看非系統第三方應用包名
2.adb shell ps | findstr vchat.A  查看包名進程
3.根據進程來查看過濾app的日志
adb logcat | findstr vchat.A
 
遇到問題:查看app日志時,日志打印到一半莫名報錯,寫入錯誤?

原因如下:adb logcat  findstr 有時候會出現 寫入錯誤,需要設置一下語言編碼CHCP 65001 ,設置為UTF-8編

命令行中,有個命令是chcp,這個命令是用來顯示當前活動代碼頁編號的,

 ANSI的編碼環境的代號是936

 utf-8編碼的65001

執行:CHCP 65001就設置成utf-8編碼的了

 
 
 
其他常用命令:

一、把日志輸出到手機指定目錄

其命令為:adb logcat -f / sdcard/zjdata.bredbaby/log/1.txt

 

二,很多沒用的一起加載,如果只想抓取被測app的日志,就需要對包名進行過濾,使用find過濾包名

adb logcat find | "vchat.A"

 
常用命令:

常用命令

1、查看adb版本

adb version

2、查詢pc鏈接的所有android 設備

adb devices

3、裝包

如果在電腦D盤下面有個a.apk文件,只需要一行命令就安裝到手機上:

adb install d:/a.apk

如果已經安裝了這個程序,可以通過以下命令覆蓋安裝:adb install -r d:/a.apk

保留數據和緩存文件,重新安裝 apk adb install -r a.apk

安裝包在android設備中

adb shell pm install apk在移動端的路徑

4、卸載包

adb uninstall 包名

卸載軟件但是保留配置和緩存文件:

adb uninstall -k 包名

如果機器上有多個模擬器或真機,需要使用-s命令行參數指定具體的模擬器或真機。例如,下面的命令分別在模擬器和真機上安裝、重新安裝和卸載應用程序。

在emulator-5554模擬器上安裝ebook.apk

adb -s emulator-5554 install ebook.apk

在真機上安裝ebook.apk

adb -s HT9BYL904399 install ebook.apk

在emulator-5554模擬器上重新安裝ebook.apk

adb -s emulator-5554 install -r ebook.apk

在真機上重新安裝ebook.apk

adb -s HT9BYL904399 install -r ebook.apk

在emulator-5554模擬器上卸載ebook.apk(不保留數據和緩沖目錄)

adb -s emulator-5554 uninstall ebook包名

在真機上卸載ebook.apk(保留數據和緩沖目錄)

adb -s HT9BYL904399 uninstall -k ebook包名

5、包管理,如何知道一個app包名呢

包名(Package name)在Android系統中是判斷一個App的唯一標識,不同的App可以有同樣的名字,但是它的包名不可以相同。

例如我們可以自己編譯生成一個App也叫“微信”,但是我們的App的包名不能為com.tencent.mm

(微信的包名為這個),如果指定的包名和微信一致,那么手機上只允許安裝這兩個App中的其中一個。說到這很多人就會有疑問,如果有人惡意做了一個和微信內容一模一樣的App,名字和包名都和微信一樣,那怎么分辨呢?Android中為了防止這樣的情況,還做了一個叫簽名的東西,微信的簽名一般我們是沒有的,所以就可以通過簽名來標識出這款App到底是誰的了。

1、看源代碼。當有源代碼的時候,可以到工程目錄下的 “AndroidManifest.xml”文件下查看package這一項。

2、adb命令查看列出手機裝的所有 app 的包名:

adb shell pm list packages

3.列出系統應用的所有包名:

adb shell pm list packages -s

4.列出除了系統應用的第三方應用包名:

adb shell pm list packages -3

5.推測一個包中可能帶有的關鍵字:

adb shell dumpsys activity | findstr mFocusedActivity

6.清除應用數據與緩存

adb shell pm clear 應用包名

6、文件相關

1、接收電腦文件

語法:adb push local remote

案例:adb push d:/a.txt /sdcard/

把電腦 D 盤下的 a.txt 文件推送到手機 sdcard 目錄下

2、上傳文件到電腦

語法:adb pull remote local

案例:adb pull /sdcard/a.txt d:/ 上傳位於/sdcard/目錄下的 a.txt 文件到電腦的 D 盤根目錄下

7、截屏、錄屏

1.截屏

adb shell screencap /sdcard/a.png

adb shell /system/bin/screencap -p /sdcard/a.png

2.使用adb進行屏幕錄像

adb shell screenrecord /sdcard/a.mp4

通過ctrl+c停止錄制,你可以在sdcard目錄下查看。媽媽再也不擔心我到處找錄制視頻的軟件了。

8、shell

進入shell adb shell

退出shell

exit

9、手機信息收集

獲取序列號

adb get-serialno

獲取 MAC 地址

adb shell cat /sys/class/net/wlan0/address

查看設備型號

adb shell getprop ro.product.model

查看 Android 系統版本

adb shell getprop ro.build.version.release

查看屏幕分辨率

adb shell wm size

查看屏幕密度

adb shell wm density

查看permissions adb shell pm list permissions

查看系統的危險權限dangerous permissions adb shell pm list permissions -d -g

10、adb服務器殺死和啟動

adb kill-server

adb start-server

場景:比如希望移動adb文件夾,或者adb命令得不到想要的內容時

11、與進程相關:

列出當前進程

adb shell ps | findstr 包名

殺死某個包的進程

adb shell am force-stop 包名

12、與性能相關的一些內容

獲取內存:

adb shell dumpsys meminfo 包名

獲取cpu:

adb shell dumpsys cpuinfo | findstr 包名

adb shell top -n 1 | findstr 包名

獲取流暢度相關:

adb shell dumpsys gfxinfo 包名

13、app的啟動停止

如果想在模擬器或真機上運行已安裝的應用程序,除了直接在模擬器或真機上操作外,還可以使用如下的命令直接運行程序。

activity的獲取方式見14條。

在emulator-5554模擬器上運行ebook.apk

adb -s emulator-5554 shell am start -n net.blogjava.mobile.ebook/net.blogjava.mobile.ebook.Main

在真機上運行ebook.apk

adb -s HT9BYL904399 shell am start -n net.blogjava.mobile.ebook/net.blogjava.mobile.ebook.Main

其中Main是ebook.apk的主Activity。相當於Windows應用程序的主窗體或Web應用程序的主頁面。am是shell命令。

14、與Activity操作等相關

1.查看當前顯示的activity adb shell dumpsys activity | findstr "mFocusedActivity"

結果: mFocusedActivity: ActivityRecord{93a4f9 u0 com.youdao.note/.activity2.MainActivity t36}

注意:我們只需要這一部分:com.youdao.note/.activity2.MainActivity即包名+activity

2.找到當前手機內的top Activity:

adb shell dumpsys activity top | findstr ACTIVITY

3.啟動某一個Activity: adb shell am start activity路徑

adb shell am start com.youdao.note/.activity2.MainActivity

15、查看8080端口是哪個應用占用

netstat -ano|findstr "8080"

adb shell top -n 1 | findstr vchat.faceme
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM