ADB常用命令


轉載鏈接:https://blog.csdn.net/u014589884/article/details/120113281

ADB常用命令

android


一、 adb安裝及配置
1 下載安裝
創建目錄,點擊安裝exe文件或將免安裝版放到創建目錄下
下載及簡介地址: Android 調試橋 (ADB)  |  Android 開源項目  |  Android Open Source Project (google.cn)

2 配置環境
在系統環境配置中新建android_adb_server_port 5037默認端口(有些調試需要默認端口才能使用,如chrome調試手機)
  添加adb目錄到環境目錄path中,並保存

3 常見問題
3.1當都口號被占或查詢端口號
查看端口是否被占用:運行:netstat -ano | findstr “5037” 或者(查看多有端口netstat -ano)
  C:\Users\chen>netstat -aon|findstr 5037
  TCP 127.0.0.1:5037 0.0.0.0:0 LISTENING 3676

通過PID查看所有進程
  C:\Users\chen>tasklist /fi “PID eq 3676”
  映像名稱 PID 會話名 會話# 內存使用
  svchost.exe 3676 Services 0 13,800 K

殺死占用端口的進程
  C:\Users\chen>taskkill /pid 3676 /f
  成功: 已終止 PID 為 3676 的進程。

3.2 chrome無法調試
輸入chrome://inspect/#devices無法顯示
  升級谷歌瀏覽器(方法1)
  手機的開發者模式關掉再打開(方法2)

3.3 adb輸出日志報錯 read: unexpected EOF!
原因:logcat 進程異常退出,是因為 log buffer size 設置過小導致的,默認size 是 256KB,如果長時間運行,並產生大量log 日志,肯定超過 默認256KB。解決方法:
1).在手機的系統設置中,將日志記錄器緩沖區大小調整到更大一些即可。執行:adb logcat -G 2m設置緩沖區大小后,再執行adb logcat
2).設置路徑:系統設置 > 開發者選項 > 調試 > 日志記錄器緩沖區大小

二、adb常用命令
adb [-d|-e|-s ]
連接指定設備
參數:
-d 指定當前唯一通過USB 連接的Android 設備為命令目標
-e 指定當前唯一運行的模擬器為命令目標
-s 指定相應serialNumber 號的設備/模擬器為命令目標
command 為所需對設備執行的命令

1 連接設備
adb devices #查看連接設備
adb -s cf27456f shell # 指定連接設備使用命令
adb get-serialno #獲取序列號
adb connect ip # 連接設備
adb disconnect # 斷開連接

adb version 查看adb 版本信息
adb devices 查看adb 連接設備
示例:
$adb devices
List of devices attached
1226959f device
3426422f offline
注意:offline 表示設備未連接成功或無響應,device 設備已連接
adb get-serialno 獲取設備序列號

2 adb shell unix常用命令
cat 顯示文件內容
cd 切換目錄
chmod 改變文件的存取模式/訪問權限
cf 查看磁盤空間使用情況
grep 過濾輸出
kill 殺死指定PID的進程
ls 列舉目錄內容
mount 掛載目錄的查看和管理
mv 移動或重命名文件
ps 查看正在運行的進程
rm 刪除文件
top 查看進程的資源占用情況

3 安裝和卸載
adb install test.apk # 安裝應用
adb install -r demo.apk #安裝apk 到sd 卡:
adb uninstall cn.com.test.mobile #卸載應用,需要指定包
adb uninstall -k cn.com.test.mobile #卸載app 但保留數據和緩存文件

4 啟動停止服務
adb start-server 啟動adb 服務,基本不會用到,因為只要設備連接正確,會自動啟動adb server
adb kill-server 停止adb server
adb -P start-server 指定adb server 的網絡端口port (默認為5037)啟動服務

5應用交互
5.1 am (activity manager)
這個命令可以啟動Activity、打開或關閉進程、發送廣播等操作。
adb shell am
command 命令詳解
start [options] 啟動 指定的 Activity
startservice [options] 啟動 指定的 Service
broadcast [options] 發送 指定的廣播
force-stop 停止 相關的進程

參數很靈活,和寫 Android 程序時代碼里的 Intent 相對應,用於決定 intent 對象的選項[options]如下:
-a 指定 action,如android.intent.action.VIEW
-c 指定 category,如android.intent.category.APP_CONTACTS
-n 指定完整 component 名,用於明確指定啟動哪個 Activity,如com.example.app/.ExampleActivity

5.1.1啟動 Activity
adb shell am start [options]
示例:
#指定完整 component 名,用於明確指定啟動哪個Activity
$adb shell am start -n
如: #表示調起微信主界面
$adb shell am start -n com.tencent.mm/.ui.LauncherUI

5.1.2啟動 Service
adb shell am startservice [options]
示例:
表示調起微信的某 Service。
$adb shell am startservice -n com.tencent.mm/.plugin.accountsync.model.AccountAuthenticatorService

5.1.3 發送廣播
adb shell am broadcast [options] 可以向所有組件廣播,也可以只向指定組件廣播。
示例:
#向所有組件廣播 BOOT_COMPLETED (開機廣播)
$adb shell am broadcast -a android.intent.action.BOOT_COMPLETED
#如:只向 org.mazhuang.boottimemeasure/.BootCompletedReceiver 廣播 BOOT_COMPLETED:
$adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -n org.mazhuang.boottimemeasure/.BootCompletedReceiver

action 觸發時機
android.net. conn.CCNNECTVITY_CHANGE 網絡連接發生變化
android.intent.actian.SCREEN_ON 屏幕點亮
android.intent.actian.SCREEN_CFF 屏幕熄滅
android.intent.actian.BATTERY_Low 電量低,會彈出電量低提示框
android.int ent.actian.BATTERY_OKAY 電量恢復了
android.intent.actian.BOOT_COMIPLETED 設備啟動完畢
android. intent.actian.DEVCE_STORAGE_LOw 存儲空間過低
android. intent.actian.DEMCE_STORAGE_OK 存儲空間恢復
android. intent.actian.PACKAGE_ADDED 安裝了新的應用
android.net.wifi.STATE_CHANGE WFi狀態變為啟用關閉正在啟動
android.net.wifi.WIH_STATE_CHANGED WFi連接狀態發生變化正在關i閉/未知
android.intent.action.BATTERY_CHANGED 電池電量發生變化
android.int ent.actian.INPUT_METHOD_CHANGED 系統輸入法發生變化
android.intent.actian.ACTON_POWER_CONNECTED 外部電源連接
android. int ent.action.ACTON_POWER_DISCONNE CTED 外部電源斷開連接
android.intent.actian.DREAMING_STARTED 系統開始休眠
android. intent.actian.DREAMING_STOPPED 系統停止休眠
android. intent.actian.WALLPAPER_CHANGED 壁紙發生變化
android.intent.actian.HEADSET_PLUG 插入耳機
android.intent.actian.MEDIA_UNMOUNTED 卸載外部介質
android.intent.actian.MEDIA_MOUNTED 掛載外部介質
android.os.action.POWER_SAVE_MODE_CHANGED 省電模式開啟

5.1.4停止
adb shell am force-stop 強制停止應用

5.2 pm (package manager)
adb shell pm 包管理

adb shell pm clear cn.com.test.mobile #清除應用數據與緩存adb shell pm clear < packagename>

5.2.1 list packages [options]
打印所有軟件包,可選擇只打印軟件包名稱中包含的軟件包。
不使用參數:adb shell pm list packages, 打印設備/模擬器上的所有軟件包
adb shell pm list packages -f, 輸出包和包相關聯的文件
adb shell pm list packages -d, 只輸出禁用的包。由於本機禁用沒有,輸出為空。
adb shell pm list packages -e, 只輸出啟用的包。
adb shell pm list packages -s, 只輸出系統的包。
adb shell pm list packages -3, 只輸出第三方的包。
adb shell pm list packages -i, 只輸出包和安裝信息(安裝來源)。
adb shell pm list packages -u, 只輸出包和未安裝包信息(安裝來源)。
adb shell pm list packages --user <USER_ID>, 根據用戶id查詢用戶的空間的所有包,USER_ID代表當前連接設備的順序,從零開始:
adb shell pm list packages -e “ximalaya”, 只輸出啟用的包。

5.2.2 pm安裝/卸載/路徑
adb shell pm set-install-location 0 1 2 設置應用安裝的默認目錄—— 0 auto ——1 手機內存 ——2 sdcard
adb shell pm get-install-location 獲取應用安裝方式,返回當前的安裝位置。返回結果同上參數選項。
adb shell pm path :查詢package的安裝位置。

adb shell pm install -r -f -s apppath 安裝apk,r 強制安裝,f 安裝手機內存 s 安裝sdcard
adb shell pm pm uninstall -k packname 卸載應用 -k 保留應用數據 /data/data/packname下的數據 或者 /sdcard/Android/data/packnmae

5.2.3 應用enable/disable
adb shell pm enable <PACKAGE_OR_COMPONENT> 設置應用為可用,或者組件不可用 組件跟類的完整路徑(如:pm enable “package/class”)
adb shell pm disable <PACKAGE_OR_COMPONENT> 設置應用為不可用,在手機上就隱藏了(如:pm disable “package/class”)
1).凍結應用 找到應用的 MainActivity(即MAIN,LAUNCHER):# pm disable com.example.test/com.test.MainActivity (完整路徑:包名/類名)
2). 禁止開機啟動 找到對就的receiver(即action與MainActivity的action相同的):# pm disable com.example.test/com.test.BootBroadReceiver (完整路徑:包名/類名)

5.2.4 清除數據與緩存
adb shell pm clear :對指定的package刪除所有數據。

5.2.4 用戶與權限
grant <PACKAGE_PERMISSION> :授權給應用。
revoke <PACKAGE_PERMISSION> :撤銷權限。
set-permission-enforced [true|false] :使指定權限生效或者失效。
disable-user [options] <PACKAGE_OR_COMPONENT> :參數選項:–user <USER_ID> :禁用用戶 The user to disable.
create-user <USER_NAME> :增加一個新的USER。
remove-user <USER_ID> :刪除一個USER。
get-max-users :該設備所支持的最大USER數。(某些設備不支持該命令)

adb shell dumpsys package #包信息Package Information
adb shell dumpsys meminfo #內存使用情況Memory Usage
adb logcat #查看日志
adb logcat -c #清除log 緩存
adb reboot #重啟
adb shell getprop ro.build.version.release #查看Android 系統版本
adb shell top -s 10 #查看占用內存前10 的app
adb push #從本地復制文件到設備
adb pull #從設備復制文件到本地
adb bugreport #查看bug 報告
adb help #查看ADB 幫助

6 文件管理
6.1 復制設備里的文件到電腦
adb pull <設備里的文件路徑> [電腦上的目錄]
示例:
$adb pull /sdcard/abc.mp4 ~/tmp/
小技巧:
設備上的文件路徑可能需要root 權限才能訪問,如果你的設備已經 root 過,
可以先使用 adb shell 和 su 命令在adb shell里獲取 root 權限后,
先 cp /path/on/device /sdcard/filename 將文件復制到 sdcard,然后 adb pull /sdcard/filename /path/on/pc。

6.2 復制電腦里的文件到設備
adb push <電腦上的文件路徑> <設備里的目錄>
示例:
$adb push e:/ss.au3 /data/local/tmp/
小技巧:
設備上的文件路徑普通權限可能無法直接寫入,如果你的設備已經 root 過,
可以先 adb push /path/on/pc /sdcard/filename,
然后 adb shell 和 su 在 adb shell 里獲取 root 權限后,cp /sdcard/filename /path/on/device

7 使用ADB命令模擬按鍵/輸入
7.1 keyevent:模擬按鍵
adb shell input keyevent keycode位操作參數,不同的 keycode 能實現不同的功能
$adb shell input keyevent 223 #熄滅屏幕
adb shell input keyevent 3 # 模擬手機按鍵home
KEYCODE列表

7.1.1電話鍵

 

 


鍵名 描述 鍵值
KEYCODE_CALL 撥號鍵5
KEYCODE_ENDCALL 掛機鍵6
KEYCODE_HOME 按鍵Home3
KEYCODE_MENU 菜單鍵82
KEYCODE_BACK 返回鍵4
KEYCODE_SEARCH 搜索鍵84
KEYCODE_CAMERA 拍照鍵27
KEYCODE_FOCUS 拍照對焦鍵80
KEYCODE_POWER 電源鍵26
KEYCODE_NOTIFICATION 通知鍵83
KEYCODE_MUTE 話筒靜音鍵91
KEYCODE_VOLUME_MUTE 揚聲器靜音鍵164
KEYCODE_VOLUME_UP 音量增加鍵24
KEYCODE_VOLUME_DOWN 音量減小鍵25

 

7.1.2控制鍵

 

 


鍵名 描述 鍵值
KEYCODE_ENTER 回車鍵66
KEYCODE_ESCAPE ESC鍵111
KEYCODE_DPAD_CENTER 導航鍵 確定鍵23
KEYCODE_DPAD_UP 導航鍵 向上19
KEYCODE_DPAD_DOWN 導航鍵 向下20
KEYCODE_DPAD_LEFT 導航鍵 向左21
KEYCODE_DPAD_RIGHT 導航鍵 向右22
KEYCODE_MOVE_HOME 光標移動到開始鍵122
KEYCODE_MOVE_END 光標移動到末尾鍵123
KEYCODE_PAGE_UP 向上翻頁鍵92
KEYCODE_PAGE_DOWN 向下翻頁鍵93
KEYCODE_DEL 退格鍵67
KEYCODE_FORWARD_DEL 刪除鍵112
KEYCODE_INSERT 插入鍵124
KEYCODE_TAB Tab鍵61
KEYCODE_NUM_LOCK 小鍵盤鎖143
KEYCODE_CAPS_LOCK 大寫鎖定鍵115
KEYCODE_BREAK Break/Pause鍵121
KEYCODE_SCROLL_LOCK 滾動鎖定鍵116
KEYCODE_ZOOM_IN 放大鍵168
KEYCODE_ZOOM_OUT 縮小鍵169

7.1.3組合鍵

 

 


鍵名 描述
KEYCODE_ALT_LEFT Alt+Left
KEYCODE_ALT_RIGHT Alt+Right
KEYCODE_CTRL_LEFT Control+Left
KEYCODE_CTRL_RIGHT Control+Right
KEYCODE_SHIFT_LEFT Shift+Left
KEYCODE_SHIFT_RIGHT Shift+Right

7.1.4基本

 

 


鍵名 描述 鍵值
KEYCODE_0 按鍵'0'7
KEYCODE_1 按鍵'1'8
KEYCODE_2 按鍵'2'9
KEYCODE_3 按鍵'3'10
KEYCODE_4 按鍵'4'11
KEYCODE_5 按鍵'5'12
KEYCODE_6 按鍵'6'13
KEYCODE_7 按鍵'7'14
KEYCODE_8 按鍵'8'15
KEYCODE_9 按鍵'9'16
KEYCODE_A 按鍵'A'29
KEYCODE_B 按鍵'B'30
KEYCODE_C 按鍵'C'31
KEYCODE_D 按鍵'D'32
KEYCODE_E 按鍵'E'33
KEYCODE_F 按鍵'F'34
KEYCODE_G 按鍵'G'35
KEYCODE_H 按鍵'H'36
KEYCODE_I 按鍵'I'37
KEYCODE_J 按鍵'J'38
KEYCODE_K 按鍵'K'39
KEYCODE_L 按鍵'L'40
KEYCODE_M 按鍵'M'41
KEYCODE_N 按鍵'N'42
KEYCODE_O 按鍵'O'43
KEYCODE_P 按鍵'P'44
KEYCODE_Q 按鍵'Q'45
KEYCODE_R 按鍵'R'46
KEYCODE_S 按鍵'S'47
KEYCODE_T 按鍵'T'48
KEYCODE_U 按鍵'U'49
KEYCODE_V 按鍵'V'50
KEYCODE_W 按鍵'W'51
KEYCODE_X 按鍵'X'52
KEYCODE_Y 按鍵'Y'53
KEYCODE_Z 按鍵'Z'54

7.1.5符號

 

 


鍵名 描述
KEYCODE_PLUS 按鍵'+'
KEYCODE_MINUS 按鍵'-'
KEYCODE_STAR 按鍵'*'
KEYCODE_SLASH 按鍵'/'
KEYCODE_EQUALS 按鍵'='
KEYCODE_AT 按鍵'@'
KEYCODE_POUND 按鍵'#'
KEYCODE_APOSTROPHE 按鍵''' (單引號)
KEYCODE_BACKSLASH 按鍵'\'
KEYCODE_COMMA 按鍵','
KEYCODE_PERIOD 按鍵'.'
KEYCODE_LEFT_BRACKET 按鍵'['
KEYCODE_RIGHT_BRACKET 按鍵']'
KEYCODE_SEMICOLON 按鍵';'
KEYCODE_GRAVE 按鍵'`'
KEYCODE_SPACE 空格鍵

7.1.6小鍵盤

 

 


鍵名 描述
KEYCODE_NUMPAD_0 小鍵盤按鍵'0'
KEYCODE_NUMPAD_1 小鍵盤按鍵'1'
KEYCODE_NUMPAD_2 小鍵盤按鍵'2'
KEYCODE_NUMPAD_3 小鍵盤按鍵'3'
KEYCODE_NUMPAD_4 小鍵盤按鍵'4'
KEYCODE_NUMPAD_5 小鍵盤按鍵'5'
KEYCODE_NUMPAD_6 小鍵盤按鍵'6'
KEYCODE_NUMPAD_7 小鍵盤按鍵'7'
KEYCODE_NUMPAD_8 小鍵盤按鍵'8'
KEYCODE_NUMPAD_9 小鍵盤按鍵'9'
KEYCODE_NUMPAD_ADD 小鍵盤按鍵'+'
KEYCODE_NUMPAD_SUBTRACT 小鍵盤按鍵'-'
KEYCODE_NUMPAD_MULTIPLY 小鍵盤按鍵'*'
KEYCODE_NUMPAD_DIVIDE 小鍵盤按鍵'/'
KEYCODE_NUMPAD_EQUALS 小鍵盤按鍵'='
KEYCODE_NUMPAD_COMMA 小鍵盤按鍵','
KEYCODE_NUMPAD_DOT 小鍵盤按鍵'.'
KEYCODE_NUMPAD_LEFT_PAREN 小鍵盤按鍵'('
KEYCODE_NUMPAD_RIGHT_PAREN 小鍵盤按鍵')'
KEYCODE_NUMPAD_ENTER 小鍵盤按鍵回車

7.1.7功能鍵

 

 

 

 

 


鍵名 描述
KEYCODE_F1 按鍵F1
KEYCODE_F2 按鍵F2
KEYCODE_F3 按鍵F3
KEYCODE_F4 按鍵F4
KEYCODE_F5 按鍵F5
KEYCODE_F6 按鍵F6
KEYCODE_F7 按鍵F7
KEYCODE_F8 按鍵F8
KEYCODE_F9 按鍵F9
KEYCODE_F10 按鍵F10
KEYCODE_F11 按鍵F11
KEYCODE_F12 按鍵F12

7.1.8多媒體

 

 


鍵名 描述
KEYCODE_MEDIA_PLAY 多媒體鍵 播放
KEYCODE_MEDIA_STOP 多媒體鍵 停止
KEYCODE_MEDIA_PAUSE 多媒體鍵 暫停
KEYCODE_MEDIA_PLAY_PAUSE 多媒體鍵 播放/暫停
KEYCODE_MEDIA_FAST_FORWARD 多媒體鍵 快進
KEYCODE_MEDIA_REWIND 多媒體鍵 快退
KEYCODE_MEDIA_NEXT 多媒體鍵 下一首
KEYCODE_MEDIA_PREVIOUS 多媒體鍵 上一首
KEYCODE_MEDIA_CLOSE 多媒體鍵 關閉
KEYCODE_MEDIA_EJECT 多媒體鍵 彈出
KEYCODE_MEDIA_RECORD 多媒體鍵 錄音

7.1.9手柄按鍵

 

 

 

 

 


鍵名 描述
KEYCODE_BUTTON_1 通用游戲手柄按鈕 #1
KEYCODE_BUTTON_2 通用游戲手柄按鈕 #2
KEYCODE_BUTTON_3 通用游戲手柄按鈕 #3
KEYCODE_BUTTON_4 通用游戲手柄按鈕 #4
KEYCODE_BUTTON_5 通用游戲手柄按鈕 #5
KEYCODE_BUTTON_6 通用游戲手柄按鈕 #6
KEYCODE_BUTTON_7 通用游戲手柄按鈕 #7
KEYCODE_BUTTON_8 通用游戲手柄按鈕 #8
KEYCODE_BUTTON_9 通用游戲手柄按鈕 #9
KEYCODE_BUTTON_10 通用游戲手柄按鈕 #10
KEYCODE_BUTTON_11 通用游戲手柄按鈕 #11
KEYCODE_BUTTON_12 通用游戲手柄按鈕 #12
KEYCODE_BUTTON_13 通用游戲手柄按鈕 #13
KEYCODE_BUTTON_14 通用游戲手柄按鈕 #14
KEYCODE_BUTTON_15 通用游戲手柄按鈕 #15
KEYCODE_BUTTON_16 通用游戲手柄按鈕 #16
KEYCODE_BUTTON_A 游戲手柄按鈕 A
KEYCODE_BUTTON_B 游戲手柄按鈕 B
KEYCODE_BUTTON_C 游戲手柄按鈕 C
KEYCODE_BUTTON_X 游戲手柄按鈕 X
KEYCODE_BUTTON_Y 游戲手柄按鈕 Y
KEYCODE_BUTTON_Z 游戲手柄按鈕 Z
KEYCODE_BUTTON_L1 游戲手柄按鈕 L1
KEYCODE_BUTTON_L2 游戲手柄按鈕 L2
KEYCODE_BUTTON_R1 游戲手柄按鈕 R1
KEYCODE_BUTTON_R2 游戲手柄按鈕 R2
KEYCODE_BUTTON_MODE 游戲手柄按鈕 Mode
KEYCODE_BUTTON_SELECT 游戲手柄按鈕 Select
KEYCODE_BUTTON_START 游戲手柄按鈕 Start
KEYCODE_BUTTON_THUMBL Left Thumb Button
KEYCODE_BUTTON_THUMBR Right Thumb Button

7.1.10待查

 

 

 

 


鍵名 描述
KEYCODE_NUM 按鍵Number modifier
KEYCODE_INFO 按鍵Info
KEYCODE_APP_SWITCH 按鍵App switch
KEYCODE_BOOKMARK 按鍵Bookmark
KEYCODE_AVR_INPUT 按鍵A/V Receiver input
KEYCODE_AVR_POWER 按鍵A/V Receiver power
KEYCODE_CAPTIONS 按鍵Toggle captions
KEYCODE_CHANNEL_DOWN 按鍵Channel down
KEYCODE_CHANNEL_UP 按鍵Channel up
KEYCODE_CLEAR 按鍵Clear
KEYCODE_DVR 按鍵DVR
KEYCODE_ENVELOPE 按鍵Envelope special function
KEYCODE_EXPLORER 按鍵Explorer special function
KEYCODE_FORWARD 按鍵Forward
KEYCODE_FORWARD_DEL 按鍵Forward Delete
KEYCODE_FUNCTION 按鍵Function modifier
KEYCODE_GUIDE 按鍵Guide
KEYCODE_HEADSETHOOK 按鍵Headset Hook
KEYCODE_META_LEFT 按鍵Left Meta modifier
KEYCODE_META_RIGHT 按鍵Right Meta modifier
KEYCODE_PICTSYMBOLS 按鍵Picture Symbols modifier
KEYCODE_PROG_BLUE 按鍵Blue “programmable”
KEYCODE_PROG_GREEN 按鍵Green “programmable”
KEYCODE_PROG_RED 按鍵Red “programmable”
KEYCODE_PROG_YELLOW 按鍵Yellow “programmable”
KEYCODE_SETTINGS 按鍵Settings
KEYCODE_SOFT_LEFT 按鍵Soft Left
KEYCODE_SOFT_RIGHT 按鍵Soft Right
KEYCODE_STB_INPUT 按鍵Set-top-box input
KEYCODE_STB_POWER 按鍵Set-top-box power
KEYCODE_SWITCH_CHARSET 按鍵Switch Charset modifier
KEYCODE_SYM 按鍵Symbol modifier
KEYCODE_SYSRQ 按鍵System Request / Print Screen
KEYCODE_TV 按鍵TV
KEYCODE_TV_INPUT 按鍵TV input
KEYCODE_TV_POWER 按鍵TV power
KEYCODE_WINDOW 按鍵Window
KEYCODE_UNKNOWN 未知按鍵

7.2 tap:點擊
adb shell input tap 454 204
坐標怎么來的:通過uiautomatorviewer.bat定位工具查看坐標[393,140] [516,268],然后求出中間值[454 204]

7.3 swipe:滑動
$adb shell input swipe 300 1000 300 500 #滑動解鎖,向上滑動手勢解鎖
#參數 300 1000 300 500 分別表示起始點x坐標 起始點y坐標 結束點x坐標 結束點y坐標

長按的技巧
最后加一個參數,表示操作的時間ms,如
adb shell input swipe 100 200 500 600 900 從(100,200)滑動到(500,600)總花費900ms
adb shell input swipe 1400 400 1400 400 900 長按(1400,400) 900ms

7.4 text:文本(暫不支持中文及“&”)
$adb shell input text hello #焦點處於某文本框時輸入文本

7.5其他
press:軌跡球按下、roll:軌跡球滾動 是軌跡球操作,在手機上沒啥用。

8 查看日志
8.1 Android 日志
[adb] logcat [] … [] …

8.1.1日志過濾
8.1.1.1按級別過濾日志
優先級
V —— Verbose(最低,輸出得最多)
D —— Debug
I —— Info
W —— Warning
E —— Error
F —— Fatal
S —— Silent(最高,啥也不輸出)
示例:輸出W之上的日志,W,E,F,S
$adb logcat *:W

8.1.1.2按 tag 和級別過濾日志
可以由多個 [:priority] 組成
示例:輸出 tag ActivityManager 的 I 以上級別日志,輸出tag MyApp的D 以上級別日志,及其它 tag 的 S 級別日志(即屏蔽其它 tag 日志)。
$adb logcat ActivityManager:I MyApp:D *:S

8.1.2日志格式
adb logcat -v 指定日志輸出格式
指定日志輸出格式
示例:
$adb logcat -v brief #默認格式,/():
$adb logcat -v process #()
$adb logcat -v tag # /:
$adb logcat -v raw #
$adb logcat -v time # /():
$adb logcat -v threadtime # :
$adb logcat -v long #[ : /:]
$adb logcat -v long ActivityManager:I *:S #指定格式可與上面的過濾同時使用

8.1.3日志清空
$adb logcat -c 清空日志

8.1.4獲取全量日志
adb pull data/log/android_logs
 adb pull data/log/jank/logCached
 adb pull data/log/dubai/systrace

8.2 內核日志
$adb shell dmesg
查看內核日志

9 查看設備信息
9.1 CPU信息
9.1.1 adb shell cat /proc/cpuinfo
#總核數 = 物理CPU個數 X 每顆物理CPU的核數
#總邏輯CPU數 = 物理CPU個數 X 每顆物理CPU的核數 X 超線程數
常用命令
#查看物理CPU個數
cat /proc/cpuinfo| grep “physical id”| sort| uniq| wc -l
#查看每個物理CPU中core的個數(即核數)
cat /proc/cpuinfo| grep “cpu cores”| uniq
#查看邏輯CPU的個數
cat /proc/cpuinfo| grep “processor”| wc -l
參數解釋
processor :系統中邏輯處理核的編號。對於單核處理器,則課認為是其CPU編號,對於多核處理器則可以是物理核、或者使用超線程技術虛擬的邏輯核
vendor_id :CPU制造商
cpu family :CPU產品系列代號
model   :CPU屬於其系列中的哪一代的代號
model name:CPU屬於的名字及其編號、標稱主頻
stepping  :CPU屬於制作更新版本
cpu MHz  :CPU的實際使用主頻
cache size :CPU二級緩存大小
physical id :單個CPU的標號
siblings :單個CPU邏輯物理核數
core id :當前物理核在其所處CPU中的編號,這個編號不一定連續
cpu cores :該邏輯核所處CPU的物理核數
apicid :用來區分不同邏輯核的編號,系統中每個邏輯核的此編號必然不同,此編號不一定連續
fpu :是否具有浮點運算單元(Floating Point Unit)
fpu_exception :是否支持浮點計算異常
cpuid level :執行cpuid指令前,eax寄存器中的值,根據不同的值cpuid指令會返回不同的內容
wp :表明當前CPU是否在內核態支持對用戶空間的寫保護(Write Protection)
flags :當前CPU支持的功能
bogomips :在系統內核啟動時粗略測算的CPU速度(Million Instructions Per Second)
clflush size :每次刷新緩存的大小單位
cache_alignment :緩存地址對齊單位
address sizes :可訪問地址空間位數
備注:processor : 0 ~ processor : 3 表示 4 核 CPU

9.1.2 adb shell dumpsys cpuinfo
9.2 內存
內存信息 $adb shell cat /proc/meminfo
adb shell cat /proc/meminfo |findstr MemTotal 獲取總內存
內存 adb shell dumpsys meminfo
adb shell dumpsys meminfo 包名或者adb shell dumpsys meminfo pid

9.3屏幕及顯示
屏幕分辨率 $adb shell wm size
屏幕密度 $adb shell wm density
顯示屏參數 $adb shell dumpsys window displays
幀率 adb shell dumpsys gfxinfo
顯示 adb shell dumpsys display

9.4 android信息
android_id $adb shell settings get secure android_id
Android 系統版本 $adb shell getprop ro.build.version.release

9.5手機設備
IMEI KaTeX parse error: Expected 'EOF', got '#' at position 33: … iphonesubinfo #̲而在 Android 5.0 …service call iphonesubinfo 1

Serialno adb get-serialno #獲取序列號

型號 $adb shell getprop ro.product.model

9.6電池電源
電源 adb shell dumpsys power
電池狀態 adb shell dumpsys batterystats
電池 adb shell dumpsys battery

9.7 鬧鍾
鬧鍾 adb shell dumpsys alarm

9.8 位置
位置 adb shell dumpsys location

9.9 IP&MAC地址
IP 地址
$adb shell ifconfig | find “Mask”
$adb shell ifconfig wlan0 #設備連着 WiFi,可以使用如下命令來查看局域網 IP
$adb shell netcfg # 上面兩個無結果可以用這個,查看網絡連接狀態

Mac 地址 $adb shell cat /sys/class/net/wlan0/address # 設備不同可能地址不同

9.10更多硬件與系統屬性
$adb shell cat /system/build.prop
adb shell getprop <屬性名>

也可以
$adb shell cat /system/build.prop | grep ro.product.cpu.abi
$adb shell cat /system/build.prop | find “ro.product.cpu.abi”

ro.build. version.sdk SDK版本
ro. build.version.release Android 系統版本
ro.build.version.security_patch Android 安全補丁程序級別
ro.product.model 型號
ro. product.brand 品牌
ro. product.name 設備名
ro.product.board 處理器型號
ro. product.cpu.abilist CPU支持的abi 列表
persist.sys.isusbOtgEnabled是否支持OTG
dalvik.vm.heapsize 每個應用程序的內存上限
ro.sf.lcd_density 屏幕密度

10 修改設置
修改設置之后,運行恢復命令仍然不太正常,可以運行 adb reboot 重啟設備或手動重啟。
修改設置的原理主要是通過 settings 命令修改 /data/data/com.android.providers.settings/databases/settings.db 里存放的設置值。

10.1分辨率
adb shell wm size 480x1024 #將分辨率修改為 480px * 1024px
adb shell wm size reset #恢復原分辨率

10.2屏幕密度
adb shell wm density 160 #屏幕密度修改為 160dpi
adb shell wm density reset #恢復原屏幕密度

10.3顯示區域
adb shell wm overscan 0,0,0,100
#四個數字分別表示距離左、上、右、下邊緣的留白像素,以上命令表示將屏幕底部 100px留白
adb shell wm overscan reset #恢復顯示區域

10.4 關閉 USB 調試模式
adb shell settings put global adb_enabled 0
使用命令無法恢復調試模式,只能通過手動

10.5 狀態欄和導航欄的顯示隱藏
adb shell settings put global policy_control < key-values>
< key-values> 可由如下幾種鍵及其對應的值組成,格式為 < key1>=< value1>:< key2>=< value2>
key 鍵對應的值
key 含義
immersive.full 同時隱藏
immersive.status 隱藏狀態欄
immersive.navigation 隱藏導航欄
immersive. preconfirms ?
這些鍵對應的值可則如下值用逗號組合

示例:
#設置在所有界面下都同時隱藏狀態欄和導航欄
$adb shell settings put global policy_control immersive.full=*
value 含義
apps 所有應用
t 所有界面
packagename 指定應用
-packagename 排除指定應用

#設置在包名為 com.package1 和 com.package2 的應用里隱藏狀態欄,在除了包名為 com.package3 的所有應用里隱藏導航欄。
$adb shell settings put global policy_control immersive.status=com.package1,com.package2:immersive.navigation=apps,-com.package3

11 常用實用功能
11.1屏幕截圖
adb exec-out screencap -p > img.png # 老版本無exec-out命令,只適合於新版的截圖
adb shell screencap -p /sdcard/img.png # 老版本截圖先保存在設備端
adb pull /sdcard/img.png # 通過pull拷貝到本地
screencap 參數:
-p 指定保存文件為 png 格式
-d display-id 指定截圖的顯示屏編號(有多顯示屏的情況下)

11.2錄制屏幕
默認錄制時間和最長錄制時間都是180s
adb shell screenrecord /sdcard/filename.mp4
screenrecord 參數:
–size WIDTHxHEIGHT 視頻的尺寸,比如 1280x720,默認是屏幕分辨率。
–bit-rate RATE 視頻的比特率,默認是 4Mbps。
–time-limit TIME 錄制時長,單位秒。
–verbose 輸出更多信息。

11.3 重新掛載system分區為可寫
注:需要 root 權限
/system 分區默認掛載為只讀,但有些操作比如給 Android 系統添加命令、刪除自帶應用等需要對 /system 進行寫操作,所以需要重新掛載它為可讀寫。
步驟:
1.進入 shell 並切換到 root 用戶權限。
$adb shell
$su
2.查看當前分區掛載情況。
$mount
輸出如下

debugfs /sys/kernel/debug debugfs rw,relatime 0 0
none /acct cgroup rw,relatime,cpuacct 0 0
none /sys/fs/cgroup tmpfs rw,seclabel,relatime,mode=750,gid=1000 0 0
tmpfs /mnt/obb tmpfs rw,seclabel,relatime,mode=755,gid=1000 0 0
none /dev/cpuctl cgroup rw,relatime,cpu 0 0
/dev/block/mtdblock0 /system ext4 ro,seclabel,relatime,data=ordered 0 0

找到其中我們關注的帶 /system 的那一行:

3.重新掛載。
$mount -o remount,rw -t yaffs2 /dev/block/mtdblock0 /system

11.4 查看連接過的 WiFi 密碼
$adb shell
$su
$cat /data/misc/wifi/*.conf
注:需要 root 權限

11.5設置系統日期和時間
$adb shell
$su
$date -s 20190531.131600 #將系統日期和時間更改為 2019 年 05 月 31 日 13 點 16 分 00 秒。
注:需要 root 權限

11.6 重啟手機
$adb reboot

11.7 檢測設備是否已 root
$adb shell
$su
此時命令行提示符是 $ 則表示沒有 root 權限,是 # 則表示已 root。

11.8 使用 Monkey 進行壓力測試
Monkey 可以生成偽隨機用戶事件來模擬單擊、觸摸、手勢等操作,可以對正在開發中的程序進行隨機壓力測試。

#向 指定的應用程序發送 500 個偽隨機事件
$adb shell monkey -p -v 500
monkey 官方文檔 https://developer.android.com/studio/test/monkey.html

11.9 開啟/關閉 WiFi
$adb shell svc wifi enable 開啟 WiFi:
$adb shell svc wifi disable 關閉 WiFi:
注:需要 root 權限

11.10 切換橫豎屏
首先禁用自動旋轉
$adb shell content insert --uri content://settings/system --bind name:s:accelerometer_rotation --bind value:i:0
然后切換橫豎屏 value值:0豎屏 1橫屏 2 3 (0,1,2,3代表旋轉的方向)
$adb shell content insert --uri content://settings/system --bind name:s:user_rotation --bind value:i:0 1 2 3

12刷機相關命令
注:不要隨便操作,沒實驗過無法保證成功

12.1重啟到 Recovery 模式
$adb reboot recovery

12.2從 Recovery 重啟到 Android
$adb reboot

12.3重啟到 Fastboot 模式
$adb reboot bootloader

12.4通過 sideload 更新系統
如果我們下載了 Android 設備對應的系統更新包到電腦上,那么也可以通過 adb 來完成更新。
以 Recovery 模式下更新為例:
1.重啟到 Recovery 模式。 $adb reboot recovery
2.在設備的 Recovery 界面上操作進入 Apply update-Apply from ADB。
注:不同的 Recovery 菜單可能與此有差異,有的是一級菜單就有 Apply update from ADB。
3.通過 adb 上傳和更新系統。 $adb sideload <path-to-update.zip>

13進程管理
13.1查看應用進程
adb shell ps|findstr com.app.test查詢不到,則該進程沒有啟動

13.2 殺掉進程或應用
第一種:kill -9 進程號
adb shell kill -9 1137

第二種:adb shell am force-stop 包名全稱
該方法不支持部分匹配,所以一定要是包名的全稱。

14 查看實時資源占用情況
adb shell top
top命令參數如下:
使用方法: top [ -m max_procs ] [ -n iterations ] [ -d delay ] [ -s sort_column ] [ -t ] [ -h ]
-m num 最多顯示多少個進程
-n num 刷新多少次后退出
-d num 刷新時間間隔(單位秒,默認值 5)
-s col 按某列排序(可用 col 值(第三行):cpu, vss, rss, thr)
-t 顯示線程信息
-i: 只顯示活躍進程
-h 顯示幫助文檔

$adb shell top
User 13%, System 5%, IOW 0%, IRQ 0%
User 85 + Nice 0 + Sys 37 + Idle 509 + IOW 0 + IRQ 0 + SIRQ 0 = 631
PID PR CPU% S #THR VSS RSS PCY UID Name
22205 0 13% S 56 423416K 88160K fg u0_a92 com.tmall.wireless
24310 1 2% R 1 1232K 536K root top
22600 0 1% S 46 341712K 40872K fg u0_a90 com.wandoujia.phoenix2.usbproxy
31125 1 1% S 31 319976K 33284K fg u0_a74 com.android.Chinpower
1533 0 1% S 32 67320K 20552K fg system /system/bin/surfaceflinger
1852 0 1% S 112 445876K 80304K fg system system_server

10 0 0% S 1 0K 0K root watchdog/0
16 1 0% S 1 0K 0K root khelper
22 1 0% S 1 0K 0K root suspend_sys_syn
第一組數據的含義(第一行和第二行):
User 處於用戶態的運行時間,不包含優先值為負進程
Nice 優先值為負的進程所占用的CPU時間
Sys 處於核心態的運行時間
Idle 除IO等待時間以外的其它等待時間
IOW IO等待時間
IRQ 硬中斷時間
SIRQ 軟中斷時間

第二組數據的含義:
PID 進程id
PR 優先級
CPU% 當前瞬時CPU占用率
S 進程狀態:D=不可中斷的睡眠狀態, R=運行, S=睡眠, T=跟蹤/停止, Z=僵屍進程
#THR 程序當前所用的線程數
VSS Virtual Set Size 虛擬耗用內存(包含共享庫占用的內存)
RSS Resident Set Size 實際使用物理內存(包含共享庫占用的內存)
PCY 調度策略優先級,SP_BACKGROUND/SP_FOREGROUND
UID 進程所有者的用戶id

14.1 實時cpu占用
查看cpu使用情況:
adb shell top | findstr pkg_name > file
adb shell top | grep pkg_name > file
top -m 10 -s cpu(-m顯示最大數量,-s 按指定行排序)

備注:
top出來的CPU計算時間
(這個進程的總cpu使用時間快照2-這個進程的總cpu使用時間快照1)/(總的cpu時間快照2-總的cpu時間快照1)
dumpsysinfo的CPU計算時間
(這個進程的總cpu使用時間快照2-這個進程的總cpu使用時間快照1)/{(從開機啟動到當前時間2)-(從開機啟動到當前時間1)}
如果需要即時的CPU信息,TOP更准。

14.2查看內存占用
1.通過包名查看:
adb shell pm list packages
adb shell dumpsys meminfo com.baidu.netdisk
2.通過pid查看
adb shell dumpsys meminfo pid
查看指定程序內存使用情況:
dumpsys meminfo pid,比如查看手機安裝的某app,那么實際命令應該為:dumpsys meminfo 3253,如下圖所示:
Applications Memory Usage (kB):
Uptime: 457665 Realtime: 457665
MEMINFO in pid 1642 [android.process.media]
Pss Private Private Swapped Heap Heap Heap
Total Dirty Clean Dirty Size Alloc Free
------ ------ ------ ------ ------ ------ ------
Native Heap 0 0 0 0 77824 46695 31128
Dalvik Heap 60696 60660 0 17484 60910 52854 8056
Dalvik Other 2276 2276 0 240
Stack 160 160 0 40
Other dev 4 0 4 0
.so mmap 1575 112 916 2560
.apk mmap 12 0 0 0
.dex mmap 592 0 592 0
.oat mmap 916 0 272 0
.art mmap 1161 772 0 296
Other mmap 102 36 32 0
Unknown 45933 45892 0 1920
TOTAL 113427 109908 1816 22540 138734 99549 39184
重點關注如下幾個字段:
(1)Native/Dalvik 的Heap信息
具體在上面的第一行和第二行,它分別給出的是JNI層和java層的內存分配情況,如果發現這個值一直增長,則代表程序可能出現了內存泄露。
(2)Total 的PSS信息
這個值就是你的應用真正占據的內存大小,通過這個信息,你可以輕松判別手機中哪些程序占用內存比較大了
其他參數含義:
dalvik : dalvik使用的內存
native : native堆上的內存,指C\C++堆的內存(android 3.0以后bitmap就是放在這兒)
other : 除了dalvik和native的內存,包含C\C++非堆內存······
Pss : 該內存指將共享內存按比例分配到使用了共享內存的進程
heap alloc : 已使用的內存
heap free : 空閑的內存
share dirty : 共享,但有不能被換頁出去的內存
private dirty : 非共享,又不能被換頁出去的內存(比如linux系統中為了提高分配內存速度而緩沖的小對象,即使你的進程已經退出,該內存也不會被釋放)

使用adb shell procrank (需要手機root權限)
手機中的sh是經過精簡過的,有些手機可能沒有 procrank 命令,可以使用genymotion模擬器,或是自己安裝procrank命令。
可以看到,在linux下表示內存的耗用情況有四種不同的表現形式:
VSS - Virtual Set Size 虛擬耗用內存(包含共享庫占用的內存)
RSS - Resident Set Size 實際使用物理內存(包含共享庫占用的內存)
PSS - Proportional Set Size 實際使用的物理內存(比例分配共享庫占用的內存)
USS - Unique Set Size 進程獨自占用的物理內存(不包含共享庫占用的內存)

VSS:VSS表示一個進程可訪問的全部內存地址空間的大小。這個大小包括了進程已經申請但尚未使用的內存空間。在實際中很少用這種方式來表示進程占用內存的情況,用它來表示單個進程的內存使用情況是不准確的。
RSS:表示一個進程在RAM中實際使用的空間地址大小,包括了全部共享庫占用的內存,這種表示進程占用內存的情況也是不准確的。
PSS:表示一個進程在RAM中實際使用的空間地址大小,它按比例包含了共享庫占用的內存。假如有3個進程使用同一個共享庫,那么每個進程的PSS就包括了1/3大小的共享庫內存。這種方式表示進程的內存使用情況較准確,但當只有一個進程使用共享庫時,其情況和RSS一模一樣。
USS:表示一個進程本身占用的內存空間大小,不包含其它任何成分,這是表示進程內存大小的最好方式!
可以看到:VSS>=RSS>=PSS>=USS

14.3 流量統計
首先獲取待測應用的userId然后獲取上下行流量
adb shell dumpsys package KaTeX parse error: Expected 'EOF', got '#' at position 33: …dstr userId #̲返回數據為userId= …userId/tcp_snd #返回數據單位bytes #獲取上行流量
adb shell cat proc/uid_stat/$userId/tcp_rcv #返回數據單位bytes #獲取下行流量


免責聲明!

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



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