Android 官方命令深入分析之Android Debug Bridge(adb)

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
简介: 作者:宋志辉 Android Debug Brideg(adb)是一个多用途的命令行工具。可以与Android虚拟机进行通信或连接真机。

作者:宋志辉
Android Debug Brideg(adb)是一个多用途的命令行工具。可以与Android虚拟机进行通信或连接真机。它同样提供了访问设备shell的高级命令行操作的权限。它是一个包含以下三部分的客户端-服务端程序:

  • 一个客户端,运行在你的开发设备上。你可以通过adb命令来从shell中调用一个客户端。或者通过ADT插件和DDMS创建adb客户端。
  • 一个服务端,作为一个后台进程运行在你的开发设备中。服务端负责客户端和虚拟机或设备中adb守护进程的通信。
  • 一个守护进程,运行在虚拟机和设备中的一个后台进程。

你可以在/platform-tools/中找到adb工具。

当你启动一个adb客户端时,客户端首先检查这里是否已经有一个服务端进程在运行。如果没有,则启动服务端进程。当服务端进程运行后,与本地的TCP的5037端口,并且监听发自客户端的命令-所有的adb 客户端都通过5037端口与adb 服务端进行通信。

接下来服务端建立起与所有运行的虚拟机和设备的连接。它通过扫描5555到5585端口的奇数端口来确定运行的虚拟机或设备的实例。当服务端发现一个adb守护进程,就通过这个端口建立连接。需要注意的是,每个虚拟机或设备都需要两个端口:一个偶数端口用来进行控制台连接,一个奇数端口用来adb 连接。
比如:
宋志辉的虚拟机,控制台端口:5554
宋志辉的虚拟机,adb端口:5555

如上所示,虚拟机实例连接到5555端口,控制台监听5554端口。

一旦服务器建立起所有虚拟机的连接,你可以使用adb命令来访问这些设备。因为服务端管理与设备或虚拟机的连接并且处理来自adb客户端的命令。你可以使用任何的客户端来控制任意的虚拟机或设备。

允许adb 调试

为了使adb可以通过USB连接设备,必须在系统设置中找到 开发者选项 开启USB调试。

在Android 4.2及以上版本中,开发者选项默认是隐藏的。要显示出来,点击“设置”“关于”“构建版本”7次。返回之前的屏幕可以找到“开发者选项”。

在有些设备中,开发者选项 可能显示出来或者名称不同。

注意:当你连接一个高于Android4.2.2版本的设备到计算机时,手机会弹窗提示是否同意一个RSA密钥来运行这台计算机进行调试。这个安全机制用来保护用户的设备,因为除非你解锁设备,否则其他的adb命令无法运行。这需要adb版本大于等于1.0.31(SDK大于等于16.0.1)。

语法

你可以在你的电脑上通过命令行来运行adb命令。用法如下:

adb [-d|-e|-s <设备号>] <命令>

如果这里只有一个虚拟机或设备运行,adb默认发送到这台设备或虚拟机。如果有多个虚拟机或设备存在,你需要使用-d, -e, 或 -s选项指明运行命令的设备。

命令

下面的表格列出了所有的支持的adb命令并解释了含义和用途。

分类 命令 描述
目标设备 -d 传递一个adb命令到仅有的usb设备上
-e 传递一个adb命令到仅有的虚拟机上
-s 传递一个adb命令到指定的设备上
通用 devices 列出当前运行的虚拟机或设备列表
help 列出adb命令的帮助列表
version 输出adb的版本
调试 logcat [option] [filter-specs] 打印log数据到屏幕上
bugreport 输出dumpsys, dumpstate和logcat数据到屏幕上
jdwp 列出指定的设备的可用的JDWP进程
数据 install 安装Android应用到虚拟机或设备中
pull 从虚拟机或设备中复制文件到电脑上
push 从电脑上复制文件到虚拟机或设备中
端口和网络 forward sockets连接用到的命令
ppp 通过USB运行PPP
脚本 get-serialno 获取adb实例的序列号字符串
get-state 获取虚拟机或设备的adb状态
wait-for-device 阻断执行直到设备在线
服务端 start-server 检测adb服务端是否运行,如果不,则运行
stop-server 终止adb服务端进程
shell shell 在指定设备或虚拟机中启动远程的shell

查询虚拟机或设备实例

在使用adb命令之前,了解当前运行了多少虚拟机或设备是很有必要的。可以通过指定的命令生成一个当前运行的列表:

adb devices

作为回应adb输出所有设备的状态信息:

  • 序列号。由adb创建的用于唯一标示虚拟机或设备的字符串。
  • 状态。实例运行的状态(offline,device,no device)。

输出的格式如下:

[序列号] [状态]

下面是devices命令的一个例子:

adb devices
List of devices attached
emulator-5554  device
emulator-5556  device
emulator-5558  device

指定特定的虚拟机或设备

如果是多个设备或虚拟机在运行,你需要指定运行adb命令的实例。可以使用命令中的-s来实现:

adb -s <序列号> <命令> 

可以通过devices命令获取序列号。

adb -s emulator-5556 install helloWorld.apk

需要注意的是,当多个设备运行时,你没有通过-s指定设备,运行adb命令会报错。
如果有一个或多个设备,但只有一个虚拟机,可以使用-e命令在虚拟机运行;如果有一个或多个虚拟机,但只有设备,可以使用-d在设备运行。

安装一个应用

你可以使用adb命令从开发计算机中复制一个应用到虚拟机或设备中。可以使用install命令:

adb install <apk路径>

当然,安装apk到设备中不一定要使用命令行。

复制文件

你可以使用pull和push来复制虚拟机或设备中的文件。

停止adb服务端

在有些时候,我们需要停止adb服务端,重新启动来解决问题。
停止adb服务端,可以使用kill-server命令,之后就可以重启adb服务端运行任何命令了。

无线连接

通常adb命令通过usb连接设备来使用,当然也可以通过wifi来实现。

  1. 开发计算机和设备(通常是手机)连接了同一个网络(同一个wifi或在同一个局域网中)。(并不是所有的热点都支持,防火墙需要支持adb)。
  2. 使用usb线连接计算机。
  3. 确保计算机的adb命令运行在usb模式中。
    $ adb usb
    restarting in USB mode
  4. 通过usb连接设备。
    $ adb devices
    List of devices attached
    ######## device

  5. 重启adb到tcipip模式。
    $ adb tcpip 5555
    restarting in TCP mode port: 5555

  6. 找到android设备的ip地址。

  7. 通过ip地址连接到设备。
    $ adb connect #.#.#.#
    connected to #.#.#.#:5555
  8. 移除设备的usb线,确认你还可以对设备进行访问。
    $ adb devices
    List of devices attached
    #.#.#.#:5555 device

如果adb连接丢失后:

  1. 确保你的计算机和手机接入同一个wifi。
  2. 通过adb connect重新连接。
  3. 如果没用的话,重启服务端进程。
     adb kill-server

然后重新开始以上步骤。

相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
目录
相关文章
|
23天前
|
安全 Android开发 数据安全/隐私保护
深入探讨iOS与Android系统安全性对比分析
在移动操作系统领域,iOS和Android无疑是两大巨头。本文从技术角度出发,对这两个系统的架构、安全机制以及用户隐私保护等方面进行了详细的比较分析。通过深入探讨,我们旨在揭示两个系统在安全性方面的差异,并为用户提供一些实用的安全建议。
|
3月前
|
开发工具 Android开发 Swift
安卓与iOS开发环境对比分析
在移动应用开发的广阔舞台上,安卓和iOS这两大操作系统无疑是主角。它们各自拥有独特的特点和优势,为开发者提供了不同的开发环境和工具。本文将深入浅出地探讨安卓和iOS开发环境的主要差异,包括开发工具、编程语言、用户界面设计、性能优化以及市场覆盖等方面,旨在帮助初学者更好地理解两大平台的开发特点,并为他们选择合适的开发路径提供参考。通过比较分析,我们将揭示不同环境下的开发实践,以及如何根据项目需求和目标受众来选择最合适的开发平台。
51 2
|
2月前
|
缓存 Java Shell
Android 系统缓存扫描与清理方法分析
Android 系统缓存从原理探索到实现。
59 15
Android 系统缓存扫描与清理方法分析
|
4月前
|
Shell Linux 开发工具
"开发者的救星:揭秘如何用adb神器征服Android设备,开启高效调试之旅!"
【8月更文挑战第20天】Android Debug Bridge (adb) 是 Android 开发者必备工具,用于实现计算机与 Android 设备间通讯,执行调试及命令操作。adb 提供了丰富的命令行接口,覆盖从基础设备管理到复杂系统操作的需求。本文详细介绍 adb 的安装配置流程,并列举实用命令示例,包括设备连接管理、应用安装调试、文件系统访问等基础功能,以及端口转发、日志查看等高级技巧。此外,还提供了常见问题的故障排除指南,帮助开发者快速解决问题。掌握 adb 将极大提升 Android 开发效率,助力项目顺利推进。
97 0
|
2月前
|
存储 Linux Android开发
Android底层:通熟易懂分析binder:1.binder准备工作
本文详细介绍了Android Binder机制的准备工作,包括打开Binder驱动、内存映射(mmap)、启动Binder主线程等内容。通过分析系统调用和进程与驱动层的通信,解释了Binder如何实现进程间通信。文章还探讨了Binder主线程的启动流程及其在进程通信中的作用,最后总结了Binder准备工作的调用时机和重要性。
Android底层:通熟易懂分析binder:1.binder准备工作
|
3月前
|
安全 Android开发 数据安全/隐私保护
探索安卓与iOS的安全性差异:技术深度分析与实践建议
本文旨在深入探讨并比较Android和iOS两大移动操作系统在安全性方面的不同之处。通过详细的技术分析,揭示两者在架构设计、权限管理、应用生态及更新机制等方面的安全特性。同时,针对这些差异提出针对性的实践建议,旨在为开发者和用户提供增强移动设备安全性的参考。
143 3
|
2月前
|
开发工具 Android开发 Swift
安卓与iOS开发环境的差异性分析
【10月更文挑战第8天】 本文旨在探讨Android和iOS两大移动操作系统在开发环境上的不同,包括开发语言、工具、平台特性等方面。通过对这些差异性的分析,帮助开发者更好地理解两大平台,以便在项目开发中做出更合适的技术选择。
|
3月前
|
安全 Linux Android开发
探索安卓与iOS的安全性差异:技术深度分析
本文深入探讨了安卓(Android)和iOS两个主流操作系统平台在安全性方面的不同之处。通过比较它们在架构设计、系统更新机制、应用程序生态和隐私保护策略等方面的差异,揭示了每个平台独特的安全优势及潜在风险。此外,文章还讨论了用户在使用这些设备时可以采取的一些最佳实践,以增强个人数据的安全。
|
4月前
|
Java 开发工具 Android开发
安卓与iOS开发环境对比分析
【8月更文挑战第20天】在移动应用开发的广阔天地中,Android和iOS两大平台各自占据着重要的位置。本文将深入探讨这两种操作系统的开发环境,从编程语言到开发工具,从用户界面设计到性能优化,以及市场趋势对开发者选择的影响。我们旨在为读者提供一个全面的比较视角,帮助理解不同平台的优势与挑战,并为那些站在选择十字路口的开发者提供有价值的参考信息。
102 17
|
3月前
|
IDE 开发工具 Android开发
安卓与iOS开发环境对比分析
本文将探讨安卓和iOS这两大移动操作系统在开发环境上的差异,从工具、语言、框架到生态系统等多个角度进行比较。我们将深入了解各自的优势和劣势,并尝试为开发者提供一些实用的建议,以帮助他们根据自己的需求选择最适合的开发平台。
51 1