adb(Android debug bridge)命令
?
From:https://www.cnblogs.com/huanyou/p/5133737.html
?
ADB 用法大全:?github 地址:https://github.com/mzlogin/awesome-adb
adb 官網鏈接( 國內想訪問,你懂得!!!?):https://developer.android.com/studio/profile/monitor
?
官網截圖:
?
?
?
概述
?
adb 是什么 ?
? ? ? ? adb 的全稱為 Android Debug Bridge,就是起到調試橋的作用。通過 adb 我們可以在 Eclipse 中通過 DDMS 來調試 Android 程序,說白了就是 debug 工具。adb 的工作方式比較特殊,采用監聽 Socket TCP 5554 等端口的方式讓 IDE 和 Qemu 通訊,默認情況下 adb 會 daemon 相關的網絡端口,所以當我們運行 Eclipse 時 adb 進程就會自動運行。
?
adb 有什么用 ?
? ? ? ? 借助 adb工具,我們可以管理設備或手機模擬器的狀態。還可以進行很多手機操作,如安裝軟件、系統升級、運行 shell 命令等等。其實簡而言說,adb 就是連接 Android手機 與 PC端 的橋梁,可以讓用戶在電腦上對手機進行全面的操作!
?
包括三個部分:adb客戶端(PC上),adb服務器(PC上),adbd(模擬器或真機上)。
網上看到下圖,貼上來
運行 adb 客戶端 時,會檢測 adb服務器 進程是否運行,如果沒有運行,啟動服務器。當服務器啟動時,會綁定到本地的TCP 5037 端口。并且監聽從 adb客戶端 發來的命令。
說明:可以通過 adb start-server 啟動服務,通過 adb kill-server 停止服務。
adb服務器 與所有正在運行的 模擬器 和 真機 連接。它通過掃描 5555—5585 之間的奇數端口來搜索模擬器或真機,一旦發現 adb守護進程,就通過此端口進行連接。
需要說明的是,每一個模擬器或真機使用一對端口,
- 奇數?端口 用于 adb 連接。
- 偶數?端口 用于 控制臺 連接。
如果 模擬器 與 adb 在 5555 端口 連接,則控制臺的連接端口將是 5554.
?
有線連接
手機通過數據線連接電腦,手機啟用 "?USB調試 ",然后輸入命令:adb devices? [-l]
多個設備連接時,可以使用 -s 參數指定要連接的設備:
?
無線連接(需要借助 USB 線)
連接過程中也有需要使用 USB ,但是連接成功之后,手機就可以在一定范圍內擺脫 USB 連接線的限制。
操作步驟:
如果能看到
? ? ? ? <device-ip-address>:5555 device
說明連接成功。
斷開無線連接
命令:adb disconnect <device-ip-address>
?
?
無線連接(無需借助 USB 線)
注:需要 root 權限。
上一節「無線連接(需要借助 USB 線)」是官方文檔里介紹的方法,需要借助于 USB 數據線來實現無線連接。
既然我們想要實現無線連接,那能不能所有步驟下來都是無線的呢?答案是能的。
在 Android 設備上安裝一個終端模擬器。
已經安裝過的設備可以跳過此步。我使用的終端模擬器下載地址是:Terminal Emulator for Android Downloads
將 Android 設備與要運行 adb 的電腦連接到同一個局域網,比如連到同一個 WiFi。
打開 Android 設備上的終端模擬器,在里面依次運行命令:
su setprop service.adb.tcp.port 5555找到 Android 設備的 IP 地址。
一般能在「設置」-「關于手機」-「狀態信息」-「IP地址」找到,也可以使用下文里?查看設備信息 - IP 地址?一節里的方法用 adb 命令來查看。
在電腦上通過 adb 和 IP 地址連接 Android 設備。
adb connect <device-ip-address>這里的?<device-ip-address>?就是上一步中找到的設備 IP 地址。
如果能看到?connected to <device-ip-address>:5555?這樣的輸出則表示連接成功。
節注一:
有的設備,比如小米 5S + MIUI 8.0 + Android 6.0.1 MXB48T,可能在第 5 步之前需要重啟 adbd 服務,在設備的終端模擬器上運行:
restart adbd如果 restart 無效,嘗試以下命令:
stop adbd start adbd?
?
adb 命令幫助
adb -h
C:\>adb -h Android Debug Bridge version 1.0.39 Revision 3db08f2c6889-android Installed as C:\Microsoft\AndroidSDK\25\platform-tools\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 SERIALuse device with given serial number (overrides $ANDROID_SERIAL)-p PRODUCTname or path ('angler'/'out/target/product/angler');default $ANDROID_PRODUCT_OUT-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]general commands:devices [-l] list connected devices (-l for long output)help show this help messageversion show version numnetworking:connect HOST[:PORT] connect to a device via TCP/IP [default port=5555]disconnect [HOST[:PORT]]disconnect from given TCP/IP device [default port=5555], or allforward --list list all forward socket connectionsforward [--no-rebind] LOCAL REMOTEforward socket connection using:tcp:<port> (<local> may be "tcp:0" to pick any open port)localabstract:<unix domain socket name>localreserved:<unix domain socket name>localfilesystem:<unix domain socket name>dev:<character device name>jdwp:<process pid> (remote only)forward --remove LOCAL remove specific forward socket connectionforward --remove-all remove all forward socket connectionsppp TTY [PARAMETER...] run PPP over USBreverse --list list all reverse socket connections from devicereverse [--no-rebind] REMOTE LOCALreverse socket connection using:tcp:<port> (<remote> may be "tcp:0" to pick any open port)localabstract:<unix domain socket name>localreserved:<unix domain socket name>localfilesystem:<unix domain socket name>reverse --remove REMOTE remove specific reverse socket connectionreverse --remove-all remove all reverse socket connections from devicefile transfer:push LOCAL... REMOTEcopy local files/directories to devicepull [-a] REMOTE... LOCALcopy files/dirs from device-a: preserve file timestamp and modesync [DIR]copy all changed files to device; if DIR is "system", "vendor", "oem",or "data", only sync that partition (default all)-l: list but don't copyshell:shell [-e ESCAPE] [-n] [-Tt] [-x] [COMMAND...]run remote shell command (interactive shell if no command given)-e: choose escape character, or "none"; default '~'-n: don't read from stdin-T: disable PTY allocation-t: force PTY allocation-x: disable remote exit codes and stdout/stderr separationemu COMMAND run emulator console commandapp installation:install [-lrtsdg] PACKAGEinstall-multiple [-lrtsdpg] PACKAGE...push package(s) to the device and install them-l: forward lock application-r: replace existing application-t: allow test packages-s: install application on sdcard-d: allow version code downgrade (debuggable packages only)-p: partial application install (install-multiple only)-g: grant all runtime permissionsuninstall [-k] PACKAGEremove this app package from the device'-k': keep the data and cache directoriesbackup/restore:backup [-f FILE] [-apk|-noapk] [-obb|-noobb] [-shared|-noshared] [-all] [-system|-nosystem] [PACKAGE...]write an archive of the device's data to FILE [default=backup.adb]package list optional if -all/-shared are supplied-apk/-noapk: do/don't back up .apk files (default -noapk)-obb/-noobb: do/don't back up .obb files (default -noobb)-shared|-noshared: do/don't back up shared storage (default -noshared)-all: back up all installed applications-system|-nosystem: include system apps in -all (default -system)restore FILE restore device contents from FILEdebugging:bugreport [PATH]write bugreport to given PATH [default=bugreport.zip];if PATH is a directory, the bug report is saved in that directory.devices that don't support zipped bug reports output to stdout.jdwp list pids of processes hosting a JDWP transportlogcat show device log (logcat --help for more)security:disable-verity disable dm-verity checking on userdebug buildsenable-verity re-enable dm-verity checking on userdebug buildskeygen FILEgenerate adb public/private key; private key stored in FILE,public key stored in FILE.pub (existing files overwritten)scripting:wait-for[-TRANSPORT]-STATEwait for device to be in the given stateState: device, recovery, sideload, or bootloaderTransport: usb, local, or any [default=any]get-state print offline | bootloader | deviceget-serialno print <serial-number>get-devpath print <device-path>remountremount /system, /vendor, and /oem partitions read-writereboot [bootloader|recovery|sideload|sideload-auto-reboot]reboot the device; defaults to booting system image butsupports bootloader and recovery too. sideload rebootsinto recovery and automatically starts sideload mode,sideload-auto-reboot is the same but reboots after sideloading.sideload OTAPACKAGE sideload the given full OTA packageroot restart adbd with root permissionsunroot restart adbd without root permissionsusb restart adb server listening on USBtcpip PORT restart adb server listening on TCP on PORTinternal debugging:start-server ensure that there is a server runningkill-server kill the server if it is runningreconnect kick connection from host side to force reconnectreconnect device kick connection from device side to force reconnectenvironment variables:$ADB_TRACEcomma-separated list of debug info to log:all,adb,sockets,packets,rwx,usb,sync,sysdeps,transport,jdwp$ADB_VENDOR_KEYS colon-separated list of keys (files or directories)$ANDROID_SERIAL serial number to connect to (see -s)$ANDROID_LOG_TAGS tags to be used by logcat (see logcat --help)C:\>?
?
Android 命令
?
使用 Android命令的前提條件,一定要將 sdk\tools 目錄放到環境變量中。
使用 android -h 獲取幫助信息。android list device 和 adb devices 輸出的內容不一致,應該是 android 輸出的并不是已經運行的設備,而是其能創建虛擬機的設備列表,使用 eclipse 創建虛擬機的時候,可以選擇的那個列表。另外 android 命令執行的時間比較長。android 命令沒有特別去操作,只是在網上看到很多人寫的博客中都有 android 命令,但是自己用的時候卻提示不是內部或外部命令。所以將使用android命令的前提寫出來。
android 包含很多子命令。可以通過以下方式查看子命令的幫助信息:
例如查看創建模擬器子命令的幫助信息:android -h create avd
在sdk\tools目錄中,不止有android命令。還有ddms等命令,可以操作一下試試。
?
?
?
ADB常用命令
?
常用命令:
adb version 查看 adb 版本 adb devices 查詢已連接設備/模擬器 adb start-server 啟動 adb server 命令 adb kill-server 停止 adb server 命令 adb -P <port> start-server 指定 adb server 的網絡端口 adb connect <device-ip-address> 通過 IP 地址連接設備 adb disconnect <device-ip-address> 斷開無線連接adb reboot 重啟 adb pull <remote> <local> 從設備拷貝東西到PC上 adb push <local> <remote> 從PC拷貝東西到設備上 adb logcat 查看日志 adb logcat -c 清空日志 adb bugreport 查看bug報告 adb disable-verity adb enable-verity adb keygen <file> adb jdwp adb sync [<directory>]? adb emu adb restore adb backup [-f <file>] [-apk|-noapk] [-obb|-noobb] [-shared|-noshared] [-all] [-system|-nosystem] [<packages ... >]abd -s 模擬器編號 命令 對某一模擬器執行命令 adb -s 模擬器編號 shell wm size 指定設備獲取屏幕分辨率 adb -s 模擬器編號 install test.apk 給指定設備安裝應用C:\>adb devicesList of devices attachedemulator-5554emulator-5556C:\>adb -s emulator-5554 shell wm sizePhysical size: 900x1600adb install -r 應用程序.apk 安裝應用程序 adb install [-lrtsdg] <file> 安裝app adb install-multiple [-lrtsdpg] <file ... >adb uninstall [-k] <packagename> 卸載app,<packagename> 表示應用的包名-k 參數可選,表示卸載應用但保留數據和緩存目錄adb shell 進入設備的 shell 命令 adb shell pm list packages 查看所有應用 adb shell pm list packages -s 查看系統應用 adb shell pm list packages -3 查看第三方應用 adb shell pm list packages | grep qq 使用 grep 來過濾 adb shell pm clear <packagename> 清除應用數據與緩存。如:adb shell pm clear com.stormzhang.demoadb shell am start -n com.stormzhang.demo/.ui.SplashActivity 通過 adb 來啟動應用 adb shell am start -D -n com.stormzhang.demo/.ui.SplashActivity -D 表示以 Debug模式啟動應用 adb shell am force-stop <packagename> 強制停止應用。有些時候應用卡死了,需要強制停止。如:adb shell am force-stop cn.androidstar.demo adb shell input keyevent 26 電源鍵 adb shell input keyevent 82 菜單鍵 adb shell input keyevent 3 HOME 鍵 adb shell input keyevent 4 返回鍵 adb shell input keyevent 24 增加音量 adb shell input keyevent 25 降低音量 adb shell input keyevent 164 靜音 adb shell input keyevent 85 播放/暫停 adb shell input keyevent 86 停止播放 adb shell input keyevent 87 播放下一首 adb shell input keyevent 88 播放上一首 adb shell input keyevent 126 恢復播放 adb shell input keyevent 127 暫停播放 adb shell input swipe 300 1000 300 500 滑動解鎖。參數 300 1000 300 500起始點x坐標 起始點y坐標 結束點x坐標 結束點y坐標。 adb shell input text hello 輸入文本adb shell getprop ro.product.model 查看設備型號 adb shell wm size 屏幕分辨率 adb shell wm density 屏幕密度 adb shell dumpsys battery 電池狀況 adb shell dumpsys window displays 顯示屏參數 adb shell dumpsys activity top 查看當前活動頁面 adb shell getprop ro.build.version.release 查看Android 系統版本 adb shell ifconfig | grep Mask 查看IP 地址 adb shell cat /sys/class/net/wlan0/address Mac 地址 adb shell cat /proc/cpuinfo CPU 信息 adb shell cat /proc/meminfo 內存信息 adb get-serialno 獲取序列號adb shell monkey -p <packagename> -v 500 使用 Monkey 進行壓力測試表示向 <packagename> 指定的應用程序發送 500 個偽隨機事件 adb shell ps 查看進程 adb shell top 查看實時資源占用情況adb forward <local> <remote> 將特定端口上的請求轉發到模擬器或手機的指定端口上。 adb forward --no-rebind <local> <remote> adb forward --list adb forward --remove <local> adb forward --remove-alladb reverse <remote> <local> adb reverse --norebind <remote> <local> adb reverse --list adb reverse --remove <remote> adb reverse --remove-all缷載 apk 包:adb shellcd data/apprm apk包exitadb uninstall apk包的主包名adb install -r apk包查看 adb 命令幫助信息:adb help在命令行中查看LOG信息: adb logcat -s 標簽名adb shell后面跟的命令主要來自:源碼\system\core\toolbox目錄和源碼\frameworks\base\cmds目錄。刪除系統應用:adb remount (重新掛載系統分區,使系統分區重新可寫)。adb shellcd system/apprm *.apk獲取管理員權限:adb root啟動Activity:adb shell am start -n 包名/包名+類名(-n 類名,-a action,-d date,-m MIME-TYPE,-c category,-e 擴展數據,等)。發布端口:你可以設置任意的端口號,做為主機向模擬器或設備的請求端口。如: adb forward tcp:5555 tcp:8000復制文件:你可向一個設備或從一個設備中復制文件, 復制一個文件或目錄到設備或模擬器上: 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 .搜索模擬器/設備的實例:取得當前運行的模擬器/設備的實例的列表及每個實例的狀態: adb devices查看bug報告: adb bugreport 記錄無線通訊日志:一般來說,無線通訊的日志非常多,在運行時沒必要去記錄,但我們還是可以通過命令,設置記錄: adb shell logcat -b radio獲取設備的ID和序列號:adb get-product adb get-serialno訪問數據庫SQLite3adb shell sqlite3# cd system/sd/data // 進入系統內指定文件夾 # ls // 列表顯示當前文件夾內容 # rm -r xxx // 刪除名字為xxx的文件夾及其里面的所有文件 # rm xxx // 刪除文件xxx # rmdir xxx // 刪除xxx的文件夾ADB IDEA以上命令你們覺得是不是很方便了?但是在用 Android Studio 開發的時候如果有一款插件是不是更方便了?推薦一個 AS 插件 ADB IDEA ,這個插件可以直接在AS中快速操作一些 ADB 命令,非常方便。安裝完成后,快捷鍵直接喚起:Mac OSX: Ctrl+Shift+AWindows/Linux: Ctrl+Alt+Shift+A?
?
連接設備相關:
?
adb -a 命令針對所有的設備,需要與命令一起使用,例如 adb -a push <local> <remote>
adb -d 命令針對真機,需要與命令一起使用。如果有多個模擬器或手機,當使用adb命令的時候就需要指定目標設備。
adb -e 命令針對虛擬機,需要與命令一起使用。如果有多個模擬器或手機,當使用adb命令的時候就需要指定目標設備。
adb -s <specific device> 命令針對指定設備,需要與命令一起使用。如果有多個模擬器或手機,當使用adb命令的時候就需要指定目標設備。
adb -p <product name or path>
adb -H 訪問其他機器上的adb service
adb -P?訪問其他機器上的adb service
adb devices [-l] 列出所有的設備,實際列出的就是設備的serialnumber,可以通過-s指定列出的serialNumber找到對應的設備
adb connect <host>[:<port>]?
adb disconnect[<host>[:<port>]]?
scripting :
adb wait-for-device
adb start-server 啟動adb server
adb kill-server 停止adb server
adb get-state 列出設備狀態: offline | bootloader | device
adb get-serialno 列出設備的serial number
adb get-devpath?
adb remount 從新掛載系統分區,使其可寫(system、vendor、oem目錄)
adb reboot [bootloader|recovery]?
adb reboot sideload
adb reboot sideload-auto-reboot
adb sideload <file>
adb root 重啟adbd并獲得root權限
adb unroot ?重啟adbd并釋放root權限
adb usb
adb tcpip <port>
?
?
Android 系統對應的命令(部分為linux命令)
adb shell am start -n <package_name>/.<activity_class_name> // 啟動應用
adb shell top ?// 查看設備cpu和內存占用情況
adb shell top -m 6 ?// 查看占用內存前6的app
adb shell top -n 1 // 刷新一次內存信息,然后返回
adb shell procrank ??// 查詢各進程內存使用情況
adb shell kill [pid] // 殺死一個進程
adb shell ps ?// 查看進程列表
adb shell ps -x [PID] ? ?// 查看指定進程狀態
adb shell service list ?// 查看后臺services信息
?
emulator命令
可以使用emulator命令啟動模擬器。
emulator -avd <avd名稱>
emulator -data 鏡像文件名稱
?
?
連接真機的兩種方式
?
可以通過兩種方式連接真機,通過usb連接,也可以通過局域網連接,如下圖所示。通過局域網連接的方式需要使用命令adb connect <host>[:<port>],斷開連接的方式 adb disconnect[<host>[:<port>]]
?
?
查看版本
? ? $ adb version
? ? Android Debug Bridge version 1.0.36
? ? Revision 8f855a3d9b35-android
查看連接設備
? ? 輸入以下命令可以查詢已連接的設備與模擬器:
? ? $ adb devices
? ? List of devices attached
? ? 02ae0c1021089daf ??????device
安裝一個apk,執行以下命令:
? ? adb install <apkfile>
? ? // 如: adb install demo.apk
? ? 如果不是當前目錄,則后面要跟路徑名:
? ? adb install /Users/storm/temp/demo.apk
? ? 保留數據和緩存文件,重新安裝apk:
? ? adb install -r demo.apk
? ? 安裝apk到sd卡:
? ? adb install -s demo.apk
卸載
? ? 直接卸載:
? ? adb uninstall <package>
? ? // 如:adb uninstall com.stormzhang.demo
? ? 卸載 app 但保留數據和緩存文件:
? ? adb uninstall -k com.stormzhang.demo
啟動/停止 Server
? ? 一般來說,下面兩個命令基本不會用到,因為只要設備連接正確,會自動啟動 adb server 的,不過大家也需要知道這倆命令:
? ? 啟動 adb server :
? ? adb start-server
? ? 停止 adb server :
? ? adb kill-server
列出手機裝的所有app的包名:
? ? adb shell pm list packages
列出系統應用的所有包名:
? ? adb shell pm list packages -s
列出除了系統應用的第三方應用包名:
? ? adb shell pm list packages -3
使用 grep 來過濾:
? ? adb shell pm list packages | grep qq
清除應用數據與緩存
? ? 有些時候我們測試需要清除數據與緩存,則需要用到如下命令:
? ? adb shell pm clear <packagename>
? ? // 如:adb shell pm clear com.stormzhang.demo
啟動應用
? ? 如果我們想要通過 adb 來啟動應用
? ? adb shell am start -n com.stormzhang.demo/.ui.SplashActivity
強制停止應用
? ? 有些時候應用卡死了,需要強制停止,則執行以下命令:
? ? adb shell am force-stop <packagename>
? ? // 如:adb shell am force-stop cn.androidstar.demo
查看日志
? ? adb logcat
重啟
? ? adb reboot
獲取序列號
? ? $adb get-serialno
? ? 02ae0c1021089daf
獲取 MAC 地址
? ? $adb shell ?cat /sys/class/net/wlan0/address
? ? bc:f5:ac:f9:f7:c8
查看設備型號
? ? $adb shell getprop ro.product.model
? ? Nexus 5
查看 Android 系統版本
? ? $adb shell getprop ro.build.version.release
? ? 7.0.1
查看屏幕分辨率
? ? $adb shell wm size
? ? Physical size: 1080×1920
查看屏幕密度
? ? $adb shell wm density
? ? Physical density: 480
關于 ADB 的命令有太多,以上只列了一些我比較常用的命令,關于更多的命令可以見這里:
https://github.com/mzlogin/awesome-adb
ADB IDEA
以上命令你們覺得是不是很方便了?但是我們在用 Android Studio 開發的時候如果有一款插件是不是更方便了?所以這里推薦一個 AS 插件 ADB IDEA ,裝了這款插件可以直接在 AS 中快速操作一些 ADB 命令,非常方便。
安裝完成后,快捷鍵直接喚起:
Mac OSX: Ctrl+Shift+A
Windows/Linux: Ctrl+Alt+Shift+A
?
?
?
總結
以上是生活随笔為你收集整理的adb(Android debug bridge)命令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库——游标
- 下一篇: Scrapy-spiders(爬虫)