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
官网截图:
1、概述
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.
2、连接 手机
两种方式连接真机,通过usb连接,也可以通过局域网连接,如下图所示。通过局域网连接的方式需要使用命令adb connect <host>[:<port>],断开连接的方式 adb disconnect[<host>[:<port>]]
有线连接 手机
手机通过数据线连接电脑,手机启用 " USB调试 ",然后输入命令:adb devices [-l]
多个设备连接时,可以使用 -s 参数指定要连接的设备:
无线连接
方法 1:借助 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>
方法 2:无需 USB
注:需要 root 权限。
方法 1 是官方文档里介绍的方法,需要借助于 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
方法 3:通过 第三方 apk ( 推荐 )
注:需要 root 权限。
WiFi ADB无线调试 v3.0.6:https://www.pc6.com/az/1102386.html
3、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 SERIAL
use device with given serial number (overrides $ANDROID_SERIAL)
-p PRODUCT
name 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 message
version 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 all
forward --list list all forward socket connections
forward [--no-rebind] LOCAL REMOTE
forward 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 connection
forward --remove-all remove all forward socket connections
ppp TTY [PARAMETER...] run PPP over USB
reverse --list list all reverse socket connections from device
reverse [--no-rebind] REMOTE LOCAL
reverse 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 connection
reverse --remove-all remove all reverse socket connections from devicefile transfer:
push LOCAL... REMOTE
copy local files/directories to device
pull [-a] REMOTE... LOCAL
copy files/dirs from device
-a: preserve file timestamp and mode
sync [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 separation
emu COMMAND run emulator console commandapp installation:
install [-lrtsdg] PACKAGE
install-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 permissions
uninstall [-k] PACKAGE
remove 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 transport
logcat show device log (logcat --help for more)security:
disable-verity disable dm-verity checking on userdebug builds
enable-verity re-enable dm-verity checking on userdebug builds
keygen FILE
generate adb public/private key; private key stored in FILE,
public key stored in FILE.pub (existing files overwritten)scripting:
wait-for[-TRANSPORT]-STATE
wait for device to be in the given state
State: device, recovery, sideload, or bootloader
Transport: usb, local, or any [default=any]
get-state print offline | bootloader | device
get-serialno print <serial-number>
get-devpath print <device-path>
remount
remount /system, /vendor, and /oem partitions read-write
reboot [bootloader|recovery|sideload|sideload-auto-reboot]
reboot the device; defaults to booting system image but
supports bootloader and recovery too. sideload reboots
into recovery and automatically starts sideload mode,
sideload-auto-reboot is the same but reboots after sideloading.
sideload OTAPACKAGE sideload the given full OTA package
root restart adbd with root permissions
unroot restart adbd without root permissions
usb restart adb server listening on USB
tcpip PORT restart adb server listening on TCP on PORTinternal debugging:
start-server ensure that there is a server running
kill-server kill the server if it is running
reconnect kick connection from host side to force reconnect
reconnect device kick connection from device side to force reconnectenvironment variables:
$ADB_TRACE
comma-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:\>
ADB 常用命令
ADB Debugging
Wireless
Package Manager
File Manager
- adb pull
- adb push
- adb shell ls
- adb shell cd
- adb shell rm
- adb shell mkdir
- adb shell touch
- adb shell pwd
- adb shell cp
- adb shell mv
Network
Logcat
Screenshot
System
常用命令:
adb version 查看 adb 版本
adb devices 查询已连接设备/模拟器
adb start-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 devices
List of devices attached
emulator-5554
emulator-5556
C:\>adb -s emulator-5554 shell wm size
Physical size: 900x1600adb install -r 应用程序.apk 安装应用程序,-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 列出手机装的所有app的包名
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 <package_name>/.<activity_class_name> // 启动应用
adb shell am start -n com.stormzhang.demo/.ui.SplashActivity 启动应用示例
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 ps -x [PID] // 查看指定进程状态
adb shell kill [pid] // 杀死一个进程
adb shell top // 查看实时资源占用情况
adb shell top -m 6 // 查看占用内存前6的app
adb shell top -n 1 // 刷新一次内存信息,然后返回adb shell procrank // 查询各进程内存使用情况
adb shell service list // 查看后台services信息
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-allemulator 命令:可以使用 emulator 命令启动模拟器。
emulator -avd <avd名称>
emulator -data 镜像文件名称
缷载 apk 包:
adb shell
cd data/app
rm apk包
exit
adb uninstall apk包的主包名
adb install -r apk包查看 adb 命令帮助信息:
adb help在命令行中查看LOG信息:
adb logcat -s 标签名adb shell 后面跟的命令主要来自:
源码\system\core\toolbox目录和源码\frameworks\base\cmds目录。删除系统应用:
adb remount (重新挂载系统分区,使系统分区重新可写)。
adb shell
cd system/app
rm *.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访问数据库SQLite3
adb shell
sqlite3# cd system/sd/data // 进入系统内指定文件夹
# ls // 列表显示当前文件夹内容
# rm -r xxx // 删除名字为xxx的文件夹及其里面的所有文件
# rm xxx // 删除文件xxx
# rmdir xxx // 删除xxx的文件夹
Android studio 插件:ADB IDEA
以上命令你们觉得是不是很方便了?但是在用 Android Studio 开发的时候如果有一款插件是不是更方便了?推荐一个 AS 插件 ADB IDEA ,这个插件可以直接在AS中快速操作一些 ADB 命令,非常方便。
安装完成后,快捷键直接唤起:
Mac OSX: Ctrl+Shift+A
Windows/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-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>
4、android_adb shell / busybox 指令集
shell 可以调用不同的指令集,但是 shell 作为用户命令行解释器,本身又是一个可执行文件,比如 bash/zsh/ksh/mksh。
adb shell 所用的shell一般指 mksh
其他 shell
在 android(ARM) 架构,有 zsh for arm 可以选用,您可以使用 magisk 刷入
android 基础指令集
toybox
查看 toybox 命令集
cd /system/bin
ls -al|nl|tail -n 20
busybox_toybox 加强指令集
busybox 官网:https://busybox.net/
Android 安装 busybox
方法 1:通过 magisk 刷入busybox 模块
方法 2:官网下载对应手机设备arm框架的 busybox,然后传到手机。推荐 方法 1。
busybox ( 嵌入式 Linux 的瑞士军刀 ):GitHub - mirror/busybox: BusyBox mirror
BusyBox安装准备工作:
1. 手机 Root。
2. 下载 手机设备架构对应的BusyBox版本,下面将以busybox-armv6l文件名为示例。
3. 电脑上 下载安卓 adb 驱动工具。
4. 手机开启USB调试模式。在电脑上使用 adb 连接手机BusyBox安装步骤:
1. 将 busybox-armv6l 重命名为 busybox
2. 将busybox传入手机的SD卡。打开 terminal(Linux,Mac)或cmd(Windows)
adb push ~/Desktop/busybox /mnt/sdcard
其中的~/Desktop请根据自己的情况替换成正确的路径
3. 使用 ls 检查一下 /system 里是否有 xbin 目录,
没有的话输入 mkdir xbin 创建,
因为本示例是要把busybox安装到 /system/xbin 。
4. 复制 busybox 文件到 /system/xbin,并为其分配“可执行”的权限
cp /mnt/sdcard/busybox /system/xbin
chmod 755 busybox
5. 这时就可以使用 busybox 的命令了。
例如以前没有清屏的clear命令,现在只需输入 busybox clear 就可以实现清屏功能
使用完整版的 ls 只需输入 busybox ls 。
但是每次前面都加上个busybox太麻烦了,所以我们还要继续完成安装。
在 /system/xbin 下输入:busybox --install /system/xbin
如果想安装到别的目录,则把点替换成别的路径。
至此就安装完成了帮助:busybox --help
使用示例:busybox nc --help小技巧:
- 1. busybox 里有 ash 和 hush 还有 sh 这几种 shell,在命令行输入 ash 或 hush,可以像在 bash 里那样,通过按上下键选择刚才输入的命令。
- 2. android系统本身就有ls命令,busybox里也有ls,输入ls时调用的是android的ls,那么想用busybox的ls就要每次都在前面加个busybox吗?不用,使用alias命令可以搞定。alias ls='busybox ls' 也可以通过修改 /init.rc 来解决。
toybox、busybox指令集(二进制程序)所在目录
设置无操作后息屏时间:adb shell settings put system screen_off_timeout 600000
60*10*1000ms = 600s = 10min
有效值应该在5000(ms)以上
否则无效
BusyBox for Windows
- github:https://github.com/rmyorston/busybox-w32
- busybox.exe 官网、下载:http://frippery.org/busybox/
BusyBox 是一个包含 许多常见的Unix工具。它经常出现在嵌入式Linux系统中。 像路由器、安卓智能手机、Linux 容器和任何地方 否则,拥有一组紧凑的Unix命令行工具会很方便。
busybox-w32 是 BusyBox 到 Microsoft Windows WIN32 API 的端口。 它将 BusyBox 功能的一个子集带到 Windows 中 单个自包含本机可执行文件。
这个版本的 BusyBox 实现了一百多个 Unix 风格的命令。 其中一些比较重要:ash、awk、sed、vi、find、grep 等。。。
如果您需要 bash 或其他 GNU 实用程序的全部功能,busybox-w32 可能不是你想要的:Cygwin,Gow或UnxUtils可能是 更合适。但是,如果您需要提供一些 shell 脚本 您的软件,或者如果您需要在Windows上运行一些随机的Unix实用程序 busybox-w32 可能是一个紧凑的替代方案。完整的可执行文件更少 比Cygwin设置程序的一半大!
使用 busybox
示例:busybox.exe uname -a
但是,为了获得最佳体验,我建议使用 BusyBox shell。这 配置为运行 BusyBox 命令,而无需链接每个命令 他们进入你的道路。在桌面上设置快捷方式以运行命令行管理程序 使用如下命令: C:\path\to\busybox.exe sh -l
最后一个字符是小写的“L”(用于登录)。虽然我不推荐它,但可以创建指向每个的链接 BusyBox 小程序使用以下命令: busybox --install C:\path\to\directory
省略目录将导致链接在同一 目录作为 busybox.exe您正在运行的可执行文件。该选项创建“硬”链接,这些链接是 在 NTFS 文件系统上可用,但在 FAT 上不可用。添加该选项会创建符号链接,但如果您没有 所需的权限。--install
-s
可以删除指向 busybox 的硬链接.exe(包括 busybox.exe本身)通过运行: busybox --uninstall C:\path\to\busybox
由于Microsoft Windows无法删除正在运行的可执行文件,因此仅此 如果上述命令中的“busybox”与 您尝试删除的二进制文件。命令: busybox --uninstall -n C:\path\to\busybox
显示指向二进制文件的链接而不删除它们。
在 64位系统中安装 32位的 busybox 时,最好把 busybox32.exe 放在 C:\Windows\System32 目录中,安装 64位 bosybox 时,busybox64.exe 最好放在 C:\Windows\SysWOW64 目录中。