Android開發中我們有時候需要借助一些命令幫助更好的高效率定位解決問題,本文就來介紹一些可能有些隱藏的而卻非常好用的命令,可以幫我們快速找到問題,這些命令都是本人在開發中實踐總結,個人覺得非常實用,所以可能對于你不是很有用,但是了解也是很好的,而Android中的命令很多的,有些個人覺得沒多大用就不在這里提了,好了,下面就開始命令的分析總結。
在說這些命令之前,得先提及一些基本命令用法:
第一個:cat命令
主要用于查看文件內容,這個命令的重要性不言而喻,有時候我們想查看文件信息,當然可以借助軟件查看,但是這個命令非常便捷,更重要的是他可以結合grep進行過濾內容信息。
記住一點:Linux中過濾用grep,Windows過濾用findstr就可以了。
第二個:echo/touch命令
cat命令用于查看文件,echo和touch命令就可以方便的寫文件
下面看一下這兩個命令的結合使用:
這里可以看到用echo和touch寫內容到文件中,然后在cat讀取文件信息,這里還用到了內容重定向符號'>'和'>>';關于這兩個符號也是非常有用的,有時候我們在執行一條命令的時候可能輸出結果非常多,那么這時候就需要借助重定向把結果輸出到文本中即可。后面介紹命令會說到這點。
在常用命令中,我們會區分非shell命令和shell命令,當然區分的有點不合常規,但是為了好理解,這里就是把需要提前adb shell一下運行的命令叫做shell命令,直接adb shell運行命令的叫做非shell命令。
1、adb shell dumpsys activity top
說明:
????可以查看當前應用的activity信息
用法:
????運行需要查看的應用,然后運行此命令即可
案例:adb shell dumpsys activity top
延伸:如果我們直接運行adb shell dumpsys也是可以的,只是會把當前系統中所有應用運行的四大組件都會打印出來,而這時候會發現打印的內容非常多,就需要借助之前說到的信息重定向了,我們可以這么做:
adb shell dumpsys > info.txt
這里還借助了Windows中的start命令,可以直接利用系統默認程序打開文本內容。而且需要注意的是,在以往我們逆向應用的時候,很多時候都用到這個命令來找到突破口的。
2、adb shell dumpsys package
說明:
????可以查看指定包名應用的詳細信息(相當于應用的AndroidManifest.xml中的內容)
用法:
????adb shell dumpsys package [pkgname]
案例:
????adb shell dumpsys cn.wjdiankong.demo
這里看到就是相當于把應用的清單文件打印出來而已。
?
3、adb shell dumpsys meminfo
說明:
????可以查看指定進程名或者是進程id的內存信息
用法:
????adb shell dumpsys meminfo [pname/pid]
案例:
????adb shell dumpsys meminfo 11976
?
利用這個命令可以查看進程當前的內存情況,和下面的top命令可以結合利用分析應用的性能消耗情況。
4、adb shell dumpsys dbinfo
說明:
????可以查看指定包名應用的數據庫存儲信息(包括存儲的sql語句)
用法:
????adb shell dumpsys dbinfo [packagename]
案例:
????adb shell dumpsys dbinfo cn.wjdiankong.demo
這里可以清晰的看到應用執行過的sql語句信息。在對應用逆向的時候具有一定用途。畢竟可以查看應用操作數據庫信息了。?
5、adb intall
說明:安裝應用包apk文件
用法:adb install [apk文件]
案例:adb install D:\demo.apk
注意:如果應用已經安裝了,需要使用adb install –r [apk文件] 相當于升級安裝
這個命令就不多說了,非常簡單。?
6、adb uninstall
說明:卸載應用
用法:adb uninstall [packagename]
案例:adb uninstall cn.wjdiankong.demo
和上面那個命令對應,也不多說了,非常簡單。?
7、adb pull
說明:將設備中的文件放到到本地
用法:adb pull 設備目錄文件本地目錄
案例:adb pull /sdcard/tmp.txt D:\
命令簡單,不在多說,只是在操作的時候可能遇到文件權限問題,用chmod改一下權限即可。
?
8、adb push
說明:將本地文件放到設備中
用法:adb push 本地目錄文件設備目錄
案例:adb push D:\tmp.txt /sdcard
命令簡單,不在多說,只是在操作的時候可能遇到文件權限問題,用chmod改一下權限即可。
9、adb shell screencap
說明:截屏操作
用法:
????adb shell screencap –p 截圖文件路徑
案例:
????adb shell screencap –p /sdcard/tmp.png
這個命令對于測試人員非常有用,有時候想快速截取手機屏幕,速度打開,我們就可以利用這個命令寫一個簡單的腳本文件,內容如下:
adb shell screencap -p /sdcard/tmp.png
adb pull /sdcard/tmp.png D:\
start D:\tmp.png
這樣就一步到位,分分鐘打開一個截圖圖片。這個是Windows中的bat命令格式。
延伸:一些惡意軟件,利用設備root之后,運行該命令就可以獲取用戶當前屏幕信息,對于盜取賬號非常危險。
10、adb shell screenrecord
說明:錄屏操作
用法:
????adb shell screenrecord 視頻保存路徑
案例:
????adb shell screenrecord /sdcard/tmp.mp4
這個命令其實和上面截屏差不多,只不過這個是錄制評論,對于測試人員來說更是重要了,有時候想復現問題步驟,那么就可以采用這個命令進行錄屏功能。
延伸:現在很多錄屏軟件,在5.0一下可以利用root之后用這個命令進行錄屏功能。
?
11、adb shell input text
說明:輸入文本內容
用法:
????adb shell input text [需要輸入文本框內容]
案例:
????讓需要輸入內容的文本框獲取焦點,adb shell input text 'HelloWorld'
延伸:這個命令也可以模擬物理按鍵,虛擬鍵盤,滑動,滾動等事件
用途:這個命令對于我們在需要輸入一大堆信息到文本框中的時候非常有用,比如現在你在PC端有一段內容,想輸入到手機的某個搜索框中,那么你可以通過把這段內容發送到手機,然后在復制操作。但是有了這個命令就非常簡單,先讓你想要輸入的文本框獲取焦點,然后運行這個命令即可。
?
12、adb forward
說明:設備的端口轉發
用法:
????adb forwrad [(遠程端)協議:端口號] [(設備端)協議:端口號]
案例:
????adb forward tcp:23946 tcp:23946
? ? adb forward tcp:8700 jwdp:1786
這個命令對于我們在調試的時候非常有用,特別在IDA調試中。
?
13、adb jdwp
說明:查看設備中可以被調試的應用的進程號
用法:adb jdwp
案例:adb jdwp
這個命令或許用途不是很多,但是對于調試的時候還是有點用途。可以忽略這個命令。
14、adb logcat
說明:查看當前日志信息
用法:adb logcat -s tag
案例:adb logcat -s fb
用法:
????adb logcat |findstr pname/pid/keyword
案例:
????adb logcat |findstr cn.wjdiankong.demo
這個命令大家都不陌生,也是重中之重,有的同學或許會好奇,為何不用AS查看日志了,但是有時候AS不能滿足我們,比如我們想開多個日志窗口,這時候我們可以打開多個cmd窗口利用這個命令查看日志信息即可。用的最多的就是-s參數,可以直接查看對應的tag日志信息,可以利用findstr進行信息過濾:
這里因為是Windows下的所以用findstr進行信息過濾了,當然這個命令也可以直接在adb shell運行之后,比如:
>>adb shell
>> logcat |grep tencent
這樣就可以用grep進行過濾信息了。
以下命令運行的前提是先運行:adb shell,而這些命令和上面adb shell命令都是互通的,所謂互通就是要想在設備中運行就優先adb shell一下,比如查看當前包信息,也可以這么做:
>>adb shell
>>dumpsys package [pkgname]
而以下介紹的這些shell命令也都可以直接在外部運行,比如清空應用數據:
adb shell pm ?clear [pkgname]
15、run-as
說明:可以在非root設備中查看指定debug模式的包名應用沙盒數據
用法:run-as [package name]
案例:run-as cn.wjdiankong.demo
這個在之前的文章中詳細介紹過這個命令的原理,不了解的同學可以查看這里:Android中run-as命令原理解析;利用這個命令,我們在開發中有時候有一個非root手機,但是又想看debug應用的沙盒數據,那么這個命令就可以幫助我們進行這項操作了。
?
16、ps
說明:查看設備的進程信息,或者是指定進程的線程信息
用法:ps | grep 過濾內容?
???????? ? ps –t [pid] 查看pid對應的線程信息
案例:ps |grep cn.wjdiankong.demo
???????? ? ps –t 11798
這個命令不多說了,基本命令,重要程度不多說了,可以結合grep進行過濾信息。
?
17、pm clear
說明:清空指定包名應用的數據
用法:pm clear [packagename]
案例:pm clear cn.wjdiankong.demo
有時候想清空一個應用的數據,可能需要去設置頁面去操作,可以不用那么麻煩,直接用這個命令即可。
?
18、pm install
說明:安裝設備中的apk文件,功能和adb install一樣
用法:pm install [apk文件]
案例:pm install /sdcard/demo.apk
這個和adb install命令一樣的效果,不多解釋。
?
19、pm uninstall
說明:卸載設備中的應用,功能和adb uninstall 一樣
用法:pm uninstall [packagename]
案例:pm uninstall cn.wjdiankong.demo
這個命令和adb uninstall命令一樣的效果,不多解釋了。
?
20、am start
說明:啟動一個應用
用法:
????am start -n [包(package)名]/[包名].[活動(activity)名稱]
案例:
????am start -n com.android.browser/com.android.browser.BrowserActivity
注意:可以以debug方式啟動應用:am start –D –n ….
特別在我們反編譯調試應用的時候,可能需要以debug方式啟動應用
?
21、am startservice
說明:啟動一個服務
用法:
????am startservice -n [包(package)名]/[包名].[服務(service)名]
案例:
????am startservice -n com.android.traffic/com.android.traffic.maniservice
和上面命令類似,啟動服務,不多解釋了。
22、am broadcast
說明:發送一個廣播
用法:am broadcast -a [廣播動作]
案例:am broadcast -a android.NET.conn.CONNECTIVITY_CHANGE
和上面的命令類似,發送一個廣播,不多解釋了。 有時候我們定義了一個廣播,可能需要測試,就可以借助這個功能模擬發送一個廣播。
23、netcfg
說明:查看設備的ip地址
用法:netcfg
案例:netcfg
有時候想查看設備的ip地址,去設置頁面太費勁了,可以直接用這個命令即可:
?
24、netstat
說明:查看設備的端口號信息
用法:netstat
案例:netstat
有時候想查看設備的端口號信息,這個命令也是非常重要的:
?
25、app_process
說明:運行Java代碼
用法:
????app_process [運行代碼目錄] [運行主類]
案例:
????export CLASSPATH=/data/demo.jar
? ? exec /system/bin/app_process /data/cn.wjdiankong.Main
這個主要用于在Android中一些特殊開發場景中,我們想啟動一個jar包,不過這個jar包有要求的:需要用dx命令把dex文件轉化成jar包功能,實際上他不是一個正常的jar包了,而是一個包含了classes.dex文件的壓縮文件了。
?
26、dalvikvm
說明:運行一個dex文件
用法:dalvikvm –cp [dex文件] [運行主類]
案例:dalvikvm –cp /data/demo.dex cn.wjdiankong.Main
這個有時候為了測試一個dex文件功能可以用到,這個命令和上面的命令有很大相似之處,只是運行的文件不一樣。
?
27、top
說明:查看當前哪些應用的cpu消耗信息
用法:top [-n/-m/-d/-s/-t]
???????? ? -m // 最多顯示多少個進程
? ? ? ? ? ?-n// 刷新次數
? ? ? ? ? ?-d// 刷新間隔時間(默認5秒)
? ? ? ? ? ?-s // 按哪列排序
? ? ? ? ? ?-t// 顯示線程信息而不是進程
案例:
????top –d –m 10 |grep cn.wjdiankong.demo
這個在分析應用性能的時候非常有用,我們可以用grep過濾我們想要分析的應用信息,查看他的當前cpu使用率。
?
28、getprop
說明:查看系統屬性值
用法:getprop [屬性值名稱]
案例:getprop ro.debuggable
這個可以查看設備的信息,比如設備版本號,系統屬性等,記得以前我們以前介紹過在root設備之后,還可以去修改這些系統屬性。比如debug開關,讓所有的應用都處于可調式狀態。
?
以下這兩個命令是直接獲取apk的信息
29、aapt
說明:查看apk中的信息以及編輯apk程序包
用法:
????aapt dump xmltree [apk包] [需要查看的資源文件xml]
案例:
????aapt dump xmltree demo.apk AndroidManifest.xml
這里我們依然用重定向把輸出信息保存到文件中,然后再打開查看。可以看到就是非常詳細的apk清單文件了。所以有時候我們想查看一個apk中清單文件,也沒必要進行復雜的反編譯工作。
30、dexdump
說明:可以查看一個dex文件的相信信息
用法:dexdump [dex文件路徑]
案例:dexdump D:\classes.dex
這個命令用于查看apk中dex文件的詳細信息,有時候也沒必要反編譯,可以直接用這個命令即可。
最后再說一下關于一個應用的常用信息查詢,這個主要利用cat命令查看當前應用進程信息,對于開發中可能用得到:
第一個:查看當前進程的內存加載情況
可以使用?
cat /proc/[pid]/maps
查看當前進程的內存映射信息,比如加載了哪些so文件,dex文件等:
第二個:查看進程的狀態信息
可以利用?
cat /proc/[pid]/status
查看當前進程的狀態信息,比如我們熟知的TracerPid:
第三個:查看當前應用使用的端口號信息
可以使用?
cat /proc/[pid]/net/tcp/tcp6/udp/udp6
獲取當前應用使用到的端口號信息:
注意:
上面介紹一些在adb shell中運行的命令,那么這些命令也可以在手機中直接運行,我們需要去下載一個"終端模擬器"應用,直接在里面輸入這些shell命令即可。這樣不用電腦就可以進行操作了。
到這里,就分析了Android開發中常用的一些命令,有了這些命令對于我們開發來說起到非常搞笑的助推作用了,當然還有其他命令,但是本文覺得有些命令不是那么好用也沒多大用途這里就沒做介紹了。?