adb進階知識

adb進階知識,如何過濾只查看某一個app的日志
前面大概學(xué)習(xí)了adb基礎(chǔ),但是adb的存在,在測試人員中究竟有什么必要,以及看log時,那么多的log,讓我們看個屁啊,所以這一次,我決定一定要把adb這件事情搞清楚。

1.先來看最感興趣的adb日志
首先來了解一共概念,安卓的日志有那些:
Android 系統(tǒng)的日志分為兩部分,底層的 Linux 內(nèi)核日志輸出到 /proc/kmsg,Android 的日志輸出到 /dev/log。一般我們說的adb logcat看的都是android的日志
使用adb shell dmesg 可以能看Android的內(nèi)核日志,內(nèi)核日志我們可以做一些事情,比如衡量內(nèi)核啟動時間,在系統(tǒng)啟動完畢后的內(nèi)核日志里找到 Freeing init memory 那一行前面的時間就是。
內(nèi)核啟動時間看了有啥用呢?
科普文章鏈接:https://blog.csdn.net/u010164190/article/details/51396485
作為測試做常用的adb查看日志命令:
1.adb logcat -v time 打印log的詳情日志
2.adb logcat -v time > D:\log.txt 把日志輸出到電腦的上查看,在窗口打印的同時,文件也會同時打印的
3.adb logcat -c 清除之前的日志信息,一般在看日志前都會執(zhí)行這個命令,目的是好看日志,不然前面的日志應(yīng)該會超級多,不好看問題

2.過濾規(guī)則
有兩種規(guī)則,一種是按照日志級別過濾,一種是按照日志中的tag過濾,當(dāng)然會有混合日志和tag在一起過濾
過濾格式:
adb logcat <tag>[:priority]
tag表示標(biāo)簽,priority輸出的級別,注意如果要是要根據(jù)級別查看時記得要tag一定要給,如果沒有指定,那個tag哪里輸入*號就行了
日志級別過濾:
默認級別為V,輸出人日志最低,日志級別最低
D —— Debug
I —— Info
W —— Warning
E —— Error
F —— Fatal 致命
S —— Silent(最高,啥也不輸出)
實例:比如想要查看手機的級別為錯誤的日志

adb logcat *:E(不區(qū)分大小寫)
tag級別過濾:
用這個過濾首先要知道手機上的tag,可以用這個命令查看手機日志的tag
adb logcat -v tag
輸出后格式會是:<priority>/<tag>: <message>

但是在日志中的tag究竟是什么意思呢?標(biāo)簽,顧名思義,但是還是不明白,后面明白再來看這快
現(xiàn)在我要知道的就是tag如何過濾日志,可以使用下面的命令:
adb logcat ActivityManager:I
發(fā)現(xiàn)tag過濾并沒有生效,為啥??
而網(wǎng)上下面這個命令卻是生效的:
adb logcat ActivityManager:I PowerManagerService:D *:S

組合起來的使用其實再這里也講了

3,使用管道進程來查看日志,這個應(yīng)該是最好的
adb logcat | grep MyApp
adb logcat | grep -i myapp #忽略大小寫。
后期強大的話,還可以使用正則表達式來學(xué)習(xí)

再windows上不能使用grep關(guān)鍵字,而是應(yīng)該用findstr
只抓取某個app的命令
adb logcat | findstr app進程號

如何只查看某個app日志的方法
1.adb shell pm list packages -3 查看非系統(tǒng)第三方應(yīng)用包名
2.adb shell ps | findstr vchat.A 查看包名進程
3.根據(jù)進程來查看過濾app的日志
adb logcat | findstr vchat.A

遇到問題:查看app日志時,日志打印到一半莫名報錯,寫入錯誤?
原因如下:adb logcat findstr 有時候會出現(xiàn) 寫入錯誤,需要設(shè)置一下語言編碼CHCP 65001 ,設(shè)置為UTF-8編
命令行中,有個命令是chcp,這個命令是用來顯示當(dāng)前活動代碼頁編號的,
 ANSI的編碼環(huán)境的代號是936
 utf-8編碼的65001
執(zhí)行:CHCP 65001就設(shè)置成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 設(shè)備
adb devices
3、裝包
如果在電腦D盤下面有個a.apk文件,只需要一行命令就安裝到手機上:
adb install d:/a.apk
如果已經(jīng)安裝了這個程序,可以通過以下命令覆蓋安裝:adb install -r d:/a.apk
保留數(shù)據(jù)和緩存文件,重新安裝 apk adb install -r a.apk
安裝包在android設(shè)備中
adb shell pm install apk在移動端的路徑
4、卸載包
adb uninstall 包名
卸載軟件但是保留配置和緩存文件:
adb uninstall -k 包名
如果機器上有多個模擬器或真機,需要使用-s命令行參數(shù)指定具體的模擬器或真機。例如,下面的命令分別在模擬器和真機上安裝、重新安裝和卸載應(yīng)用程序。
在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(不保留數(shù)據(jù)和緩沖目錄)
adb -s emulator-5554 uninstall ebook包名
在真機上卸載ebook.apk(保留數(shù)據(jù)和緩沖目錄)
adb -s HT9BYL904399 uninstall -k ebook包名
5、包管理,如何知道一個app包名呢
包名(Package name)在Android系統(tǒng)中是判斷一個App的唯一標(biāo)識,不同的App可以有同樣的名字,但是它的包名不可以相同。
例如我們可以自己編譯生成一個App也叫“微信”,但是我們的App的包名不能為com.tencent.mm
(微信的包名為這個),如果指定的包名和微信一致,那么手機上只允許安裝這兩個App中的其中一個。說到這很多人就會有疑問,如果有人惡意做了一個和微信內(nèi)容一模一樣的App,名字和包名都和微信一樣,那怎么分辨呢?Android中為了防止這樣的情況,還做了一個叫簽名的東西,微信的簽名一般我們是沒有的,所以就可以通過簽名來標(biāo)識出這款A(yù)pp到底是誰的了。
1、看源代碼。當(dāng)有源代碼的時候,可以到工程目錄下的 “AndroidManifest.xml”文件下查看package這一項。
2、adb命令查看列出手機裝的所有 app 的包名:
adb shell pm list packages
3.列出系統(tǒng)應(yīng)用的所有包名:
adb shell pm list packages -s
4.列出除了系統(tǒng)應(yīng)用的第三方應(yīng)用包名:
adb shell pm list packages -3
5.推測一個包中可能帶有的關(guān)鍵字:
adb shell dumpsys activity | findstr mFocusedActivity
6.清除應(yīng)用數(shù)據(jù)與緩存
adb shell pm clear 應(yīng)用包名
6、文件相關(guān)
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目錄下查看。媽媽再也不擔(dān)心我到處找錄制視頻的軟件了。
8、shell
進入shell adb shell
退出shell
exit
9、手機信息收集
獲取序列號
adb get-serialno
獲取 MAC 地址
adb shell cat /sys/class/net/wlan0/address
查看設(shè)備型號
adb shell getprop ro.product.model
查看 Android 系統(tǒng)版本
adb shell getprop ro.build.version.release
查看屏幕分辨率
adb shell wm size
查看屏幕密度
adb shell wm density
查看permissions adb shell pm list permissions
查看系統(tǒng)的危險權(quán)限dangerous permissions adb shell pm list permissions -d -g
10、adb服務(wù)器殺死和啟動
adb kill-server
adb start-server
場景:比如希望移動adb文件夾,或者adb命令得不到想要的內(nèi)容時
11、與進程相關(guān):
列出當(dāng)前進程
adb shell ps | findstr 包名
殺死某個包的進程
adb shell am force-stop 包名
12、與性能相關(guān)的一些內(nèi)容
獲取內(nèi)存:
adb shell dumpsys meminfo 包名
獲取cpu:
adb shell dumpsys cpuinfo | findstr 包名
adb shell top -n 1 | findstr 包名
獲取流暢度相關(guān):
adb shell dumpsys gfxinfo 包名
13、app的啟動停止
如果想在模擬器或真機上運行已安裝的應(yīng)用程序,除了直接在模擬器或真機上操作外,還可以使用如下的命令直接運行程序。
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。相當(dāng)于Windows應(yīng)用程序的主窗體或Web應(yīng)用程序的主頁面。am是shell命令。
14、與Activity操作等相關(guān)
1.查看當(dāng)前顯示的activity adb shell dumpsys activity | findstr "mFocusedActivity"
結(jié)果: mFocusedActivity: ActivityRecord{93a4f9 u0 com.youdao.note/.activity2.MainActivity t36}
注意:我們只需要這一部分:com.youdao.note/.activity2.MainActivity即包名+activity
2.找到當(dāng)前手機內(nèi)的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端口是哪個應(yīng)用占用
netstat -ano|findstr "8080"
adb shell top -n 1 | findstr vchat.faceme

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容