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 连接线的限制。
操作步骤:
- 将 Android 设备与要运行 adb 的电脑连接到同一个局域网,比如连到同一个 WiFi。
- 将设备与电脑通过 USB 线连接。应确保连接成功(可运行 adb devices 看是否能列出该设备)。
- 让设备在 5555 端口监听 TCP/IP 连接:adb tcpip 5555
- 断开 USB 连接。
- 找到设备的 IP 地址。一般能在「设置」-「关于手机」-「状态信息」-「IP地址」找到,也可以使用下文里 查看设备信息 - IP 地址 一节里的方法用 adb 命令来查看。
- adb connect <device-ip-address> 。这里的 <device-ip-address> 就是上一步中找到的设备 IP 地址。
- 确认连接状态:adb devices
如果能看到
<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