SDK的Tools文件夾下包含著Android模擬器操作的重要命令adb,adb的全稱為(Android Debug Bridge就是調試橋的作用。通過adb我們可以在Eclipse中方面通過DDMS來調試Android程序。藉助這個工具,我們可以管理設備或手機模擬器的狀態。還可以進行以下的操作:
1)、快速更新設備或手機模擬器中的代碼,如應用或Android 系統升級;
2)、在設備上運行shell命令;
3)、管理設備或手機模擬器上的預定埠;
4)、在設備或手機模擬器上複製或粘貼文件;
2、工作環境:
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目錄下。
3、常用命令大全
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}
作者:PythonDeveloper
連結:http://www.jianshu.com/p/e6dd76df6d61
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
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