一、adb介紹
adb:Android Debug Bridge,Android 調(diào)試橋的縮寫(xiě),adb 是一個(gè) C/S 架構(gòu)的命令行工具,
主要由 3 部分組成:
- 運(yùn)行在 PC 端的 Client : 可以通過(guò)它對(duì) Android 應(yīng)用進(jìn)行安裝、卸載及調(diào)試運(yùn)行在 PC 端的 Service : 其管理客戶(hù)端到 Android 設(shè)備上 adb 后臺(tái)進(jìn)程的連接運(yùn)行在 Android 設(shè)備上的 adb 后臺(tái)進(jìn)程
二、ADB安裝
默認(rèn)電腦已經(jīng)安裝SDK的,如果沒(méi)有也可以直接網(wǎng)上下載一個(gè)adb工具包。
假定pc上adb工具所在目錄:
H:rxwwindowsadb_fastboot
將adb路徑添加到環(huán)境變量中(這臺(tái)電腦→屬性→高級(jí)系統(tǒng)設(shè)置→環(huán)境變量)
雙擊 Path,然后點(diǎn)擊“新建”,名字可以自取,然后將adb工具的路徑填進(jìn)去。
添加完保存就可以輸入命令驗(yàn)證了 windows+R 打開(kāi)cmd 輸入adb,出現(xiàn)版本號(hào)及菜單即配置完成
C:UsersAdministrator
Android?Debug?Bridge?version?1.0.41
Version?31.0.2-eng.lsh.20220519.123535
RockChip?modified
Installed?as?H:rxwwindowsadb_fastbootadb.exe
global?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命令的語(yǔ)法
adb 命令的基本語(yǔ)法如下:
adb?[-d|-e|-s?<serialNumber>]?<command>
如果只有一個(gè)設(shè)備/模擬器連接時(shí),可以省略掉 [-d| -e|-s] 這一部分,直接使用
adb?<command>
為命令指定目標(biāo)設(shè)備
如果有多個(gè)設(shè)備/模擬器連接,則需要為命令指定目標(biāo)設(shè)備。
參數(shù) | 含義 |
---|---|
-d | 指定當(dāng)前唯一通過(guò) USB 連接的 Android 設(shè)備為命令目標(biāo) |
-e | 指定當(dāng)前唯一運(yùn)行的模擬器為命令目標(biāo) |
-s serialNumber> | 指定相應(yīng) serialNumber 號(hào)的設(shè)備/模擬器為命令目標(biāo) |
serialNumber 可以通過(guò) adb devices 命令獲取,如:
C:UsersAdministrator>adb?devices
List?of?devices?attached
0123456789ABCDEF????????device
比如這時(shí)想指定 0123456789ABCDEF 這個(gè)設(shè)備來(lái)運(yùn)行 adb 命令獲取屏幕分辨率:
adb?-s?0123456789ABCDEF?shell?wm?size
三、android常用adb命令
啟動(dòng)adb服務(wù)或停止adb服務(wù)
-
- adb kill-server:結(jié)束 adb 服務(wù)adb start-server:?jiǎn)?dòng) adb 服務(wù)
- 一般在連接出現(xiàn)異常,使用 adb devices 未正常列出設(shè)備,設(shè)備狀態(tài)異常時(shí)使用 kill-server,然后運(yùn)行 start-server 進(jìn)行重啟服務(wù)
1)設(shè)備連接信息
adb?devices:獲取設(shè)備信息
2)安裝應(yīng)用
adb?install?[-lrtsdg]?<path_to_apk>
如:adb install xxx.apk:安裝應(yīng)用
參數(shù) | 含義 |
---|---|
-r | 允許覆蓋安裝 |
-t | 允許測(cè)試包 (允許安裝 AndroidManifest.xml 里 application 指定 android:testOnly=“true” 的應(yīng)用) |
-d | 允許降級(jí)覆蓋安裝 |
-g | 授予所有運(yùn)行時(shí)權(quán)限 |
-s | 將應(yīng)用安裝到 sdcard |
-l | 將應(yīng)用安裝到保護(hù)目錄 /mnt/asec |
如: adb -s 設(shè)備名稱(chēng) install xxx.apk:多個(gè)設(shè)備,安裝到指定設(shè)備(通過(guò)adb devices獲取設(shè)備名稱(chēng))
一口君常用:
adb?-t?install?xxx.apk
3)卸載應(yīng)用
adb?uninstall?[-k]?<packagename>:卸載應(yīng)用
- -k 參數(shù)可選,表示卸載應(yīng)用但保留數(shù)據(jù)和緩存目錄
- adb shell pm uninstall --user 0 包名:卸載系統(tǒng)應(yīng)用adb shell cmd package install-existing 包名:卸載系統(tǒng)應(yīng)用后,再恢復(fù)系統(tǒng)應(yīng)用
4)清除應(yīng)用數(shù)據(jù)與緩存
- adb shell pm clear 包名:清除應(yīng)用緩存
效果相當(dāng)于在設(shè)置里的應(yīng)用信息界面點(diǎn)擊了「清除緩存」和「清除數(shù)據(jù)」。
5)查看前臺(tái) Activity(查看當(dāng)前活動(dòng)窗口的類(lèi)名)
- adb shell dumpsys window | findstr mCurrentFocus
6)查看應(yīng)用安裝路徑
adb?shell?pm?path?<PACKAGE>
如:
C:UsersAdministrator>adb?shell?pm?path?com.upuphone.push
package:/data/app/~~Mbj7C7djGMaqwuXZBfScGg==/com.upuphone.push-bIO4mliiakFsN-xk4IxnTA==/base.apk
7)查看應(yīng)用列表
命令格式:
adb?shell?pm?list?packages?[-f]?[-d]?[-e]?[-s]?[-3]?[-i]?[-u]?[--user?USER_ID]?[FILTER]
參數(shù) | 顯示列表 |
---|---|
無(wú) | 所有應(yīng)用 |
-f | 顯示應(yīng)用關(guān)聯(lián)的 apk 文件 |
-d | 只顯示 disabled 的應(yīng)用 |
-e | 只顯示 enabled 的應(yīng)用 |
-s | 只顯示系統(tǒng)應(yīng)用 |
-3 | 只顯示第三方應(yīng)用 |
-i | 顯示應(yīng)用的 installer |
-u | 包含已卸載應(yīng)用 |
<FILTER> | 包名包含 <FILTER> 字符串 |
8)查看應(yīng)用版本信息
adb?shell?dumpsys?package?<package_name>?|?findstr?version
如:
C:UsersAdministrator>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)應(yīng)用,則會(huì)有2個(gè)版本,下面的是系統(tǒng)app本身的版本,上面的是升級(jí)之后的系統(tǒng)app版本如:
C:UsersAdministrator>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
獲取安卓運(yùn)行的log
命令:
adb?logcat?<設(shè)備里的文件路徑>?[電腦上的目錄](méi)
例1:清除logcat所有l(wèi)og
adb?logcat?-c
例2:保存logcat所有l(wèi)og到本地文件peng.log中
adb?logcat?->?peng.log
按ctrl+c停止保存
10)復(fù)制設(shè)備里的文件到電腦pull
命令:
adb?pull?<設(shè)備里的文件路徑>?[電腦上的目錄](méi)
其中 電腦上的目錄 參數(shù)可以省略,默認(rèn)復(fù)制到當(dāng)前目錄。
例:
adb?pull?/sdcard/sr.mp4?~/tmp/
“
小技巧:
設(shè)備上的文件路徑可能需要 root 權(quán)限才能訪(fǎng)問(wèn),如果你的設(shè)備已經(jīng) root 過(guò),可以先使用 adb shell 和 su 命令在 adb shell 里獲取 root 權(quán)限后,先 cp /path/on/device /sdcard/filename 將文件復(fù)制到 sdcard,然后 adb pull /sdcard/filename /path/on/pc。”
11)復(fù)制電腦里的文件到設(shè)備push
命令:
adb?push?<電腦上的文件路徑>?<設(shè)備里的目錄>
例:拷貝可執(zhí)行程序modetest到bin目錄下
adb?root
adb?remount
adb?push?~/modetest?/bin/
前面兩個(gè)命令是獲取權(quán)限
12)查看設(shè)備信息
型號(hào)
adb?shell?getprop?ro.product.model
如:
C:UsersAdministrator>adb?shell?getprop?ro.product.model
LE2123
電池電量
adb?shell?dumpsys?battery
如:
C:UsersAdministrator>adb?shell?dumpsys?battery
Current?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 代表當(dāng)前電量。上面的輸出表示還剩下 100% 的電量。
13)屏幕分辨率wm size
項(xiàng)目 | Value |
---|---|
adb命令 | 說(shuō)明 |
adb shell wm size | 查看分辨率 |
adb shell wm size 1920x1280 | 修改分辨率 (小寫(xiě)的x) |
adb shell wm density 240 | 修改dpi |
adb shell wm density reset | 重置density |
adb shell wm size reset | 重置分辨率 |
輸出示例:
Physical?size:?1080x1920
表示該設(shè)備屏幕分辨率為 1080px * 1920px
如果使用命令修改過(guò),那輸出可能是:
Physical?size:?1080x1920
Override?size:?480x1024
表明設(shè)備的屏幕分辨率原本是 1080px * 1920px,當(dāng)前被修改為 480px * 1024px。
14)屏幕密度wm density
項(xiàng)目 | Value |
---|---|
adb命令 | 說(shuō)明 |
adb shell wm density | 查看dpi。 |
adb shell wm density 240 | 修改dpi |
adb shell wm density reset | 重置density |
輸出示例:
Physical?density:?420
如果使用命令修改過(guò),那輸出可能是:
Physical?density:?480
Override?density:?160
表明設(shè)備的屏幕密度原來(lái)是 480dpi,當(dāng)前被修改為 160dpi。
15)android_id
adb?shell?settings?get?secure?android_id
如:
C:UsersAdministrator>adb?shell?settings?get?secure?android_id
6596f32b63225bac
16)IMEI
android11.0獲取方式(需要root權(quán)限)
adb?shell
su
service?call?iphonesubinfo?1
如:
C:UsersAdministrator>adb?shell
OnePlus9Pro:/?#?su
su
/system/bin/sh:?su:?inaccessible?or?not?found
127|OnePlus9Pro:/?#?service?call?iphonesubinfo?1
service?call?iphonesubinfo?1
Result:?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:/?#
把里面的有效內(nèi)容提取出來(lái)就是 IMEI 了,比如這里的是 001008447691207。
退出adb shell 方式:
輸入exit即可
17)Android 系統(tǒng)版本
adb?shell?getprop?ro.build.version.release
如:
C:UsersAdministrator>adb?shell?getprop?ro.build.version.release
11
18)IP 地址
設(shè)備的 IP 地址的時(shí)候都得「設(shè)置」-「關(guān)于手機(jī)」-「狀態(tài)信息」-「IP地址」很煩對(duì)不對(duì)?通過(guò) adb 可以方便地查看。
adb?shell?ifconfig?|?grep?Mask
如:
inet?addr:10.130.245.230??Mask:255.255.255.252
inet?addr:127.0.0.1??Mask:255.0.0.0
那么 10.130.245.230 就是設(shè)備 IP 地址。
在有的設(shè)備上這個(gè)命令沒(méi)有輸出,如果設(shè)備連著 WiFi,可以使用如下命令來(lái)查看局域網(wǎng) IP:
adb?shell?ifconfig?wlan0
如:
C:UsersAdministrator>adb?shell?ifconfig?wlan0
wlan0?????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:UsersAdministrator>adb?shell?cat?/sys/class/net/wlan0/address
a6:44:63:ac:88:7e
這查看的是局域網(wǎng) Mac 地址,移動(dòng)網(wǎng)絡(luò)或其它連接的信息可以通過(guò)
adb?shell?netcfg?命令來(lái)查看
20)CPU 信息
adb?shell?cat?/proc/cpuinfo
21)內(nèi)存信息
adb?shell?cat?/proc/meminfo
其中,MemTotal 就是設(shè)備的總內(nèi)存,MemFree 是當(dāng)前空閑內(nèi)存。
22)屏幕截圖screencap
adb?exec-out?screencap?-p?>?sc.png
其中 -p指的是保存文件格式為png格式,sc.png為指定的文件名
然而實(shí)測(cè)這個(gè)截的圖片,無(wú)法打開(kāi)。
參考鏈接: link
可以使用下面的方式:
先截圖保存到設(shè)備里:
adb?shell?screencap?-p?/sdcard/sc.png
然后將 png 文件導(dǎo)出到電腦:
adb?pull?/sdcard/sc.png
23)錄制屏幕screenrecord
錄制屏幕以 mp4 格式保存到 /sdcard:
adb?shell?screenrecord?/sdcard/filename.mp4
需要停止時(shí)按 Ctrl+C,默認(rèn)錄制時(shí)間和最長(zhǎng)錄制時(shí)間都是 180 秒。
如果需要導(dǎo)出到電腦:
adb?pull?/sdcard/filename.mp4
開(kāi)發(fā)過(guò)程與產(chǎn)品或測(cè)試溝通經(jīng)常用到(異地辦公時(shí))
24)設(shè)置系統(tǒng)日期和時(shí)間
注:需要 root 權(quán)限。
adb?shell
su
date?-s?20230529.131500
表示將系統(tǒng)日期和時(shí)間更改為 2023 年 05 月 29 日 13 點(diǎn) 15 分 00 秒。
25)檢測(cè)設(shè)備是否已 root
adb?shell
su
此時(shí)命令行提示符是 $ 則表示沒(méi)有 root 權(quán)限,是 # 則表示已 root。
26)使用 Monkey 進(jìn)行壓力測(cè)試
Monkey 可以生成偽隨機(jī)用戶(hù)事件來(lái)模擬單擊、觸摸、手勢(shì)等操作,可以對(duì)正在開(kāi)發(fā)中的程序進(jìn)行隨機(jī)壓力測(cè)試。
簡(jiǎn)單用法:
adb?shell?monkey?-p?<packagename>?-v?500
表示向 指定的應(yīng)用程序發(fā)送 500 個(gè)偽隨機(jī)事件。
27)模擬按鍵/輸入input
adb shell 里有個(gè)很實(shí)用的命令叫 input,通過(guò)它可以做一些有趣的事情。
adb?shell?input?keyevent?<keycode>
不同的 keycode 能實(shí)現(xiàn)不同的功能
項(xiàng)目 | Value |
---|---|
3 | HOME 鍵 |
4 | 返回鍵 |
5 | 打開(kāi)撥號(hào)應(yīng)用 |
6 | 掛斷電話(huà) |
24 | 增加音量 |
25 | 降低音量 |
26 | 電源鍵 |
27 | 拍照(需要在相機(jī)應(yīng)用里) |
82 | 菜單鍵 |
85 | 播放/暫停 |
86 停止播放 | |
87 | 播放下一首 |
88 | 播放上一首 |
122 | 移動(dòng)光標(biāo)到行首或列表頂部 |
123 | 移動(dòng)光標(biāo)到行末或列表底部 |
126 | 恢復(fù)播放 |
127 | 暫停播放 |
164 | 靜音 |
176 | 打開(kāi)系統(tǒng)設(shè)置 |
187 | 切換應(yīng)用 |
207 | 打開(kāi)聯(lián)系人 |
208 | 打開(kāi)日歷 |
209 | 打開(kāi)音樂(lè) |
210 | 打開(kāi)計(jì)算器 |
220 | 降低屏幕亮度 |
221 | 提高屏幕亮度 |
223 | 系統(tǒng)休眠 |
224 | 點(diǎn)亮屏幕 |
231 | 打開(kāi)語(yǔ)音助手 |
276 | 如果沒(méi)有 wakelock 則讓系統(tǒng)休眠 |
28)網(wǎng)絡(luò)連接connect
除了用usb連接安卓設(shè)備之外,還可以通過(guò)網(wǎng)絡(luò)來(lái)連接
首先確認(rèn)pc和設(shè)備是網(wǎng)絡(luò)互通的,
然后使用下面命令:
adb?connect?192.168.10.111:5555
adb?shell