停止adb shell输出的缓冲处理

4

我在adb v1.0.39中观察到了这种新的行为。命令如下:

adb shell getevent -l

输出如下图所示:

请注意最后一行不完整

请注意,最后一行不完整。这在许多不同的设备上都会发生。相同的命令在 adb v1.0.32 中可以正常工作而不需要缓冲。

我如何停止 adb shell 输出缓冲在 adb v1.0.39 中?

3个回答

7

使用adb exec-out命令代替adb shell命令,可以强制新的adb使用raw模式并避免标准输出缓冲。

要了解更多信息,请查看shell_service.cpp中的注释。


这个可以工作。你能否告诉我这是否与Android设备版本有关?我需要一种确定给定设备的方法,我应该使用adb shell还是adb exec-out。@alex-p - Anshuman Chatterjee
只需使用 adb exec-out。对于不支持 adb shell V2 的设备,adb 客户端将自动协商使用旧的 adb shell 协议。 - Alex P.

0

我在使用adb 1.0.41时没有看到这种行为。

只有在使用tr删除"\r"时才会出现。在这种情况下,我使用以下命令:

adb command ... | stdbuf -o0 tr -d $'\r'

0
Alex P. 给出了一个非常好的答案。除此之外,实际上使用 exec-outshell 都是设备特定的。例如,我的 Galaxy Note 4 通过 shell 完美地流式传输事件数据(即:adb.exe shell getevent /dev/input/event2),但是在使用 exec-out(命令:adb exec-out getevent /dev/input/event2)时会缓冲它并以大块方式发布。另一方面,Memu 模拟器的表现则完全相反。测试于 adb 版本 1.0.41(版本 30.0.5-6877874)。
(以答案形式发布此内容而不是评论,因为声望不足)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接