Android 工具
- 作者: 五速梦信息网
- 时间: 2026年04月04日 13:52
Android 工具-adb
版权声明:本文为博主原创文章,未经博主允许不得转载。
Android 开发中, adb 是开发者经常使用的工具,是 Android 开发者必须掌握的。
/platform-tools//system/core/adb
- 客户端部分,运行在开发用的电脑上,可以在命令行中运行adb命令来调用该客户端,像 DDMS 这样的 Android 工具也可以调用 adb 客户端。
- 守护进程部分,运行于模拟器或手机的后台。
- 服务端部分,是运行在开发用电脑上的后台进程,用于管理客户端与运行在模拟器或真机的守护进程通信。
adb 工具模型示意图如下:

adb 的工作原理
当启动 adb 客户端时,客户端首先检查 adb 服务端进程是否运行,如果没有运行,则启动服务端。当服务端启动时,它会绑定到本地的 TCP5037 端口,并且监听从 adb 客户端发来的命令——所有 adb 客户端都使用 5037 端口与 adb 服务端通信。
接下来服务端与所有正在运行的模拟器或手机连接。它通过扫描 5555-5585 之间的奇数号端口来搜索模拟器或手机,一旦发现 adb 守护进程,就通过此端口进行连接。需要说明的是,每一个模拟器或手机使用一对有序的端口,偶数号端口用于控制台连接,奇数号端口用于 adb 连接,例如:
Emulator 1, console: 5554
Emulator 1, adb: 5555
Emulator 2, console: 5556
Emulator 2, adb: 5557 …
即如果模拟器与 adb 在 5555 端口连接,则其与控制台的连接就是 5554 端口。
当服务端与所有的模拟器建立连接之后,就可以使用 adb 命令来控制或者访问了。因为服务端管理着连接并且可以接收到从多个 adb 客户端的命令,所以可以从任何一个客户端或脚本来控制任何模拟器或手机设备。
补充:
设置——>关于手机
adb 用法
查询模拟器或手机状态
了解 adb 服务端连接的模拟器或手机可以帮助更好的使用 adb 命令,这可以通过 devices 命令来列举当前连接的设备:
adb devices
执行结果是 adb 为每一个设备输出以下状态信息:
序列号(serialNumber):由 adb 创建用于唯一标识设备的字符串,格式是 <设备类型>-<端口号>,例如: emulator-5554
连接状态(state),其值是可能是下面的任意一种:
offline — 未连接或未响应
device — 表示设备已经连接到服务端。但需要注意的是,这个状态并不表示 Android 系统已经完全启动起来并且可操作,因为系统在启动的过程中就已经连接 adb ,但这个状态是正常的可操作状态。
no device - 表示没有任何设备连接(楼主测试过程中没有碰到过 no device 的情况,没连接设备就没任何输出)
每一个设备的输出形如:
[serialNumber] [state]
下面是 adb devices 命令和其执行结果:
\( adb devices<br/>
List of devices attached<br/>
emulator-5554 device<br/>
emulator-5556 device<br/>
emulator-5558 device<br/>
</code></pre>
<p>如果没有模拟器或手机在运行,运行 adb devices 命令的执行结果如下:</p>
<pre><code>\) adb devces
List of devices attached
操作指定模拟器或手机
-s
adb -s <serialNumber> <command>
adb devices
例如:
adb -s emulator-5556 install helloWorld.apk
-s
-s
If you have multiple devices available (hardware or emulated), but only one is an emulator, simply use the -e option to send commands to the emulator. Likewise if there‘s multiple devices but only one hardware device attached, use the -d option to send commands to the hardware device.
-e
\( adb -e install helloWorld.apk<br/>
//同理,如果有多个设备,但只有一个真机,可以使用如下命令快速发送命令<br/>
\) adb -d install helloWorld.apk
安装应用
adb installadb install
adb install [-lrtsdg] <path_to_apk>
(-l: 锁定该程序)
(-r: 重新安装该程序,保留应用数据)
(-t: allow test packages)
(-s: 将应用安装到 SD卡,不过现在手机好像都没有 SD卡 了吧)
(-d: 允许降版本号安装,当然只有 debug 包才能使用)
(-g: 安装完默认授予所有运行时权限,这个应该对 Android 6.0 及之后的版本才有效吧)
更多关于创建 apk 文件可参考:Build And Running
卸载应用
既然有安装应用的命令,那当然有卸载应用的命令。卸载应用命令的格式如下:
//<package> 表示要卸载应用的包名
adb uninstall [-k] <package>
(-k:不删除程序运行所产生的数据和缓存目录)
端口转发
adb forward
adb forward tcp:6100 tcp:7100
也可以使用UNIX命名的socket标识:
adb forward tcp:6100 local:logd
adb forward
与模拟器或手机传输文件
pullpushinstallpullpush
从模拟器或手机拷贝文件或文件夹(包括文件夹的子目录)
adb pull [-a] <remote_path> <local_path>
(-a:保留文件时间戳及属性)
将文件或文件夹(包括文件夹的子目录)拷贝到模拟器或手机
adb push <local_path> <remote_path>
比如,我想把桌面的 log.txt 复制到手机的 dev 目录下,则命令如下:
\( adb push /Users/littlejie/Desktop/log.txt /dev<br/>
</code></pre>
<p>有时候,使用该命令复制文件到手机或从手机复制文件,会碰到如下提示:</p>
<pre><code>failed to copy 'log.txt' to '/dev/log.txt': Permission denied<br/>
</code></pre>
<pre><code>adb root</code></pre>
<pre><code>\) adb root
adbd is already running as root
这是因为当前用户没有相应的权限或者是 /dev 目录不可写。解决方法如下:
//方法一
//已 root 权限启动 adb 服务
\( adb root<br/>
//adb remount (重新挂载系统分区,使系统分区重新可写)<br/>
\) adb remount
//将文件复制到 /dev 目录下
\( adb push /Users/littlejie/Desktop/log.txt /dev<br/>
</code></pre>
<pre><code>//方法二:修改文件的读写权限<br/>
\) adb shell
su
chmod 777 /dev
关于 Linux 下文件权限的更多内容请参考:linux系统644、755、777权限详解
adb shell
adb shelladb shell
adb shell 有两种使用方式,一种是不进入 remote shell 直接执行命令行,格式如下:
adb [-d|-e|-s <serialNumber>] shell <shell_command>
还有一种是,进入模拟器或手机的 remote shell 执行,格式如下:
adb [-d|-e|-s <serialNumber>] shell
开启或关闭 adb 服务
adb kill-server
adb start-server
\( adb kill-server<br/>
\) adb start-server
- daemon not running. starting it now on port 5037 *
- daemon started successfully *
\( adb kill-server<br/>
\) adb devices
List of devices attached
- daemon not running. starting it now on port 5037 *
- daemon started successfully *
emulator-5556 device
emulator-5554 device
无线调试
平时我们都是使用 USB调试,但是现在也支持通过 WIFI 进行调试了。使用方式如下:
\( adb tcpip 5555<br/>
</code></pre><pre><code>adb connect <device_ip_address><br/>
</code></pre><pre><code>\) adb devices
List of devices attached
<device-ip-address>:5555 device
通过以上步骤,就可以开心的享用 WiFi 调试了。如果没有正常连接,可以按照下面的步骤检查:
adb connect
这是一篇关于 Android 设备 USB调试 和 WiFi调试 相互切换 的博文,博主写了一个脚本来实现这个过程,有兴趣的同学可以去看看。
补充
\( adb shell<br/>
emulator-5554<br/>
</code></pre><pre><code>//直接在终端输出<br/>
\) adb bugreport
//将 bugreport 输出到指定文件
\( adb bugreport > file_path<br/>
</code></pre><pre><code>\) adb logcat
\( adb help<br/>
</code></pre><pre><code>adb reboot<br/>
</code></pre><pre><code>//此命令会重启守护进程<br/>
\) adb root
//不以 root 权限开启 adb 守护进程
$ adb unroot
总结
以上就是 adb 命令的常见用法,大部分翻译自 Android Debug Bridge ,其中加了一些个人总结。有些不常用的 adb 命令没有介绍,更多 adb 用法请见:Adb Command Summary。文中如有纰漏,欢迎大家留言指出。
参考:
- 上一篇: Android 关于ijkplayer
- 下一篇: android 动态k线图





