【发布时间】:2014-04-18 12:19:29
【问题描述】:
是否可以将数据从 android Activity 发送到 adb ?我想通过 ADB 启动一个活动并传递一些数据,执行一个操作,然后读取结果。 最好的方法是什么?
例如: adb.exe shell am start -n com.example/com.example.Adder --ei operand1 10 --ei operand2 20 这将增加 10 + 20 .. 并存储总数 30。我如何获取该值?
我的研究中的这些建议不是一个选项: 1. 写入文件然后使用 pull 从 adb 读取它 [手机我没有 SD 卡,并且 android 4.3 存在一个错误,这意味着 run-as 命令不起作用] 2. 打开一个socket并通过它发送数据[我不想依赖网络]
更新: 所以我已经能够按照克里斯的建议通过 adb forward 做一些事情。 我首先启动 adb forward: adb forward tcp:10000 tcp:10000;
然后在我的 android 应用程序上.. 我创建一个服务器套接字并阻止 serverSocket.accept(); 然后客户端连接..然后您可以像使用 TCP/IP 套接字一样来回发送数据。
我现在只有一个问题,亚行没有记录;一旦设置了转发,客户端似乎连接到服务器套接字,即使它尚未在 android 端设置。 为什么会这样,是否有可能检测到 serverSocket 尚未设置。一旦我的 clientSocket 连接到这个“影子”套接字??
【问题讨论】:
-
可以通过 adb 转发而不是网络来使用套接字。使用 unix 域套接字甚至可以避免需要 Internet 权限。使用 adb 转发,手机必须是服务器,而 pc 必须是客户端,但这可以通过在通过 adb 发送启动意图后不久重复尝试连接来满足您的需求。对于一些琐碎的事情,您也可以将其记录下来并从 logcat 中 grep 答案。
-
您能否详细说明一下。从我的活动中,我可以做到:“ server = new ServerSocket(portNumber); Socket client = server.accept(); PrintWriter pr = new PrintWriter(client.getOutputStream(), true); pr .print(dataToWrite); 怎么会这被转发到adb?如果手机是服务器,那么accept()会在什么时候返回??
-
阅读亚行文档。
-
ADB 文档在转发方面确实没有多说。那里有两行。但是无论如何,我正在使用节俭..我的计算机上有一个服务器,因此打开一个套接字并进行监听,在我的手机上设置了网桥,活动连接到该套接字,并尝试写入数据。我收到此错误:libcore.io.ErrnoException:连接失败:ECONNREFUSED
标签: android android-activity tcp adb