ADB常用命令

一、什么是ADB?

adb:一種功能多樣的命令行調(diào)試工具。

Android 調(diào)試橋 (adb)?,可與設(shè)備進(jìn)行通信。adb 命令可用于執(zhí)行各種設(shè)備操作(例如安裝和調(diào)試應(yīng)用),并提供對(duì) Unix shell(可用來在設(shè)備上運(yùn)行各種命令)的訪問權(quán)限。它是一種客戶端-服務(wù)器程序,包括以下三個(gè)組件:

客戶端:用于發(fā)送命令。客戶端在開發(fā)機(jī)器上運(yùn)行??梢酝ㄟ^發(fā)出 adb 命令從命令行終端調(diào)用客戶端。(可以通過它對(duì)Android應(yīng)用進(jìn)行安裝、卸載、調(diào)試)

PC上的手機(jī)助手基本都是通過adb命令去完成的。有時(shí)候裝了這類手機(jī)助手的話,它自帶的adb程序可能會(huì)與Android SDK下的adb程序產(chǎn)生沖突,5037端口被占用,導(dǎo)致adb命令無法連接到設(shè)備。Windows下通過netstat -ano|findstr "5037"

守護(hù)程序 (adbd):用于在設(shè)備上運(yùn)行命令。守護(hù)程序在每個(gè)設(shè)備上作為后臺(tái)進(jìn)程運(yùn)行

執(zhí)行adb shell ps | grep adbd, 可以找到該后臺(tái)進(jìn)程,Windows使用findstr替代grep.

adb nodaemon server

服務(wù)器(Service):用于管理客戶端與守護(hù)程序之間的通信。服務(wù)器在開發(fā)機(jī)器上作為后臺(tái)進(jìn)程運(yùn)行

adb服務(wù)啟動(dòng)后,Windows可以在任務(wù)管理中找到adb.exe; linux ps -ef | gref adb 可以查看service

二、adb命令

一般都是通過這樣子的格式 adb [-d|-e|-s <設(shè)備序列號(hào)>] <子命令>

通常只有一臺(tái)設(shè)備就忽略 [-d|-e|-s ] 這一部分

參數(shù)含義:

-d指定當(dāng)前唯一通過USB連接的Android設(shè)備為命令目標(biāo)

-e指定當(dāng)前唯一運(yùn)行的模擬器為命令目標(biāo)

-s <serialNumber>指定相應(yīng) serialNumber 號(hào)的設(shè)備/模擬器為命令目標(biāo)

這里介紹一些常用的命令:

獲取設(shè)備列表及設(shè)備狀態(tài)

adb devices

圖示

獲取設(shè)備的狀態(tài)

adb get-state

圖示

注意:設(shè)備的狀態(tài)有 3 鐘,device?,?offline?,?unknown

device:設(shè)備正常連接

offline:連接出現(xiàn)異常,設(shè)備無響應(yīng)

unknown:沒有連接設(shè)備

?結(jié)束 adb 服務(wù)

adb kill-server?

?啟動(dòng) adb 服務(wù)

adb start-server

注意:通常兩個(gè)命令一起用,有時(shí)候我們開啟server會(huì)失敗,這是因?yàn)槲覀冄b了的手機(jī)助手,豌豆莢或者其他軟件自帶有自己的adb,導(dǎo)致端口沖突開啟失敗。一般在連接出現(xiàn)異常,使用 adb devices 未正常列出設(shè)備, 設(shè)備狀態(tài)異常時(shí)使用 kill-server,然后運(yùn)行 start-server 進(jìn)行重啟服務(wù)。

圖示

打印 Android 的系統(tǒng)日志

adb logcat?

圖示

?打印 dumpsys、dumpstate、logcat 的輸出,也是用于分析錯(cuò)誤輸出比較多

adb bugreport?

打印日志后重定向到一個(gè)文件中

adb bugreport > d:\bugreport.log

圖示

?安裝應(yīng)用,覆蓋安裝是使用 -r 選項(xiàng)

adb install? **.apk


圖示

注意:有些adb版本無法支持安裝中文的apk

查看手機(jī)應(yīng)用包名

adb shell pm list packages

圖示

查看應(yīng)用對(duì)應(yīng)的apk文件在手機(jī)上的安裝位置則可以在上面的命令后加-f參數(shù)

adb shell pm list packages -f

圖示

卸載應(yīng)用,后面跟的參數(shù)是應(yīng)用的包名,請(qǐng)區(qū)別于?apk 文件名

adb uninstall?com.perfdog.app

圖示

'-k' means keep the data and cache directories , -k 選項(xiàng),卸載時(shí)保存數(shù)據(jù)和緩存目錄

adb -k uninstall

?將 Android 設(shè)備上的文件或者文件夾復(fù)制到本地

adb pull

adb pull /sdcard/test.txt C:\Users\Administrator\Desktop\log


圖示
圖示

推送本地文件至 Android 設(shè)備

adb push 電腦文件路徑 安卓設(shè)備路徑

圖示

獲取連接到的手機(jī)的序列號(hào)

adb get-serialno

獲取設(shè)備的連接狀態(tài)

adb -s get-state

圖示

等待設(shè)備連接成功

adb wait-for-device

該命令將會(huì)阻塞一直到默認(rèn)連接的那部機(jī)器狀態(tài)變?yōu)閐evice,也就是連接成功。

三、adb shell

其實(shí)adb shell命令就是調(diào)用的是Android設(shè)備中的system/bin目錄下的命令。

Android的內(nèi)核本身就是Linux,所以Android本身也支持Linux命令,但是因?yàn)槭鞘謾C(jī)系統(tǒng),所以進(jìn)行了一定的刪減,部分命令不支持,而不支持的部分,我們可以通過安裝busybox這個(gè)軟件進(jìn)行。

如何在手機(jī)中執(zhí)行Shell命令?

? 每次都加上adb shell來進(jìn)行命令的發(fā)送與執(zhí)行

adb shell <command>

?先通過adb shell進(jìn)入手機(jī)Shell執(zhí)行狀態(tài),然后直接輸入Linux命令。


圖示

使一個(gè)apk處于禁用狀態(tài),相當(dāng)于卸載了:

disable? ?<PACKAGE_OR_COMPONENT>

其中 PACKAGE_OR_COMPONENT的格式是 package/class, 如 com.UCMobile/.main.UCMobile

eg:adb shell su disable com.UCMobile/.main.UCMobile

同時(shí)我們?cè)谑謾C(jī)上發(fā)現(xiàn),UC瀏覽器的圖標(biāo)不見了

讓一個(gè)apk從禁用狀態(tài)恢復(fù)過來

enable <PACKAGE_OR_COMPONENT>

其中 PACKAGE_OR_COMPONENT的格式是 package/class, 如 com.UCMobile/.main.UCMobileeg:

adb shell su enable com.UCMobile/.main.UCMobile

同時(shí)我們從手機(jī)上發(fā)現(xiàn),UC瀏覽器的圖標(biāo)又出現(xiàn)了。

查看一個(gè)apk所在的路徑

pm path 包名

圖示

adb shell pm path com.UCMobile

查看手機(jī)中裝的所有的包

pm list packages

圖示

屏幕開始錄像并且儲(chǔ)存到/sdcard中,同時(shí)名字為demo.mp4

adb shell screenrecord /sdcard/demo.mp4

錄屏設(shè)置時(shí)長10s,命名為demo.mp4

adb shell screenrecord --time-limit 10 /sdcard/demo.mp4

注意:現(xiàn)在僅支持一部分手機(jī)錄屏,不支持的手機(jī)會(huì)出現(xiàn)以下提示

圖示

解決方法:

安裝了scrcpy之后,只需要輸入如下命令,即可錄取指定設(shè)備的屏幕

scrcpy -s device --render-expired-frames -Nr ./demo.pm4

--render-expired-frames:盡可能最大幀率

-N:不在PC端展示

-r:錄制mp4/mkv文件

關(guān)閉設(shè)備請(qǐng)求,開啟設(shè)備

adb shell stop

adb shell start

設(shè)備關(guān)機(jī)以及重啟

adb reboot

adb shutdown

四、其他常用pm、am、dumpsys、uiautomator、input

pm:安裝、卸載、清理包和數(shù)據(jù)、

am:啟動(dòng)具體的app

dumpsys:獲取系統(tǒng)、app的性能數(shù)據(jù)

uiautomator:獲取當(dāng)前界面結(jié)構(gòu)和執(zhí)行自動(dòng)化測(cè)試

input:幫助完成一些自動(dòng)化模擬的指令

pm(package manager)可以獲取一些安裝到Android設(shè)備上的app的信息

pm list packages 用法:list packages [?options]?filter

獲取所有的應(yīng)用的包名

adb shell pm list package

列出系統(tǒng)應(yīng)用

adb shell pm list package -s


列出第三方應(yīng)用

adb shell pm list package -3


查看它們的關(guān)聯(lián)文件

adb shell pm list package -f

查看軟件包的安裝來源

adb shell pm list package -i

pm dump?包名?很多dump信息

adb shell pm dump com.yy.huanju

安裝應(yīng)用

pm install?

apk如果在電腦用 adb install?

如果在Android設(shè)備上用 adb shell pm install

卸載應(yīng)用,同adb uninstall ,后跟包名

pm uninstall?

清除應(yīng)用數(shù)據(jù)

pm clear?

am(activity manager,字面意思就跟activity有關(guān),大家都知道Android的界面都是由一個(gè)個(gè)activity顯示的)

啟動(dòng)一個(gè)Activity

adb shell am start -n package/launch_activity

獲取到package和launch_activity

adb shell dumpsys window windows | findstr Current

AndroidSDK中aapt工具,檢索命令結(jié)果,可以獲取到package和launch_activity

aapt.exe d badging xx.apk

這里涉及到一個(gè)點(diǎn),如何找到程序的入口,首先你要知道是哪個(gè)activity才能啟動(dòng);

adb logcat | grep -i displayed

啟動(dòng)華為系統(tǒng)相機(jī)

adb shell am start -n com.huawei.camera/com.huawei.camera

打開音樂播放器

am start -a android.intent.action.MUSIC_PLAYER

播放指定音樂:

am start -a "android.intent.action.VIEW" -t "audio/mp3" -d "file:///sdcard/Music/test.mp3"

先停止目標(biāo)應(yīng)用,再啟動(dòng)

adb shell am start -S com.huawei.camera/com.huawei.camera

等待應(yīng)用完成啟動(dòng)

adb shell am start -W com.huawei.camera/com.huawei.camera

啟動(dòng)網(wǎng)頁(android.intent.action.VIEW具體參考Android官網(wǎng))

adb shell am start -aandroid.intent.action.VIEW-d http://baidu.com

結(jié)束應(yīng)用

am force-stop 包名

input

模擬輸入,向獲得焦點(diǎn)的EditText控件輸入內(nèi)容

adb shell input text??"hello,world"

返回主界面

adb shell input keyevent KEYCODE_HOME

發(fā)送一個(gè)點(diǎn)擊操作的指令,參數(shù)是<x> <y>坐標(biāo)

adb shell input tap 100 100

從左往右滑動(dòng)屏幕,?/從?100 100?經(jīng)歷300毫秒滑動(dòng)到?200 200

adb shell input swipe 100 100 200 200??300

長按操作,在?100 100?位置長按?1000毫秒

adb shell input swipe 100 100 100 100??1000

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 大神博客:https://mp.weixin.qq.com/s/fWaa1rutwfoIIrje8RfWBw ad...
    Singal11閱讀 2,343評(píng)論 2 5
  • 1. adb devices 主要作用:查看當(dāng)前已連接的設(shè)備,連接到計(jì)算機(jī)的Android設(shè)備或者模擬器將...
    C1R2閱讀 1,751評(píng)論 0 1
  • 最近看到一些關(guān)于adb的相關(guān)知識(shí),總結(jié)一下,這些常用的命令以后可以直接拿來用~ adb其實(shí)就是Android De...
    Mr_馮先生閱讀 4,453評(píng)論 0 10
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月,有人笑有人哭,有人歡樂有人憂愁,有人驚喜有人失落,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,879評(píng)論 28 54
  • 首先介紹下自己的背景: 我11年左右入市到現(xiàn)在,也差不多有4年時(shí)間,看過一些關(guān)于股票投資的書籍,對(duì)于巴菲特等股神的...
    瞎投資閱讀 5,965評(píng)論 3 8

友情鏈接更多精彩內(nèi)容