首页 > 解决方案 > 如何使用 adb 端口转发?

问题描述

我正在为 Android Studio 创建一个调试插件,这将启动一个服务器并监听一个端口。通过 USB 连接的设备(运行 adb 守护程序的移动设备)。

我的应用程序会将一些文件、请求、日志简单地发送到端口。这是我的概念。

所以我想通过USB发送它。虽然进行了一些挖掘,但我发现ADB 端口转发/反向是这个问题的答案。但是我不明白使用 adb 进行端口转发的整个概念。

  1. 我想同时开始ServerSocket开发机器和移动设备吗?

  2. 如果是这样,我启动ServerSocket: on port 8080和设备ServerSocket: on 9090然后执行adb forward tcp:8080 tcp:9090将被转移到8080开发机器上?

  3. 他们如何转发或重定向到机器端口?

  4. 如何从java代码执行adb命令?

最终目标是我想与我的应用程序/库从电话到开发机器进行通信。

我是网络和这类事情的菜鸟。

提前致谢。

标签: javaandroidadbportforwardingintellij-plugin

解决方案


我建议您阅读并遵循教程中解释的步骤。当我为 PC 游戏编写 android 游戏控制器时,本教程对我很有帮助,其中 android 应用程序通过 USB 向 PC 发送输入(使用 adb)

  1. 我想在开发机器和移动设备上启动 ServerSocket 吗?

不,只有一侧必须打开 ServerSocket(对我来说,在 android 设备上打开 ServerSocket 并使用 PC 上的客户端套接字进行连接工作得很好

  1. 如果是这样,我在端口 8080 上启动 ServerSocket: 并在 9090 上启动设备 ServerSocket: 然后执行 adb forward tcp:8080 tcp:9090 将被转移到开发机器上的 8080吗?

不知道在开发机器上打开 ServerSocket 是否适合你,当我使用 adb 时它对我不起作用。确保您正在执行以下步骤

一个。在一侧打开 ServerSocket 并监听连接 (ServerSocker.accept()) 说端口号 38100

湾。从开发机器执行 adb 命令forward tcp:38300 tcp:38100

C。然后在客户端调用socket = new Socket("localhost", 38300);

d。传输数据

  1. 如何从java代码执行adb命令?

使用 java 运行时类

String adbPath = "C:\\android-sdk-windows\\tools\\adb.exe";
Runtime.getRuntime().exec(adbPath + " forward tcp:38300 tcp:38100");

请参阅从 java 执行外部程序


推荐阅读