AndroidDebugBridge

public class AndroidDebugBridge
extends Object

java.lang.Object
   ↳ com.android.tradefed.device.server.AndroidDebugBridge


与主机端 Android 调试桥 (adb) 的连接

这是与任何设备、模拟器或在这些设备上运行的应用通信的中心点。

必须在执行任何操作之前调用 init(boolean)

摘要

嵌套类

interface AndroidDebugBridge.IClientChangeListener

实现此接口的类提供用于处理 ClientImpl 更改的方法。 

interface AndroidDebugBridge.IDebugBridgeChangeListener

实现此接口的类提供了一种处理 AndroidDebugBridge 更改(包括重新启动)的方法。 

interface AndroidDebugBridge.IDeviceChangeListener

实现此接口的类提供用于处理 IDevice 添加、删除和更改的方法。 

常量

int DEFAULT_START_ADB_TIMEOUT_MILLIS

启动 ADB 服务器时使用的默认超时时间

字段

public static final AdbVersion MIN_ADB_VERSION

支持的 adb 最低和最高版本。

公共方法

static void addClientChangeListener(AndroidDebugBridge.IClientChangeListener listener)

将监听器添加到监听器集合中,当 ClientImpl 属性发生更改时,系统会向该监听器发送 IClientChangeListener 接口中定义的消息,以通知监听器。

static void addDebugBridgeChangeListener(AndroidDebugBridge.IDebugBridgeChangeListener listener)

将监听器添加到监听器集合中,当新的 AndroidDebugBridge 连接时,系统会向该监听器发送 IDebugBridgeChangeListener 接口中定义的消息,以通知该监听器。

static void addDeviceChangeListener(AndroidDebugBridge.IDeviceChangeListener listener)

将监听器添加到监听器集合中,当 IDevice 连接、断开连接或其属性或 ClientImpl 列表发生更改时,系统会向该监听器发送 IDeviceChangeListener 接口中定义的消息之一,以通知该监听器。

static void clientChanged(ClientImpl client, int changeMask)

通知监听器已修改 ClientImpl

static AndroidDebugBridge createBridge(long timeout, TimeUnit unit)

创建一个未与任何特定可执行文件相关联的 AndroidDebugBridge

static AndroidDebugBridge createBridge(String osLocation, boolean forceNewBridge)

此方法已弃用。 如果 ADB 不响应,此方法可能会挂起。请改用 createBridge(String, boolean, long, TimeUnit)

static AndroidDebugBridge createBridge()

此方法已弃用。 如果 ADB 不响应,此方法可能会挂起。请改用 createBridge(long, TimeUnit)

static AndroidDebugBridge createBridge(String osLocation, boolean forceNewBridge, long timeout, TimeUnit unit)

从命令行工具的位置创建新的调试桥。

static void deviceChanged(IDevice device, int changeMask)

通知监听器已修改 IDevice

static void deviceConnected(IDevice device)

通知监听器有新的 IDevice

static void deviceDisconnected(IDevice device)

通知监听器 IDevice 已断开连接。

static void disableFakeAdbServerMode()
static void disconnectBridge()

此方法已弃用。 如果 ADB 不响应,此方法可能会挂起。请改用 disconnectBridge(long, TimeUnit)

static boolean disconnectBridge(long timeout, TimeUnit unit)

断开当前调试桥的连接,并销毁该对象。

static void enableFakeAdbServerMode(int port)
static ListenableFuture<AdbVersion> getAdbVersion(File adb)
static AndroidDebugBridge getBridge()

返回当前的调试桥。

static boolean getClientSupport()

返回 ddmlib 是否已设置为支持监控和与在 IDevice 上运行的 ClientImpl 进行交互。

int getConnectionAttemptCount()

返回 AndroidDebugBridge 对象尝试连接到 adb 精灵的次数。

static int getDebugBridgeChangeListenerCount()
static int getDeviceChangeListenerCount()
IDevice[] getDevices()

返回设备。

ListenableFuture<> getRawDeviceList()

返回由 adb 命令行报告的设备集。

int getRestartAttemptCount()

返回 AndroidDebugBridge 对象尝试重启 adb 精灵的次数。

static InetSocketAddress getSocketAddress()

此方法已弃用。 此方法返回的环回服务器地址可能与 ADB 服务器使用的地址不匹配。也就是说,JVM 可能处于 IPv4 模式,而 ADB 服务器托管在 IPv6 环回地址上。在打开与 ADB 服务器的连接时,首选 openConnection()

static ListenableFuture<String> getVirtualDeviceId(ListeningExecutorService service, File adb, IDevice device)
boolean hasInitialDeviceList()

返回桥接在创建后是否已从 adb 获取初始列表。

static void init(AdbInitOptions options)

init(boolean) 类似,但能够传递一组自定义的环境变量。

static void init(boolean clientSupport)

初始化 ddm 库。

static void init(boolean clientSupport, boolean useLibusb, env)

init(boolean) 类似,但能够启用 libusb 并传递一组自定义的环境变量。

static void initIfNeeded(boolean clientSupport)

仅在需要时初始化库;已弃用,不适用于非测试用途。

boolean isConnected()

返回 AndroidDebugBridge 对象是否仍连接到 adb 精灵。

static boolean isUserManagedAdbMode()
static SocketChannel openConnection()

尝试连接到本地 Android 调试桥服务器。

static void removeClientChangeListener(AndroidDebugBridge.IClientChangeListener listener)

从监听器集合中移除监听器,当 ClientImpl 属性发生更改时,系统会通知该集合中的监听器。

static void removeDebugBridgeChangeListener(AndroidDebugBridge.IDebugBridgeChangeListener listener)

从监听器集合中移除监听器,当新的 AndroidDebugBridge 开始时,系统会通知该集合中的监听器。

static void removeDeviceChangeListener(AndroidDebugBridge.IDeviceChangeListener listener)

从监听器集合中移除监听器,当 IDevice 连接、断开连接或其属性或 ClientImpl 列表发生更改时,系统会通知该集合中的监听器。

boolean restart(long timeout, TimeUnit unit)

重新启动 adb,但不重新启动其周围的服务。

boolean restart()

此方法已弃用。 如果 ADB 不响应,此方法可能会挂起。请改用 restart(long, TimeUnit)

boolean startAdb(long timeout, TimeUnit unit)

启动 adb 主机端服务器。

static void terminate()

终止 ddm 库。

常量

DEFAULT_START_ADB_TIMEOUT_MILLIS

public static final int DEFAULT_START_ADB_TIMEOUT_MILLIS

启动 ADB 服务器时使用的默认超时时间

常量值: 20000 (0x00004e20)

字段

MIN_ADB_VERSION

public static final AdbVersion MIN_ADB_VERSION

支持的 adb 最低版本和最高版本。此字段对应于 //device/tools/adb/adb.h 中的 ADB_SERVER_VERSION

公共方法

addClientChangeListener

public static void addClientChangeListener (AndroidDebugBridge.IClientChangeListener listener)

将监听器添加到监听器集合中,当 ClientImpl 属性发生更改时,系统会向该监听器发送 IClientChangeListener 接口中定义的消息之一,以通知该监听器。

参数
listener AndroidDebugBridge.IClientChangeListener:应通知的监听器。

addDebugBridgeChangeListener

public static void addDebugBridgeChangeListener (AndroidDebugBridge.IDebugBridgeChangeListener listener)

将监听器添加到监听器集合中,当新的 AndroidDebugBridge 连接时,系统会向该监听器发送 IDebugBridgeChangeListener 接口中定义的消息,以通知该监听器。

参数
listener AndroidDebugBridge.IDebugBridgeChangeListener:应通知的监听器。

addDeviceChangeListener

public static void addDeviceChangeListener (AndroidDebugBridge.IDeviceChangeListener listener)

将监听器添加到监听器集合中,当 IDevice 连接、断开连接或其属性或 ClientImpl 列表发生更改时,系统会向该监听器发送 IDeviceChangeListener 接口中定义的消息之一,以通知该监听器。

参数
listener AndroidDebugBridge.IDeviceChangeListener:应通知的监听器。

clientChanged

public static void clientChanged (ClientImpl client, 
                int changeMask)

通知监听器已修改 ClientImpl

监听器的通知是在同步块中完成的。请务必注意,监听器可能会访问 IDevice 的各种方法以及使用内部锁的 getDevices()

参数
client ClientImpl:修改后的 Client

changeMask int:用于指示 Client 中发生的变化的掩码

createBridge

public static AndroidDebugBridge createBridge (long timeout, 
                TimeUnit unit)

创建未与任何特定可执行文件相关联的 AndroidDebugBridge

此桥接器将要求 adb 处于运行状态。它将无法启动/停止/重启 adb。

如果网桥已启动,则直接返回该网桥,而不进行任何更改(类似于调用 getBridge())。

参数
timeout long

unit TimeUnit

返回
AndroidDebugBridge 已连接的网桥,如果在创建或连接到网桥时出现错误,则为 null

createBridge

public static AndroidDebugBridge createBridge (String osLocation, 
                boolean forceNewBridge)

此方法已弃用。
如果 ADB 不响应,此方法可能会挂起。请改用 createBridge(String, boolean, long, TimeUnit)

从命令行工具的位置创建新的调试桥。

除非位置相同且 forceNewBridge 设置为 false,否则系统会断开所有现有服务器的连接。

参数
osLocation String:命令行工具“adb”的位置

forceNewBridge boolean:强制创建新网桥,即使已存在位置相同的网桥。

返回
AndroidDebugBridge 已连接的网桥,如果在创建或连接到网桥时出现错误,则为 null

createBridge

public static AndroidDebugBridge createBridge ()

此方法已弃用。
如果 ADB 不响应,此方法可能会挂起。请改用 createBridge(long, TimeUnit)

创建未与任何特定可执行文件相关联的 AndroidDebugBridge

此桥接器将要求 adb 处于运行状态。它将无法启动/停止/重启 adb。

如果网桥已启动,则直接返回该网桥,而不进行任何更改(类似于调用 getBridge())。

返回
AndroidDebugBridge 已连接的网桥,如果在创建或连接到网桥时出现错误,则为 null

createBridge

public static AndroidDebugBridge createBridge (String osLocation, 
                boolean forceNewBridge, 
                long timeout, 
                TimeUnit unit)

从命令行工具的位置创建新的调试桥。

除非位置相同且 forceNewBridge 设置为 false,否则系统会断开所有现有服务器的连接。

参数
osLocation String:命令行工具“adb”的位置

forceNewBridge boolean:强制创建新网桥,即使已存在位置相同的网桥。

timeout long:最长等待时间

unit TimeUnittimeout 实参的时间单位

返回
AndroidDebugBridge 已连接的网桥,如果在创建或连接到网桥时出现错误,则为 null

deviceChanged

public static void deviceChanged (IDevice device, 
                int changeMask)

通知监听器已修改 IDevice

监听器的通知是在同步块中完成的。请务必注意,监听器可能会访问 IDevice 的各种方法以及使用内部锁的 getDevices()

参数
device IDevice:修改后的 IDevice

changeMask int

deviceConnected

public static void deviceConnected (IDevice device)

通知监听器有新的 IDevice

监听器的通知是在同步块中完成的。请务必注意,监听器可能会访问 IDevice 的各种方法以及使用内部锁的 getDevices()

参数
device IDevice:新的 IDevice

deviceDisconnected

public static void deviceDisconnected (IDevice device)

通知监听器 IDevice 已断开连接。

监听器的通知是在同步块中完成的。请务必注意,监听器可能会访问 IDevice 的各种方法以及使用内部锁的 getDevices()

参数
device IDevice:已断开连接的 IDevice

disableFakeAdbServerMode

public static void disableFakeAdbServerMode ()

disconnectBridge

public static void disconnectBridge ()

此方法已弃用。
如果 ADB 不响应,此方法可能会挂起。请改用 disconnectBridge(long, TimeUnit)

断开当前调试桥的连接,并销毁该对象。必须使用 createBridge(String, boolean) 创建新对象。

此命令还会停止当前的 adb 宿主机服务器。

disconnectBridge

public static boolean disconnectBridge (long timeout, 
                TimeUnit unit)

断开当前调试桥的连接,并销毁该对象。必须使用 createBridge(String, boolean) 创建新对象。

此命令还会停止当前的 adb 宿主机服务器。

参数
timeout long

unit TimeUnit

返回
boolean 如果方法在指定超时时间内成功完成,则为 true

enableFakeAdbServerMode

public static void enableFakeAdbServerMode (int port)

参数
port int

getAdbVersion

public static ListenableFuture<AdbVersion> getAdbVersion (File adb)

参数
adb File

返回
ListenableFuture<AdbVersion>

getBridge

public static AndroidDebugBridge getBridge ()

返回当前的调试桥。如果未创建任何内容,则可以为 null

返回
AndroidDebugBridge

getClientSupport

public static boolean getClientSupport ()

返回 ddmlib 是否已设置为支持监控和与在 IDevice 上运行的 ClientImpl 进行交互。

返回
boolean

getConnectionAttemptCount

public int getConnectionAttemptCount ()

返回 AndroidDebugBridge 对象尝试连接到 adb 精灵的次数。

返回
int

getDebugBridgeChangeListenerCount

public static int getDebugBridgeChangeListenerCount ()

返回
int

getDeviceChangeListenerCount

public static int getDeviceChangeListenerCount ()

返回
int

getDevices

public IDevice[] getDevices ()

返回设备。

返回
IDevice[]

getRawDeviceList

public ListenableFuture<> getRawDeviceList ()

返回由 adb 命令行报告的设备集。此方法主要用于需要通过其他渠道验证 getDevices() 列表状态的连接助理或其他诊断工具。仅需访问设备列表的代码应改为调用 getDevices()

返回
ListenableFuture<>

getRestartAttemptCount

public int getRestartAttemptCount ()

返回 AndroidDebugBridge 对象尝试重启 adb 守护程序的次数。

返回
int

getSocketAddress

public static InetSocketAddress getSocketAddress ()

此方法已弃用。
此方法返回的环回服务器地址可能与 ADB 服务器使用的地址不匹配。也就是说,JVM 可能处于 IPv4 模式,而 ADB 服务器托管在 IPv6 环回地址上。在打开与 ADB 服务器的连接时,首选 openConnection()

返回主机上 ADB 服务器的套接字地址。

此方法将尝试通过打开到 ADB 服务器的套接字通道来返回已知可用的套接字地址。系统会尝试使用 IPv4 和 IPv6 回环地址。如果两者都无法连接,此方法将回退到返回 JVM 首选的环回地址。此回退逻辑是防止 API 损坏所必需的。

如果启用了虚假 ADB 服务器模式,此方法将自动回退到旧版实现,而不会尝试连接到 ADB。

返回
InetSocketAddress

getVirtualDeviceId

public static ListenableFuture<String> getVirtualDeviceId (ListeningExecutorService service, 
                File adb, 
                IDevice device)

参数
service ListeningExecutorService

adb File

device IDevice

返回
ListenableFuture<String>

hasInitialDeviceList

public boolean hasInitialDeviceList ()

返回桥接在创建后是否已从 adb 获取初始列表。

createBridge(String, boolean) 之后立即调用 getDevices() 通常会导致返回一个空列表。这是因为与 adb 的内部异步通信机制无法保证在调用 getDevices() 之前已构建 IDevice 列表。

建议通过创建 IDeviceChangeListener 对象来获取 IDevice 对象的列表。

返回
boolean

init

public static void init (AdbInitOptions options)

init(boolean) 类似,但能够传递一组自定义的环境变量。

参数
options AdbInitOptions

init

public static void init (boolean clientSupport)

初始化 ddm 库。

必须在调用 createBridge(String, boolean) 之前调用此方法一次。

ddmlib 的偏好设置也应使用从默认值更改的任何默认值进行初始化。

当应用退出时,应调用 terminate()

参数
clientSupport boolean:指示库是否应启用对设备上运行的应用的监控和互动。

init

public static void init (boolean clientSupport, 
                boolean useLibusb, 
                 env)

init(boolean) 类似,但能够启用 libusb 并传递一组自定义的环境变量。

参数
clientSupport boolean

useLibusb boolean

env

initIfNeeded

public static void initIfNeeded (boolean clientSupport)

仅在需要时初始化库;已弃用非测试用法。

参数
clientSupport boolean:指示库是否应启用对设备上运行的应用的监控和互动。

另见:

isConnected

public boolean isConnected ()

返回 AndroidDebugBridge 对象是否仍连接到 adb 精灵。

返回
boolean

isUserManagedAdbMode

public static boolean isUserManagedAdbMode ()

返回
boolean 如果以用户管理的 ADB 模式运行,ddmlib 将不会也不应管理 ADB 服务器。

openConnection

public static SocketChannel openConnection ()

尝试连接到本地 Android 调试桥服务器。

返回
SocketChannel 如果成功,则为已连接的套接字

抛出
如果打开连接时发生错误

removeClientChangeListener

public static void removeClientChangeListener (AndroidDebugBridge.IClientChangeListener listener)

从监听器集合中移除监听器,当 ClientImpl 属性发生更改时,系统会通知该集合中的监听器。

参数
listener AndroidDebugBridge.IClientChangeListener:不再需要接收通知的监听器。

removeDebugBridgeChangeListener

public static void removeDebugBridgeChangeListener (AndroidDebugBridge.IDebugBridgeChangeListener listener)

从监听器集合中移除监听器,当新的 AndroidDebugBridge 启动时,系统将不会通知该监听器。

参数
listener AndroidDebugBridge.IDebugBridgeChangeListener:不再需要接收通知的监听器。

removeDeviceChangeListener

public static void removeDeviceChangeListener (AndroidDebugBridge.IDeviceChangeListener listener)

从监听器集合中移除监听器,当 IDevice 连接、断开连接或其属性或 ClientImpl 列表发生更改时,系统会通知该集合中的监听器。

参数
listener AndroidDebugBridge.IDeviceChangeListener:不再需要接收通知的监听器。

重启

public boolean restart (long timeout, 
                TimeUnit unit)

重新启动 adb,但不重新启动其周围的服务。

参数
timeout long

unit TimeUnit

返回
boolean 如果成功,则为 true。

重启

public boolean restart ()

此方法已弃用。
如果 ADB 不响应,此方法可能会挂起。请改用 restart(long, TimeUnit)

重新启动 adb,但不重新启动其周围的服务。

返回
boolean 如果成功,则为 true。

startAdb

public boolean startAdb (long timeout, 
                TimeUnit unit)

启动 adb 主机端服务器。使用用户管理的 ADB 服务器时,不应使用此方法,因为服务器生命周期应由用户管理,而不是由 ddmlib 管理。

参数
timeout long

unit TimeUnit

返回
boolean 如果成功,则为 true

终止

public static void terminate ()

终止 DDM 库。必须在应用终止时调用此方法。