一、adb介紹
adb:Android Debug Bridge,Android 調試橋的縮寫,adb 是一個 C/S 架構的命令行工具,
主要由 3 部分組成:
- 運行在 PC 端的 Client : 可以通過它對 Android 應用進行安裝、卸載及調試
- 運行在 PC 端的 Service : 其管理客戶端到 Android 設備上 adb 后臺進程的連接
- 運行在 Android 設備上的 adb 后臺進程
二、ADB安裝
默認電腦已經(jīng)安裝SDK的,如果沒有也可以直接網(wǎng)上下載一個adb工具包。
假定pc上adb工具所在目錄:
H:\rxw\windows\adb_fastboot
將adb路徑添加到環(huán)境變量中(這臺電腦→屬性→高級系統(tǒng)設置→環(huán)境變量)
雙擊 Path,然后點擊“新建”,名字可以自取,然后將adb工具的路徑填進去。
添加完保存就可以輸入命令驗證了 windows+R 打開cmd 輸入adb,出現(xiàn)版本號及菜單即配置完成
C:\Users\AdministratorAndroid Debug Bridge version 1.0.41Version 31.0.2-eng.lsh.20220519.123535RockChip modifiedInstalled as H:\rxw\windows\adb_fastboot\adb.exeglobal options: -a listen on all network interfaces, not just localhost -d use USB device (error if multiple devices connected) -e use TCP/IP device (error if multiple TCP/IP devices available) -s SERIAL use device with given serial (overrides $ANDROID_SERIAL) or devices devpath like: adb -s "\\?\usb#vid_2207&pid_0006#6&3795fe82&1&1#{f72fe0d4-cbcb-407d-8814-9ed673d0dd6b}" shell adb -s usb:3-1.2 shell -t ID use device with given transport id -H name of adb server host [default=localhost] -P port of adb server [default=5037] -L SOCKET listen on given socket for adb server [default=tcp:localhost:5037]
二、adb命令的語法
adb 命令的基本語法如下:
adb [-d|-e|-s <serialNumber>] <command>
如果只有一個設備/模擬器連接時,可以省略掉 [-d| -e|-s ] 這一部分,直接使用
adb <command>
為命令指定目標設備 如果有多個設備/模擬器連接,則需要為命令指定目標設備。
參數(shù) 含義 -d 指定當前唯一通過 USB 連接的 Android 設備為命令目標 -e 指定當前唯一運行的模擬器為命令目標 -s serialNumber> 指定相應 serialNumber 號的設備/模擬器為命令目標
serialNumber 可以通過 adb devices 命令獲取,如:
C:\Users\Administrator>adb devicesList of devices attached0123456789ABCDEF device
比如這時想指定 0123456789ABCDEF 這個設備來運行 adb 命令獲取屏幕分辨率:
adb -s 0123456789ABCDEF shell wm size
三、android常用adb命令
啟動adb服務或停止adb服務
- adb kill-server:結束 adb 服務
- adb start-server:啟動 adb 服務 一般在連接出現(xiàn)異常,使用 adb devices 未正常列出設備,設備狀態(tài)異常時使用 kill-server,然后運行 start-server 進行重啟服務
1)設備連接信息
adb devices:獲取設備信息
2)安裝應用
adb install [-lrtsdg] <path_to_apk>
如:adb install xxx.apk:安裝應用
參數(shù) 含義 -r 允許覆蓋安裝 -t 允許測試包 (允許安裝 AndroidManifest.xml 里 application 指定 android:testOnly=“true” 的應用) -d 允許降級覆蓋安裝 -g 授予所有運行時權限 -s 將應用安裝到 sdcard -l 將應用安裝到保護目錄 /mnt/asec
如: adb -s 設備名稱 install xxx.apk:多個設備,安裝到指定設備(通過adb devices獲取設備名稱)
一口君常用:
adb -t install xxx.apk
3)卸載應用
adb uninstall [-k] <packagename>:卸載應用
- -k 參數(shù)可選,表示卸載應用但保留數(shù)據(jù)和緩存目錄
- adb shell pm uninstall --user 0 包名:卸載系統(tǒng)應用
- adb shell cmd package install-existing 包名:卸載系統(tǒng)應用后,再恢復系統(tǒng)應用
4)清除應用數(shù)據(jù)與緩存
- adb shell pm clear 包名:清除應用緩存
效果相當于在設置里的應用信息界面點擊了「清除緩存」和「清除數(shù)據(jù)」。
5)查看前臺 Activity(查看當前活動窗口的類名)
- adb shell dumpsys window | findstr mCurrentFocus
6)查看應用安裝路徑
adb shell pm path <PACKAGE>
如:
C:\Users\Administrator>adb shell pm path com.upuphone.pushpackage:/data/app/~~Mbj7C7djGMaqwuXZBfScGg==/com.upuphone.push-bIO4mliiakFsN-xk4IxnTA==/base.apk
7)查看應用列表
命令格式:
adb shell pm list packages [-f] [-d] [-e] [-s] [-3] [-i] [-u] [--user USER_ID] [FILTER]
參數(shù) 顯示列表 無 所有應用 -f 顯示應用關聯(lián)的 apk 文件 -d 只顯示 disabled 的應用 -e 只顯示 enabled 的應用 -s 只顯示系統(tǒng)應用 -3 只顯示第三方應用 -i 顯示應用的 installer -u 包含已卸載應用 <FILTER> 包名包含 <FILTER> 字符串
8)查看應用版本信息
adb shell dumpsys package <package_name> | findstr version
如:
C:\Users\Administrator>adb shell dumpsys package com.example.sdkdemo | findstr version versionCode=3 minSdk=29 targetSdk=32 versionName=2.1 signatures=PackageSignatures{d9064a9 version:2, signatures:[f4d74dfb], past signatures:[]}
如果是系統(tǒng)應用,則會有2個版本,下面的是系統(tǒng)app本身的版本,上面的是升級之后的系統(tǒng)app版本如:
C:\Users\Administrator>adb shell dumpsys package com.android.settings | findstr version versionCode=30 minSdk=30 targetSdk=30 versionName=11 signatures=PackageSignatures{af44d47 version:3, signatures:[2bf9b00d], past signatures:[]} versionCode=30 minSdk=30 targetSdk=30 versionName=11 signatures=PackageSignatures{a29ef12 version:0, signatures:[], past signatures:[]}
9)獲取log
獲取安卓運行的log 命令:
adb logcat <設備里的文件路徑> [電腦上的目錄]
例1:清除logcat所有l(wèi)og
adb logcat -c
例2:保存logcat所有l(wèi)og到本地文件peng.log中
adb logcat -> peng.log
按ctrl+c停止保存
10)復制設備里的文件到電腦pull
命令:
adb pull <設備里的文件路徑> [電腦上的目錄]
其中 電腦上的目錄 參數(shù)可以省略,默認復制到當前目錄。
例:
adb pull /sdcard/sr.mp4 ~/tmp/
“小技巧: 設備上的文件路徑可能需要 root 權限才能訪問,如果你的設備已經(jīng) root 過,可以先使用 adb shell 和 su 命令在 adb shell 里獲取 root 權限后,先 cp /path/on/device /sdcard/filename 將文件復制到 sdcard,然后 adb pull /sdcard/filename /path/on/pc。
”
11)復制電腦里的文件到設備push
命令:
adb push <電腦上的文件路徑> <設備里的目錄>
例:拷貝可執(zhí)行程序modetest到bin目錄下
adb rootadb remountadb push ~/modetest /bin/
前面兩個命令是獲取權限
12)查看設備信息
型號
adb shell getprop ro.product.model
如:
C:\Users\Administrator>adb shell getprop ro.product.modelLE2123
電池電量
adb shell dumpsys battery
如:
C:\Users\Administrator>adb shell dumpsys batteryCurrent Battery Service state: AC powered: false USB powered: true Wireless powered: false Max charging current: 4870000 Max charging voltage: 9000000 Charge counter: 2200000 status: 5 health: 2 present: true level: 100 scale: 100 voltage: 4372 temperature: 350 technology: Li-ion
其中 scale 代表最大電量,level 代表當前電量。上面的輸出表示還剩下 100% 的電量。
13)屏幕分辨率wm size
項目 Value adb命令 說明 adb shell wm size 查看分辨率 adb shell wm size 1920x1280 修改分辨率 (小寫的x) adb shell wm density 240 修改dpi adb shell wm density reset 重置density adb shell wm size reset 重置分辨率
輸出示例:
Physical size: 1080x1920
表示該設備屏幕分辨率為 1080px * 1920px 如果使用命令修改過,那輸出可能是:
Physical size: 1080x1920Override size: 480x1024
表明設備的屏幕分辨率原本是 1080px * 1920px,當前被修改為 480px * 1024px。
14)屏幕密度wm density
項目 Value adb命令 說明 adb shell wm density 查看dpi。 adb shell wm density 240 修改dpi adb shell wm density reset 重置density
輸出示例:
Physical density: 420
如果使用命令修改過,那輸出可能是:
Physical density: 480Override density: 160
表明設備的屏幕密度原來是 480dpi,當前被修改為 160dpi。
15)android_id
adb shell settings get secure android_id
如:
C:\Users\Administrator>adb shell settings get secure android_id6596f32b63225bac
16)IMEI
android11.0獲取方式(需要root權限)
adb shellsuservice call iphonesubinfo 1
如:
C:\Users\Administrator>adb shellOnePlus9Pro:/ # susu/system/bin/sh: su: inaccessible or not found127|OnePlus9Pro:/ # service call iphonesubinfo 1service call iphonesubinfo 1Result: Parcel( 0x00000000: 00000000 0000000f 00300030 00300031 '........0.0.1.0.' 0x00000010: 00380030 00340034 00360037 00310039 '0.8.4.4.7.6.9.1.' 0x00000020: 00300032 00000037 '2.0.7... ')OnePlus9Pro:/ #
把里面的有效內容提取出來就是 IMEI 了,比如這里的是 001008447691207。
退出adb shell 方式:
輸入exit即可
17)Android 系統(tǒng)版本
adb shell getprop ro.build.version.release
如:
C:\Users\Administrator>adb shell getprop ro.build.version.release11
18)IP 地址
設備的 IP 地址的時候都得「設置」-「關于手機」-「狀態(tài)信息」-「IP地址」很煩對不對?通過 adb 可以方便地查看。
adb shell ifconfig | grep Mask
如:
inet addr:10.130.245.230 Mask:255.255.255.252inet addr:127.0.0.1 Mask:255.0.0.0
那么 10.130.245.230 就是設備 IP 地址。
在有的設備上這個命令沒有輸出,如果設備連著 WiFi,可以使用如下命令來查看局域網(wǎng) IP:
adb shell ifconfig wlan0
如:
C:\Users\Administrator>adb shell ifconfig wlan0wlan0 Link encap:Ethernet HWaddr a6:44:63:ac:88:7e Driver cnss_pci inet addr:10.20.1.158 Bcast:10.20.1.255 Mask:255.255.254.0 inet6 addr: fe80::a444:63ff:feac:887e/64 Scope: Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:21765 errors:0 dropped:2 overruns:0 frame:0 TX packets:11168 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:3000 RX bytes:6121620 TX bytes:3229281
inet addr:10.20.1.158就是ip地址。
19) Mac 地址
adb shell cat /sys/class/net/wlan0/address
如:
C:\Users\Administrator>adb shell cat /sys/class/net/wlan0/addressa6:44:63:ac:88:7e
這查看的是局域網(wǎng) Mac 地址,移動網(wǎng)絡或其它連接的信息可以通過
adb shell netcfg 命令來查看
20)CPU 信息
adb shell cat /proc/cpuinfo
21)內存信息
adb shell cat /proc/meminfo
其中,MemTotal 就是設備的總內存,MemFree 是當前空閑內存。
22)屏幕截圖screencap
adb exec-out screencap -p > sc.png?x-oss-process=image/watermark,g_center,image_YXJ0aWNsZS9wdWJsaWMvd2F0ZXJtYXJrLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxQXzQwCg==,t_20
其中 -p指的是保存文件格式為png格式,sc.png?x-oss-process=image/watermark,g_center,image_YXJ0aWNsZS9wdWJsaWMvd2F0ZXJtYXJrLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxQXzQwCg==,t_20為指定的文件名
然而實測這個截的圖片,無法打開。 參考鏈接: link
可以使用下面的方式:
先截圖保存到設備里:
adb shell screencap -p /sdcard/sc.png?x-oss-process=image/watermark,g_center,image_YXJ0aWNsZS9wdWJsaWMvd2F0ZXJtYXJrLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxQXzQwCg==,t_20
然后將 png 文件導出到電腦:
adb pull /sdcard/sc.png?x-oss-process=image/watermark,g_center,image_YXJ0aWNsZS9wdWJsaWMvd2F0ZXJtYXJrLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxQXzQwCg==,t_20
23)錄制屏幕screenrecord
錄制屏幕以 mp4 格式保存到 /sdcard:
adb shell screenrecord /sdcard/filename.mp4
需要停止時按 Ctrl+C,默認錄制時間和最長錄制時間都是 180 秒。
如果需要導出到電腦:
adb pull /sdcard/filename.mp4
開發(fā)過程與產(chǎn)品或測試溝通經(jīng)常用到(異地辦公時)
24)設置系統(tǒng)日期和時間
注:需要 root 權限。
adb shellsudate -s 20230529.131500
表示將系統(tǒng)日期和時間更改為 2023 年 05 月 29 日 13 點 15 分 00 秒。
25)檢測設備是否已 root
adb shellsu
此時命令行提示符是 $ 則表示沒有 root 權限,是 # 則表示已 root。
26)使用 Monkey 進行壓力測試
Monkey 可以生成偽隨機用戶事件來模擬單擊、觸摸、手勢等操作,可以對正在開發(fā)中的程序進行隨機壓力測試。
簡單用法:
adb shell monkey -p <packagename> -v 500
表示向 指定的應用程序發(fā)送 500 個偽隨機事件。
27)模擬按鍵/輸入input
adb shell 里有個很實用的命令叫 input,通過它可以做一些有趣的事情。
adb shell input keyevent <keycode>
不同的 keycode 能實現(xiàn)不同的功能
項目 Value 3 HOME 鍵 4 返回鍵 5 打開撥號應用 6 掛斷電話 24 增加音量 25 降低音量 26 電源鍵 27 拍照(需要在相機應用里) 82 菜單鍵 85 播放/暫停 86 停止播放 87 播放下一首 88 播放上一首 122 移動光標到行首或列表頂部 123 移動光標到行末或列表底部 126 恢復播放 127 暫停播放 164 靜音 176 打開系統(tǒng)設置 187 切換應用 207 打開聯(lián)系人 208 打開日歷 209 打開音樂 210 打開計算器 220 降低屏幕亮度 221 提高屏幕亮度 223 系統(tǒng)休眠 224 點亮屏幕 231 打開語音助手 276 如果沒有 wakelock 則讓系統(tǒng)休眠
28)網(wǎng)絡連接connect
除了用usb連接安卓設備之外,還可以通過網(wǎng)絡來連接 首先確認pc和設備是網(wǎng)絡互通的, 然后使用下面命令:
adb connect 192.168.10.111:5555adb shell