Android開發(fā)中我們有時(shí)候需要借助一些命令幫助更好的高效率定位解決問題拆宛,本文就來介紹一些可能有些隱藏的而卻非常好用的命令铆铆,可以幫我們快速找到問題,這些命令都是本人在開發(fā)中實(shí)踐總結(jié)趟佃,個人覺得非常實(shí)用例书,所以可能對于你不是很有用,但是了解也是很好的攀隔,而Android中的命令很多的皂贩,有些個人覺得沒多大用就不在這里提了,好了昆汹,下面就開始命令的分析總結(jié)明刷。
在說這些命令之前满粗,得先提及一些基本命令用法:
第一個:cat命令
主要用于查看文件內(nèi)容辈末,這個命令的重要性不言而喻,有時(shí)候我們想查看文件信息,當(dāng)然可以借助軟件查看挤聘,但是這個命令非常便捷轰枝,更重要的是他可以結(jié)合grep進(jìn)行過濾內(nèi)容信息。
記住一點(diǎn):Linux中過濾用grep组去,Windows過濾用findstr就可以了鞍陨。
第二個:echo/touch命令
cat命令用于查看文件,echo和touch命令就可以方便的寫文件
下面看一下這兩個命令的結(jié)合使用:
這里可以看到用echo和touch寫內(nèi)容到文件中添怔,然后在cat讀取文件信息湾戳,這里還用到了內(nèi)容重定向符號'>'和'>>';關(guān)于這兩個符號也是非常有用的广料,有時(shí)候我們在執(zhí)行一條命令的時(shí)候可能輸出結(jié)果非常多砾脑,那么這時(shí)候就需要借助重定向把結(jié)果輸出到文本中即可。后面介紹命令會說到這點(diǎn)艾杏。
在常用命令中,我們會區(qū)分非shell命令和shell命令购桑,當(dāng)然區(qū)分的有點(diǎn)不合常規(guī)畅铭,但是為了好理解,這里就是把需要提前adb shell一下運(yùn)行的命令叫做shell命令勃蜘,直接adb shell運(yùn)行命令的叫做非shell命令硕噩。
1、adb shell dumpsys activity top
說明:
????可以查看當(dāng)前應(yīng)用的activity信息
用法:
????運(yùn)行需要查看的應(yīng)用缭贡,然后運(yùn)行此命令即可
案例:adb shell dumpsys activity top
延伸:如果我們直接運(yùn)行adb shell dumpsys也是可以的炉擅,只是會把當(dāng)前系統(tǒng)中所有應(yīng)用運(yùn)行的四大組件都會打印出來,而這時(shí)候會發(fā)現(xiàn)打印的內(nèi)容非常多阳惹,就需要借助之前說到的信息重定向了谍失,我們可以這么做:
adb shell dumpsys > info.txt
這里還借助了Windows中的start命令,可以直接利用系統(tǒng)默認(rèn)程序打開文本內(nèi)容莹汤。而且需要注意的是快鱼,在以往我們逆向應(yīng)用的時(shí)候,很多時(shí)候都用到這個命令來找到突破口的纲岭。
2抹竹、adb shell dumpsys package
說明:
????可以查看指定包名應(yīng)用的詳細(xì)信息(相當(dāng)于應(yīng)用的AndroidManifest.xml中的內(nèi)容)
用法:
????adb shell dumpsys package [pkgname]
案例:
????adb shell dumpsys cn.wjdiankong.demo
這里看到就是相當(dāng)于把應(yīng)用的清單文件打印出來而已。
?
3荒勇、adb shell dumpsys meminfo
說明:
????可以查看指定進(jìn)程名或者是進(jìn)程id的內(nèi)存信息
用法:
????adb shell dumpsys meminfo [pname/pid]
案例:
????adb shell dumpsys meminfo 11976
?
利用這個命令可以查看進(jìn)程當(dāng)前的內(nèi)存情況柒莉,和下面的top命令可以結(jié)合利用分析應(yīng)用的性能消耗情況。
4沽翔、adb shell dumpsys dbinfo
說明:
????可以查看指定包名應(yīng)用的數(shù)據(jù)庫存儲信息(包括存儲的sql語句)
用法:
????adb shell dumpsys dbinfo [packagename]
案例:
????adb shell dumpsys dbinfo cn.wjdiankong.demo
這里可以清晰的看到應(yīng)用執(zhí)行過的sql語句信息兢孝。在對應(yīng)用逆向的時(shí)候具有一定用途窿凤。畢竟可以查看應(yīng)用操作數(shù)據(jù)庫信息了。?
5跨蟹、adb intall
說明:安裝應(yīng)用包apk文件
用法:adb install [apk文件]
案例:adb install D:\demo.apk
注意:如果應(yīng)用已經(jīng)安裝了雳殊,需要使用adb install –r [apk文件] 相當(dāng)于升級安裝
這個命令就不多說了,非常簡單窗轩。?
6夯秃、adb uninstall
說明:卸載應(yīng)用
用法:adb uninstall [packagename]
案例:adb uninstall cn.wjdiankong.demo
和上面那個命令對應(yīng),也不多說了痢艺,非常簡單仓洼。?
7、adb pull
說明:將設(shè)備中的文件放到到本地
用法:adb pull 設(shè)備目錄文件本地目錄
案例:adb pull /sdcard/tmp.txt D:\
命令簡單堤舒,不在多說色建,只是在操作的時(shí)候可能遇到文件權(quán)限問題,用chmod改一下權(quán)限即可舌缤。
?
8箕戳、adb push
說明:將本地文件放到設(shè)備中
用法:adb push 本地目錄文件設(shè)備目錄
案例:adb push D:\tmp.txt /sdcard
命令簡單,不在多說国撵,只是在操作的時(shí)候可能遇到文件權(quán)限問題陵吸,用chmod改一下權(quán)限即可。
9介牙、adb shell screencap
說明:截屏操作
用法:
????adb shell screencap –p 截圖文件路徑
案例:
????adb shell screencap –p /sdcard/tmp.png
這個命令對于測試人員非常有用壮虫,有時(shí)候想快速截取手機(jī)屏幕,速度打開环础,我們就可以利用這個命令寫一個簡單的腳本文件旨指,內(nèi)容如下:
adb shell screencap -p /sdcard/tmp.png
adb pull /sdcard/tmp.png D:\
start D:\tmp.png
這樣就一步到位,分分鐘打開一個截圖圖片喳整。這個是Windows中的bat命令格式。
延伸:一些惡意軟件裸扶,利用設(shè)備root之后框都,運(yùn)行該命令就可以獲取用戶當(dāng)前屏幕信息,對于盜取賬號非常危險(xiǎn)呵晨。
10魏保、adb shell screenrecord
說明:錄屏操作
用法:
????adb shell screenrecord 視頻保存路徑
案例:
????adb shell screenrecord /sdcard/tmp.mp4
這個命令其實(shí)和上面截屏差不多,只不過這個是錄制評論摸屠,對于測試人員來說更是重要了谓罗,有時(shí)候想復(fù)現(xiàn)問題步驟,那么就可以采用這個命令進(jìn)行錄屏功能季二。
延伸:現(xiàn)在很多錄屏軟件檩咱,在5.0一下可以利用root之后用這個命令進(jìn)行錄屏功能揭措。
?
11、adb shell input text
說明:輸入文本內(nèi)容
用法:
????adb shell input text [需要輸入文本框內(nèi)容]
案例:
????讓需要輸入內(nèi)容的文本框獲取焦點(diǎn)刻蚯,adb shell input text 'HelloWorld'
延伸:這個命令也可以模擬物理按鍵绊含,虛擬鍵盤,滑動炊汹,滾動等事件
用途:這個命令對于我們在需要輸入一大堆信息到文本框中的時(shí)候非常有用躬充,比如現(xiàn)在你在PC端有一段內(nèi)容,想輸入到手機(jī)的某個搜索框中讨便,那么你可以通過把這段內(nèi)容發(fā)送到手機(jī)充甚,然后在復(fù)制操作。但是有了這個命令就非常簡單霸褒,先讓你想要輸入的文本框獲取焦點(diǎn)伴找,然后運(yùn)行這個命令即可。
?
12傲霸、adb forward
說明:設(shè)備的端口轉(zhuǎn)發(fā)
用法:
????adb forwrad [(遠(yuǎn)程端)協(xié)議:端口號] [(設(shè)備端)協(xié)議:端口號]
案例:
????adb forward tcp:23946 tcp:23946
? ? adb forward tcp:8700 jwdp:1786
這個命令對于我們在調(diào)試的時(shí)候非常有用疆瑰,特別在IDA調(diào)試中。
?
13昙啄、adb jdwp
說明:查看設(shè)備中可以被調(diào)試的應(yīng)用的進(jìn)程號
用法:adb jdwp
案例:adb jdwp
這個命令或許用途不是很多穆役,但是對于調(diào)試的時(shí)候還是有點(diǎn)用途∈崃荩可以忽略這個命令耿币。
14、adb logcat
說明:查看當(dāng)前日志信息
用法:adb logcat -s tag
案例:adb logcat -s fb
用法:
????adb logcat |findstr pname/pid/keyword
案例:
????adb logcat |findstr cn.wjdiankong.demo
這個命令大家都不陌生韧拒,也是重中之重淹接,有的同學(xué)或許會好奇,為何不用AS查看日志了叛溢,但是有時(shí)候AS不能滿足我們塑悼,比如我們想開多個日志窗口,這時(shí)候我們可以打開多個cmd窗口利用這個命令查看日志信息即可楷掉。用的最多的就是-s參數(shù)厢蒜,可以直接查看對應(yīng)的tag日志信息,可以利用findstr進(jìn)行信息過濾:
這里因?yàn)槭荳indows下的所以用findstr進(jìn)行信息過濾了烹植,當(dāng)然這個命令也可以直接在adb shell運(yùn)行之后斑鸦,比如:
>>adb shell
>> logcat |grep tencent
這樣就可以用grep進(jìn)行過濾信息了。
以下命令運(yùn)行的前提是先運(yùn)行:adb shell巷屿,而這些命令和上面adb shell命令都是互通的,所謂互通就是要想在設(shè)備中運(yùn)行就優(yōu)先adb shell一下墩虹,比如查看當(dāng)前包信息嘱巾,也可以這么做:
>>adb shell
>>dumpsys package [pkgname]
而以下介紹的這些shell命令也都可以直接在外部運(yùn)行憨琳,比如清空應(yīng)用數(shù)據(jù):
adb shell pm ?clear [pkgname]
15、run-as
說明:可以在非root設(shè)備中查看指定debug模式的包名應(yīng)用沙盒數(shù)據(jù)
用法:run-as [package name]
案例:run-as cn.wjdiankong.demo
這個在之前的文章中詳細(xì)介紹過這個命令的原理浓冒,不了解的同學(xué)可以查看這里:Android中run-as命令原理解析栽渴;利用這個命令,我們在開發(fā)中有時(shí)候有一個非root手機(jī)稳懒,但是又想看debug應(yīng)用的沙盒數(shù)據(jù)闲擦,那么這個命令就可以幫助我們進(jìn)行這項(xiàng)操作了。
?
16场梆、ps
說明:查看設(shè)備的進(jìn)程信息墅冷,或者是指定進(jìn)程的線程信息
用法:ps | grep 過濾內(nèi)容?
???????? ? ps –t [pid] 查看pid對應(yīng)的線程信息
案例:ps |grep cn.wjdiankong.demo
???????? ? ps –t 11798
這個命令不多說了,基本命令或油,重要程度不多說了寞忿,可以結(jié)合grep進(jìn)行過濾信息。
?
17顶岸、pm clear
說明:清空指定包名應(yīng)用的數(shù)據(jù)
用法:pm clear [packagename]
案例:pm clear cn.wjdiankong.demo
有時(shí)候想清空一個應(yīng)用的數(shù)據(jù)腔彰,可能需要去設(shè)置頁面去操作,可以不用那么麻煩辖佣,直接用這個命令即可霹抛。
?
18、pm install
說明:安裝設(shè)備中的apk文件卷谈,功能和adb install一樣
用法:pm install [apk文件]
案例:pm install /sdcard/demo.apk
這個和adb install命令一樣的效果杯拐,不多解釋。
?
19世蔗、pm uninstall
說明:卸載設(shè)備中的應(yīng)用端逼,功能和adb uninstall 一樣
用法:pm uninstall [packagename]
案例:pm uninstall cn.wjdiankong.demo
這個命令和adb uninstall命令一樣的效果,不多解釋了污淋。
?
20顶滩、am start
說明:啟動一個應(yīng)用
用法:
????am start -n [包(package)名]/[包名].[活動(activity)名稱]
案例:
????am start -n com.android.browser/com.android.browser.BrowserActivity
注意:可以以debug方式啟動應(yīng)用:am start –D –n ….
特別在我們反編譯調(diào)試應(yīng)用的時(shí)候,可能需要以debug方式啟動應(yīng)用
?
21寸爆、am startservice
說明:啟動一個服務(wù)
用法:
????am startservice -n [包(package)名]/[包名].[服務(wù)(service)名]
案例:
????am startservice -n com.android.traffic/com.android.traffic.maniservice
和上面命令類似诲祸,啟動服務(wù),不多解釋了而昨。
22、am broadcast
說明:發(fā)送一個廣播
用法:am broadcast -a [廣播動作]
案例:am broadcast -a android.NET.conn.CONNECTIVITY_CHANGE
和上面的命令類似找田,發(fā)送一個廣播歌憨,不多解釋了。 有時(shí)候我們定義了一個廣播墩衙,可能需要測試务嫡,就可以借助這個功能模擬發(fā)送一個廣播甲抖。
23、netcfg
說明:查看設(shè)備的ip地址
用法:netcfg
案例:netcfg
有時(shí)候想查看設(shè)備的ip地址心铃,去設(shè)置頁面太費(fèi)勁了准谚,可以直接用這個命令即可:
?
24、netstat
說明:查看設(shè)備的端口號信息
用法:netstat
案例:netstat
有時(shí)候想查看設(shè)備的端口號信息去扣,這個命令也是非常重要的:
?
25柱衔、app_process
說明:運(yùn)行Java代碼
用法:
????app_process [運(yùn)行代碼目錄] [運(yùn)行主類]
案例:
????export CLASSPATH=/data/demo.jar
? ? exec /system/bin/app_process /data/cn.wjdiankong.Main
這個主要用于在Android中一些特殊開發(fā)場景中,我們想啟動一個jar包愉棱,不過這個jar包有要求的:需要用dx命令把dex文件轉(zhuǎn)化成jar包功能唆铐,實(shí)際上他不是一個正常的jar包了,而是一個包含了classes.dex文件的壓縮文件了奔滑。
?
26艾岂、dalvikvm
說明:運(yùn)行一個dex文件
用法:dalvikvm –cp [dex文件] [運(yùn)行主類]
案例:dalvikvm –cp /data/demo.dex cn.wjdiankong.Main
這個有時(shí)候?yàn)榱藴y試一個dex文件功能可以用到,這個命令和上面的命令有很大相似之處朋其,只是運(yùn)行的文件不一樣王浴。
?
27、top
說明:查看當(dāng)前哪些應(yīng)用的cpu消耗信息
用法:top [-n/-m/-d/-s/-t]
???????? ? -m // 最多顯示多少個進(jìn)程
? ? ? ? ? ?-n// 刷新次數(shù)
? ? ? ? ? ?-d// 刷新間隔時(shí)間(默認(rèn)5秒)
? ? ? ? ? ?-s // 按哪列排序
? ? ? ? ? ?-t// 顯示線程信息而不是進(jìn)程
案例:
????top –d –m 10 |grep cn.wjdiankong.demo
這個在分析應(yīng)用性能的時(shí)候非常有用梅猿,我們可以用grep過濾我們想要分析的應(yīng)用信息氓辣,查看他的當(dāng)前cpu使用率。
?
28粒没、getprop
說明:查看系統(tǒng)屬性值
用法:getprop [屬性值名稱]
案例:getprop ro.debuggable
這個可以查看設(shè)備的信息筛婉,比如設(shè)備版本號,系統(tǒng)屬性等癞松,記得以前我們以前介紹過在root設(shè)備之后爽撒,還可以去修改這些系統(tǒng)屬性。比如debug開關(guān)响蓉,讓所有的應(yīng)用都處于可調(diào)式狀態(tài)硕勿。
?
以下這兩個命令是直接獲取apk的信息
29枫甲、aapt
說明:查看apk中的信息以及編輯apk程序包
用法:
????aapt dump xmltree [apk包] [需要查看的資源文件xml]
案例:
????aapt dump xmltree demo.apk AndroidManifest.xml
這里我們依然用重定向把輸出信息保存到文件中源武,然后再打開查看∠牖茫可以看到就是非常詳細(xì)的apk清單文件了粱栖。所以有時(shí)候我們想查看一個apk中清單文件,也沒必要進(jìn)行復(fù)雜的反編譯工作脏毯。
30闹究、dexdump
說明:可以查看一個dex文件的相信信息
用法:dexdump [dex文件路徑]
案例:dexdump D:\classes.dex
這個命令用于查看apk中dex文件的詳細(xì)信息,有時(shí)候也沒必要反編譯食店,可以直接用這個命令即可渣淤。
最后再說一下關(guān)于一個應(yīng)用的常用信息查詢,這個主要利用cat命令查看當(dāng)前應(yīng)用進(jìn)程信息价认,對于開發(fā)中可能用得到:
第一個:查看當(dāng)前進(jìn)程的內(nèi)存加載情況
可以使用?
cat /proc/[pid]/maps
查看當(dāng)前進(jìn)程的內(nèi)存映射信息嗅定,比如加載了哪些so文件,dex文件等:
第二個:查看進(jìn)程的狀態(tài)信息
可以利用?
cat /proc/[pid]/status
查看當(dāng)前進(jìn)程的狀態(tài)信息用踩,比如我們熟知的TracerPid:
第三個:查看當(dāng)前應(yīng)用使用的端口號信息
可以使用?
cat /proc/[pid]/net/tcp/tcp6/udp/udp6
獲取當(dāng)前應(yīng)用使用到的端口號信息:
注意:
上面介紹一些在adb shell中運(yùn)行的命令渠退,那么這些命令也可以在手機(jī)中直接運(yùn)行,我們需要去下載一個"終端模擬器"應(yīng)用捶箱,直接在里面輸入這些shell命令即可智什。這樣不用電腦就可以進(jìn)行操作了。
到這里荠锭,就分析了Android開發(fā)中常用的一些命令,有了這些命令對于我們開發(fā)來說起到非常搞笑的助推作用了晨川,當(dāng)然還有其他命令证九,但是本文覺得有些命令不是那么好用也沒多大用途這里就沒做介紹了。?