安卓測試常用的 ADB 命令


一:工作環境:

    adb的工作方式比較特殊采用監聽Socket TCP 5554等端口的方式讓IDE和Qemu通訊,默認情況下adb會daemon相關的網絡端口,所以當我們運行Eclipse時adb進程就會自動運行。 
1.通過adb可以輕松的執行Linux Shell命令,如adb shell dir 就是列舉目錄,在Linux中根目錄為/而不是Windows上的C盤、D盤。 
2.安裝apk程序到模擬器則執行adb install android123.apk,這樣名為android123的安裝包就會安裝到Android模擬器中,前提是android123.apk文件需要放到SDK/Tools目錄下。 
3.向emulator傳送文件, 使用adb push android123.txt /tmp/android123.txt命令可以把SDK/Tools下的android123.txt文件傳輸到模擬器的/tmp/文件夾中,需要注意的是/tmp/文件夾中內容會在Android模擬器重新啟動時清空。 
4.從Android仿真器中回傳文件到電腦 

通過adb pull /tmp/android123.txt android123.txt命令就會把仿真器的tmp文件夾下android123.txt文件回傳到電腦SDK/Tools目錄下

二:常用命令大全

1. 顯示系統中全部Android平台:
    android list targets
2. 顯示系統中全部AVD(模擬器):
    android list avd
3. 創建AVD(模擬器):
    android create avd --name 名稱 --target 平台編號
4. 啟動模擬器:
    emulator -avd 名稱 -sdcard ~/名稱.img (-skin 1280x800)
5. 刪除AVD(模擬器):
    android delete avd --name 名稱
6. 創建SDCard:
    mksdcard 1024M ~/名稱.img
7. AVD(模擬器)所在位置:
    Linux(~/.android/avd)     Windows(C:\Documents and Settings\Administrator\.android\avd)
8. 啟動DDMS:
    ddms
9. 顯示當前運行的全部模擬器:
    adb devices
10. 對某一模擬器執行命令:
      abd -s 模擬器編號 命令
11. 安裝應用程序:
      adb install -r 應用程序.apk
12. 獲取模擬器中的文件:
      adb pull <remote> <local>
13. 向模擬器中寫文件:
      adb push <local> <remote>
14. 進入模擬器的shell模式:
      adb shell
15. 啟動SDK,文檔,實例下載管理器:
      android
16. 缷載apk包:
      adb shell
      cd data/app
      rm apk包
      exit
      adb uninstall apk包的主包名
      adb install -r apk包
17. 查看adb命令幫助信息:
      adb help
18. 在命令行中查看LOG信息:
      adb logcat -s 標簽名
19. adb shell后面跟的命令主要來自:
      源碼\system\core\toolbox目錄和源碼\frameworks\base\cmds目錄。
20. 刪除系統應用:
      adb remount (重新掛載系統分區,使系統分區重新可寫)。
      adb shell
      cd system/app
      rm *.apk
21. 獲取管理員權限:
      adb root
22. 啟動Activity:
     adb shell am start -n 包名/包名+類名(-n 類名,-a action,-d date,-m MIME-TYPE,-ccategory,-e 擴展數據,等)。
23、發布端口:
    你可以設置任意的端口號,作為主機向模擬器或設備的請求端口。如:
adb forward tcp:5555 tcp:8000
24、復制文件:
    你可向一個設備或從一個設備中復制文件,
     復制一個文件或目錄到設備或模擬器上:
adb push <source> <destination></destination></source>
      如:adb push test.txt /tmp/test.txt
     從設備或模擬器上復制一個文件或目錄:
     adb pull <source><destination></destination></source>
     如:adb pull /addroid/lib/libwebcore.so .
25、搜索模擬器/設備的實例:
     取得當前運行的模擬器/設備的實例的列表及每個實例的狀態:
    adb devices
26、查看bug報告:
adb bugreport
27、記錄無線通訊日志:
    一般來說,無線通訊的日志非常多,在運行時沒必要去記錄,但我們還是可以通過命令,設置記錄:
    adb shell
    logcat -b radio
28、獲取設備的ID和序列號:
     adb get-product
     adb get-serialno
29、訪問數據庫SQLite3
     adb shell
     sqlite3
#cd system/sd/data //進入系統內指定文件夾
#ls //列表顯示當前文件夾內容
#rm -r xxx //刪除名字為xxx的文件夾及其里面的所有文件
#rm xxx //刪除文件xxx
#rmdir xxx //刪除xxx的文件夾

30、點亮屏幕

adb shellinput keyevent 82

31、日志相關:

日志

命令行顯示Log

復制代碼 代碼如下:


adb logcat


根據tagname過濾

復制代碼 代碼如下:


adb logcat -s TAG_NAME
adb logcat -s TAG_NAME_1 TAG_NAME_2

#example
adb logcat -s TEST
adb logcat -s TEST MYAPP

優先過濾

顯示一個特定的優先級警告及以上的日志。

復制代碼 代碼如下:


adb logcat "*:PRIORITY"

# example
adb logcat "*:W"

優先級:

V — 細則 (最低優先級)
D — 調試
I — 信息
W — 警告
E — 錯誤
F — 致命
S — 靜默 (最高優先級,不會打印任何信息)

使用grep過濾

這個很像在Linux上使用管道命令一樣,需系統支持

復制代碼 代碼如下:


adb logcat | grep "SEARCH_TERM"
adb logcat | grep "SEARCH_TERM_1\|SEARCH_TERM_2"

#example
adb logcat | grep "Exception"
adb logcat | grep "Exception\|Error"


清除日志塊

使用來清除舊的日志

復制代碼 代碼如下:


adb logcat -c

adb對於Android程序員來說在日常的工作中使用頻率很高,現將自己工作中常用的adb命令總結一下備忘,方便查詢,也供大家參考。查看應用內存占用,耗電信息,啟動時間,wakelock,跑monkey的命令在之前的應用性能優化中起了不小的作用。以下adb命令的測試機器為小米3,其中package_name代表包名。

基礎腳本:

1、啟動adb服務

adb start-server

2、終止adb服務

adb kill-server

3、進入adb運行環境

adb shell

4、獲取幫助 里面有adb的各種命令和參數的介紹

adb help

5、查看adb版本

adb version

6、以root權限重啟adb

adb root

7、將system分區重新掛在為可讀寫分區,此命令在操作系統目錄時很重要

adb remount

8、重啟設備,可選參數進入bootloader(刷機模式)或recovery(恢復模式)

adb reboot [bootloader|recovery]

apk相關:

1、安裝apk

adb install test.apk -r 覆蓋安裝,保留數據和緩存文件  -d 解決低版本version問題  -s 安裝apk到sd卡

2、卸載apk

adb uninstall -k <package_name>

可選參數-k的作用為卸載軟件但是保留配置和緩存文件

3、查看app相關所有信息,包括action,codepath,version,需要的權限等等信息

adb shell dumpsys package <package_name>

4、查看app的路徑

adb shell pm path <package_name>

查看了一個普通app的路徑,如下,位於data/app下面的普通app
package:/data/app/com.tencent.test-1/base.apk

5、查看apk的版本信息

adb shell dumpsys package <package_name> | grepversion

如果你得到的是下圖的兩個version版本,則為系統app,下面是系統app本身的版本,上面是升級之后的系統app的版本信息

versionCode=8 targetSdk=22  versionName=V0.08 versionCode=6targetSdk=22  versionName=V0.0

6、啟動activity

查看:

adb shell dumpsys window | findstr mCurrentFocus  命令查看當前運行的包名和Activity

adb shell am start -n<package_name>/.<activity_class_name>

 

C:\Users\lenovo>adb shell

venus:/ $ ^C

C:\Users\lenovo>adb shell dumpsys window | findstrmCurrentFocus

 mCurrentFocus=Window{3bd0b18 u0com.android.settings/com.asu.msettings.AsuSettingsActiv

 

C:\Users\lenovo>adb shell am start -ncom.android.settings/com.asu.msettings.AsuSettingsA

Starting: Intent { cmp=com.android.settings/com.asu.msettings.AsuSettingsActivityAlias}

 

6.16

清楚應用數據adb shell pm path <PACKAGE>

輸出安裝包的APK路徑

adb shell pm clear <PACKAGE>

刪除與包相關的所有數據:清除數據和緩存

 

 7、獲得應用的啟動時間,可以很方便地獲取應用的啟動時間

adb shell am start -W<package_name>/.<activity_class_name>

試驗結果如下:

adb shell am start -Wcom.cc.test/com.painter.test.PainterMainActivity Starting: Intent {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER]cmp=com.cc.test/com.painter.test.PainterMainActivity } Status: ok Activity:com.cc.test/com.painter.test.PainterMainActivity ThisTime: 355 TotalTime: 355WaitTime: 365 Complete

返回的幾個結果,以WaitTime為准,返回的是從startActivity到應用第一幀完全顯示的時間。

8、啟動service,am的-n參數表示組件,-a參數表示命令,-a后面的參數為manifest中定義的service的action

adb shell am startservice -n<package_name>/.<service_class_name>

也可:

adb shell am startservice -a"android.intent.action.CALL"

9、發送廣播

adb shell am broadcast -a"android.intent.action.AdupsFota.WriteCommandReceiver"

廣播可以帶上不同類型的參數,–es為string參數類型,–ei為int參數類型,–ez為boolean參數類型

adb shell am broadcast -a "android.intent.action.AdupsFota.WriteCommandReceiver"--es test_string "this is test string"

10、查看某個app的進程相關信息
10.1

adb shell ps <package_name|PID>

例如

adb shell ps com.ma.app:push USER  PID PPID VSIZE RSS WCHAN   PC NAME u0_a116 5483 304 1776564 55112sys_epoll_ 00000000 S com.ma.app:push

小米手機上測試成功,在另外一個設備上,如果ps后面的參數是包名則顯示不了進程的詳細信息,參見下面的方式獲取

10.2

adb shell ps | grep <package_name>

11、殺掉某個進程,一般用於模擬某個bug復現

adb shell kill pidNumber

12、查看某一個app的內存占用

adb shell dumpsys meminfo <package_name|PID>

結果如下,其中的Heap size包括了Dalvik Heap和Native Heap,平時我們所說的內存限制指的是Dalvik Heap。

 Pss PrivatePrivate Swapped  Heap  Heap Heap     Total Dirty CleanDirty  Size Alloc  Free    ------ ------ ------ ------ ------ ------ ------ Native Heap 1895618940  0 4696 44288 21352 22935 Dalvik Heap 60102 60088  0 26192 104486 88285 16201 App Summary      Pss(KB)       ------  Java Heap: 61640   Native Heap:18940     Code:  3356   Stack:  428    Graphics: 16876  Private Other:  3840   System:  2031 ...

13、查看單個應用程序的最大內存限制

adb shell getprop | grep heapgrowthlimit

得到的結果為128M: [dalvik.vm.heapgrowthlimit]: [128m]

這就是說Dalvik Heap size的最大值超過了128M,就很可能發生OOM

14、獲取單個應用的電量消耗信息
Battery Historian是Android 5.0開始引入的,下面的命令為獲取單個app的電量消耗信息,獲取系統耗電信息見下節

adb shell dumpsys batterystats ><package_name> > xxx.txt

上面的電量信息為原始數據,可以通過google編寫的historian.py腳本把數據信息轉換為可讀性很好的html文件,類似TraceView生成的列表數據,之前在做app性能優化的時候起了很大的作用

python historian.py xxx.txt > xxx.html

15、跑monkey,個人很喜歡這個命令,運行過程中,應用程序會不斷切換畫面,按照選定的不同級別反饋信息,還可以看到執行過程報告和生成的事件。測試應用的穩定性時很實用。現在studio也有了monkeyrunner的tool

adb shell monkey -v -p <package_name> 500  -p 對象包  -v 反饋信息級別

:Monkey: seed=1493061025112 count=500 :AllowPackage:com.tencent.mm.app:push :IncludeCategory: android.intent.category.LAUNCHER:IncludeCategory: android.intent.category.MONKEY ** No activities found to run,monkey aborted.

系統相關

1、查看設備名稱,豌豆莢等應用就是通過此來獲得設備的名稱

adb shell cat /system/build.prop/

結果:

ro.product.model=MI 3W ro.product.brand=Xiaomi

2、查看手機分辨率有兩種方法,第二種方法最為簡潔
2.1

adb shell dumpsys window | grep Surface

grep是一個非常有用的參數,具體含義和用法大家自行google一下,試驗結果為1080 * 1920:

Surface: shown=false layer=21000 alpha=1.0rect=(0.0,0.0) 1080.0 x 1920.0

2.2.

adb shell wm size

返回結果為:

Physical size: 1080x1920

3、查看手機sdk版本

adb shell getprop | grep version

運行上面的命令后,列出來的version中[ro.build.version.release]: [6.0.1]即為手機sdk版本

4、查看手機型號信息

adb shell getprop | grep product

運行此命令之后,能看到product,board,brand和cpu等等的型號

5、獲取序列號,獲取到的序列號即為adb devices列出來的序列號

adb get-serialno

6、查看連接的設備

adb devices

如果有多個設備連接,想對其中的某一設備進行操作,就需要在此命令的后面加參數

adb [-d|-e|-s <serial Number>] <command>    -d:真機(多個設備中只有一個真機時適用)    -e:模擬器(多個設備中只有一個模擬器時適用)    -s:序列號

假如有兩個真機連接了我的電腦,adb devices獲取到的數據如下

List of devices attached 1b71651 device 12sdfsd device

進入1b71651設備的命令為:

adb -s 1b71651 shell

7、查看wifi密碼(需要root權限)

adb shell cat data/misc/wifi/*.conf

8、查看wifi_mac

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

運行此命令,93:a1:a2:91:d1:c1是小米3的wifi_mac地址

9、查看后台services信息

adb shell service list

運行結果為

Found 126 services: 0 miui.whetstone.net:[miui.whetstone.INetworkService] 1 miui.whetstone.power: [miui.whetstone.power]...

10、查看系統當前內存占用,為總述

adb shell cat /proc/meminfo

運行結果:

MemTotal: 1893504 kB MemFree:   81200 kBBuffers:   14828 kB Cached:   244152 kB SwapCached:  15152 kB Active:   541680 kB Inactive:   575280 kB ...

11、查看各進程詳細內存占用和系統的內存占用有幾種方法

11.1

adb shell dumpsys meminfo

Total PSS SWAP by process:  97858 kB: 34944 kB: com.android.systemui (pid2769)  ... Total RAM: 1893504 kB (statusnormal) Free RAM: 344212 kB (117992 cached pss + 136016 cached kernel + 90204free)

Total PSS 信息就是你的應用真正占據的內存大小,通過這個信息,可以輕松判別手機中哪些程序占內存比較大。

11.2 查看各進程內存的另一方法 不是所有設備都支持

adb shell procrank

運行結果如下:

PID  Vss  Rss Pss  Uss cmdline 496 1810184K92744K 57607K 48348K system_server 743 1847492K 84492K 52117K 46796Kcom.android.systemui ....       ------------ ------       328259K 261484K TOTALRAM: 2061012K total, 889152K free, 40940K buffers, 612032K cached, 300K shmem,62556K slab

其中

VSS – Virtual Set Size 虛擬耗用內存(包含共享庫占用的內存) RSS – Resident Set Size 實際使用物理內存(包含共享庫占用的內存) PSS – Proportional Set Size 實際使用的物理內存(比例分配共享庫占用的內存) USS – Unique Set Size 進程獨自占用的物理內存(不包含共享庫占用的內存)

11.3 查看設備上進程的cpu和內存占用情況

adb shell top

12、查看系統耗電情況

adb shell dumpsys batterystats > xxx.txt

13、查看系統設置的鬧鍾

adb shell dumpsys alarm

14、查看系統的wakelock,不合理的使用wakelock會導致系統耗電加劇

adb shell dumpsys power

返回結果:

Wake Locks: size=2 PARTIAL_WAKE_LOCK    'AudioMix' (uid=1013, pid=236,ws=WorkSource{10018}) PARTIAL_WAKE_LOCK   'Android.media.MediaPlayer' ON_AFTER_RELEASE (uid=10018, pid=24023,ws=null)

文件操作相關:

1、拷貝文件/目錄到設備

adb push <local>...<remote>

2、從設備拷貝文件/目錄,-a參數保留了文件的時間戳和模式

adb pull [-a] <remote>...<local>

3、查看設備log,和studio和eclipse的logcat相同,可通過參數控制輸出的日志

adb logcat  -s 過濾指定參數log  -v time 保留日志時間  >> 追加寫  > 覆蓋寫

下面的命令含義為:打印出log信息中的時間並且包含關鍵字“Test” 的所有log以覆蓋寫的方式保存到test文件

adb logcat -v time -s Test > test.txt

4、列出目錄下的文件和文件夾,可選參數-al可查看文件和文件夾的詳細信息

adb shell ls [-al]

5、進入文件夾

adb shell cd <folder>

6、查看文件

adb shell cat <filename>

7、重命名文件

adb shell rename path/oldfilename path/newfilename

8、刪除文件/文件夾

adb shell rm path/filename  -r 可選參數用於刪除文件夾及下面的所有文件 eg:adb shell rm -r <folder>

9、移動文件

adb shell mv path/filename newpath/filename

10、拷貝文件

adb shell cp file newpath/file1

11、創建目錄

adb shell mkdir path/folder

12、設置文件最高讀寫權限

adb shell chmod 777 filename

13、手機未root 查看data/data/某一app文件信息

筆者的小米3沒有root,但是又想方便地查看data/data/目錄下的一些文件,直接進入data會提示沒有權限,查看的方式為進入data/data/后,運行下面的命令,就能直接進入你應用的包下了,可通用cp或者mv拷貝或移動到sdcard目錄進行其他操作

run-as package_name

數據庫相關

數據庫的操作和今天的主題關系不大,增刪改查操作不再列舉。但是平時的開發過程中只是查看數據庫中某個表或者某個字段,也無需每次都pull出來之后再查看,用命令行會更加方便快捷,進入到test.db的目錄后,運行如下命令
1、操作db

sqlite3 test.db

 

操作:

通過adb操作手機UI並不常用,但在有的場景下會非常有用,比如測試自動化,訪問在遠端服務器上的手機等。

發送keyevent和文本

命令行

adb shell input keyevent {key_code}
adb shell input text {text}

keyevent列表

0 –>  “KEYCODE_UNKNOWN”1 –>  “KEYCODE_MENU”
2 –>  “KEYCODE_SOFT_RIGHT”
3 –>  “KEYCODE_HOME”
4 –>  “KEYCODE_BACK”
5 –>  “KEYCODE_CALL”
6 –>  “KEYCODE_ENDCALL”
7 –>  “KEYCODE_0”
8 –>  “KEYCODE_1”
9 –>  “KEYCODE_2”
10 –>  “KEYCODE_3”
11 –>  “KEYCODE_4”
12 –>  “KEYCODE_5”
13 –>  “KEYCODE_6”
14 –>  “KEYCODE_7”
15 –>  “KEYCODE_8”
16 –>  “KEYCODE_9”
17 –>  “KEYCODE_STAR”
18 –>  “KEYCODE_POUND”
19 –>  “KEYCODE_DPAD_UP”
20 –>  “KEYCODE_DPAD_DOWN”
21 –>  “KEYCODE_DPAD_LEFT”
22 –>  “KEYCODE_DPAD_RIGHT”
23 –>  “KEYCODE_DPAD_CENTER”
24 –>  “KEYCODE_VOLUME_UP”
25 –>  “KEYCODE_VOLUME_DOWN”
26 –>  “KEYCODE_POWER”
27 –>  “KEYCODE_CAMERA”
28 –>  “KEYCODE_CLEAR”
29 –>  “KEYCODE_A”
30 –>  “KEYCODE_B”
31 –>  “KEYCODE_C”
32 –>  “KEYCODE_D”
33 –>  “KEYCODE_E”
34 –>  “KEYCODE_F”
35 –>  “KEYCODE_G”
36 –>  “KEYCODE_H”
37 –>  “KEYCODE_I”
38 –>  “KEYCODE_J”
39 –>  “KEYCODE_K”
40 –>  “KEYCODE_L”
41 –>  “KEYCODE_M”
42 –>  “KEYCODE_N”
43 –>  “KEYCODE_O”
44 –>  “KEYCODE_P”
45 –>  “KEYCODE_Q”
46 –>  “KEYCODE_R”
47 –>  “KEYCODE_S”
48 –>  “KEYCODE_T”
49 –>  “KEYCODE_U”
50 –>  “KEYCODE_V”
51 –>  “KEYCODE_W”
52 –>  “KEYCODE_X”
53 –>  “KEYCODE_Y”
54 –>  “KEYCODE_Z”
55 –>  “KEYCODE_COMMA”
56 –>  “KEYCODE_PERIOD”
57 –>  “KEYCODE_ALT_LEFT”
58 –>  “KEYCODE_ALT_RIGHT”
59 –>  “KEYCODE_SHIFT_LEFT”
60 –>  “KEYCODE_SHIFT_RIGHT”
61 –>  “KEYCODE_TAB”
62 –>  “KEYCODE_SPACE”
63 –>  “KEYCODE_SYM”
64 –>  “KEYCODE_EXPLORER”
65 –>  “KEYCODE_ENVELOPE”
66 –>  “KEYCODE_ENTER”
67 –>  “KEYCODE_DEL”
68 –>  “KEYCODE_GRAVE”
69 –>  “KEYCODE_MINUS”
70 –>  “KEYCODE_EQUALS”
71 –>  “KEYCODE_LEFT_BRACKET”
72 –>  “KEYCODE_RIGHT_BRACKET”
73 –>  “KEYCODE_BACKSLASH”
74 –>  “KEYCODE_SEMICOLON”
75 –>  “KEYCODE_APOSTROPHE”
76 –>  “KEYCODE_SLASH”
77 –>  “KEYCODE_AT”
78 –>  “KEYCODE_NUM”
79 –>  “KEYCODE_HEADSETHOOK”
80 –>  “KEYCODE_FOCUS”
81 –>  “KEYCODE_PLUS”
82 –>  “KEYCODE_MENU”
83 –>  “KEYCODE_NOTIFICATION”
84 –>  “KEYCODE_SEARCH”
85 –>  “TAG_LAST_KEYCODE”

比如:按Home鍵:adb shell input keyevent KEYCODE_HOME

滑動屏幕

命令行

# 從(x1, y1)滑動到(x2, y2)
adb shell input touchscreen swipe {x1} {y1} {x2} {y2}

點擊屏幕

命令行

# 點擊屏幕坐標(x, y)
adb shell input touchscreen tap {x} {y}

ADB 錄制屏幕命令

  對於Android4.4的上的手機,系統自帶了一個命令screenrecord,我們可以很方便的使用。

·       錄制命令

·        adb shell screenrecord /sdcard/test.mp4

視頻保存目錄可以自己指定,如上面的/sdcard/test.mp4,命令執行后會一直錄制180s,按下ctrl+c可以提前結束錄制
輸入 –time-limit N,限制視頻錄制時間為N秒

·       設定視頻分辨率

對於高分辨率的手機,錄制的視頻很大,我們分享又不需要這么大的
我們可以設置錄制的視頻分辨率

adb shell screenrecord --size 848*480 /sdcard/test.mp4

·       設定視頻比特率

默認比特率是4M/s,為了分享方便,我們可以調低比特率為2M

adb shell screenrecord --bit-rate 2000000 /sdcard/test.mp4

·       獲取視頻文件

使用adb pull 即可把手機SD卡中視頻獲取到本地

adb pull /sdcard/test.mp4 .

設置時間:

 

查看內存:

adb shell

df

 

打電話:adb shell am start -a android.intent.action.CALL -d tel:10086

獲取devicesname

cat /system/build.prop | grep "product"

adb shellgetprop ro.product.name

自動填充內存:adb shell ddif=/dev/zero of=/mnt/sdcard/bigfile

dd命令創建文件 可以跟參數,比如創建一個1G的文件....可以根據想創建的大小 更改后邊的參數值(bs=xx count=xx)

adb shelldd if=/dev/zero of=/mnt/sdcard   bs=1Mcount=1024





免責聲明!

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



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