我有一个连接到 pc 的 android 设备并打开了多个显示 logcat 信息的 shell。每个人都使用其特定的过滤器运行。所以我现在的问题是,这些过滤器应用在哪里?已经在手机上,因此只有过滤后的消息通过 USB 发送。还是它们应用在 adb 服务器或客户端的 pc 上?我只是想防止多个未经过滤的 logcat 流在 USB 上同时运行,因为我的带宽有限。谢谢
5 回答
还是它们应用在 adb 服务器或客户端的 pc 上?
它们适用于呈现 LogCat 信息的任何应用程序。
目前不可能在不同的设备上运行相同的构建。如果您有不同的构建,那么您可以根据设备名称或版本应用过滤器。
当你想这样做时,它可以通过一些技巧来实现。
Log.v(LOG_TAG,"message");
在您的 LOG_TAG 附加设备 ID 中,可以通过 TelephonyManager 识别。
并使用它添加过滤器。
Android 将设备上的日志信息存储到 4 个不同的缓冲区中(事件日志、系统日志、无线电日志、主日志)。之后,adbd
守护进程可以访问此信息并将其发送给客户端。因此,只有在客户端您才能过滤信息,因为所有信息都存储在手机上。
logcat
使用设备上的命令将数据从内核缓冲区中提取出来。如果你跑
% adb logcat -\?
您可以看到使用信息,其中包括“filterspecs”的描述。这些可以在命令行上设置,或者通过设置ANDROID_LOG_TAGS
. 例如:
% adb logcat '*:W'
只会向您显示警告或错误级别的消息。
这里的诀窍是它adb logcat
只是 的简写,还有将环境变量adb shell logcat
传播到设备的额外好处。ANDROID_LOG_TAGS
过滤是由logcat
命令完成的,它只是将文本输出转储到 adb 上。该logcat
命令的输出没有得到任何特殊处理。
因此,您的问题的答案是:过滤发生在设备上,针对每个窗口单独进行。
DDMS 的工作方式不同。
过滤器应用在手机上。因此,您中的一些人为不存在的 logcat 标记输入过滤器,然后没有流量通过 USB。但是使用 cmd shell 打开的每个 logcat 都会创建一个新的流,从而增加总流量。