Android Adb USB Socket 通信
Android ADB 工作方式
它是一种客户端-服务器程序,包括以下三个组件:
- 客户端:用于发送命令。客户端在开发计算机上运行。您可以通过发出 adb 命令来从命令行终端调用客户端。
- 守护进程 (adbd):在设备上运行命令。守护进程在每个设备上作为后台进程运行。
- 服务器:管理客户端和守护进程之间的通信。服务器在开发机器上作为后台进程运行。
工作过程
- 当您启动某个 adb 客户端时,客户端会先检查是否有 adb 服务器进程正在运行。如果没有,它将启动服务器进程。服务器在启动后会与本地 TCP 端口 5037 绑定,并监听 adb 客户端发出的命令 - 所有 adb 客户端均通过端口 5037 与 adb 服务器通信;
- Server不断的尝试连接Adbd;
- PC和Mobile建立了连接。
ADB 的原理
ADB USB Socket 实现过程
- Android开启一个Server,等待PC连接:
ServerSocket serverSocket = new ServerSocket(30000);
Socket socket = serverSocket.accept();
- PC端查找设备列表
adb devices
- PC端设置端口转发
adb -s device_id forward tcp:host_port tcp:server_port
- PC和Mobile进行Socket通信
Socket clientSocket = new Socket("localhost", 35000);
DataInputStream dataInputStream = new DataInputStream(clientSocket.getInputStream());
DataOutputStream dataOutputStream = new DataOutputStream(clientSocket.getOutputStream());
代码实现
- 需要指明adb路径作为ADBExecutor的参数
ADBExecutor adb_executor = new ADBExecutor("D:\\\\Android_SDK\\\\platform-tools\\\\adb.exe");//这是我的abd.exe的位置
- 手机打开adb调试模式(开发者模式->USB调试选项)