我正在开发一个Android应用程序,它从一些自定义硬件流式传输串行数据。我正在使用mik3y的usb-serial-for-android库在OTG模式下通过USB获取串行数据,经过一些调整后工作正常。
但是,对于USB接口上的每个事务,UsbRequestJNI
都会记录init
和close
消息。这会使LogCat每秒淹没数千条日志消息(请注意时间戳):
02-17 09:30:21.590 2332-2349/com.dummydomain.app D/UsbRequestJNI﹕ close
02-17 09:30:21.590 2332-2349/com.dummydomain.app D/UsbRequestJNI﹕ init
02-17 09:30:21.594 2332-2349/com.dummydomain.app D/UsbRequestJNI﹕ close
02-17 09:30:21.594 2332-2349/com.dummydomain.app D/UsbRequestJNI﹕ init
02-17 09:30:21.598 2332-2349/com.dummydomain.app D/UsbRequestJNI﹕ close
02-17 09:30:21.598 2332-2349/com.dummydomain.app D/UsbRequestJNI﹕ init
02-17 09:30:21.602 2332-2349/com.dummydomain.app D/UsbRequestJNI﹕ close
02-17 09:30:21.602 2332-2349/com.dummydomain.app D/UsbRequestJNI﹕ init
02-17 09:30:21.606 2332-2349/com.dummydomain.app D/UsbRequestJNI﹕ close
02-17 09:30:21.606 2332-2349/com.dummydomain.app D/UsbRequestJNI﹕ init
02-17 09:30:21.610 2332-2349/com.dummydomain.app D/UsbRequestJNI﹕ close
02-17 09:30:21.610 2332-2349/com.dummydomain.app D/UsbRequestJNI﹕ init
02-17 09:30:21.614 2332-2349/com.dummydomain.app D/UsbRequestJNI﹕ close
02-17 09:30:21.614 2332-2349/com.dummydomain.app D/UsbRequestJNI﹕ init
我知道我可以在IDE中过滤掉这些内容,但我想阻止它们,以免它们咀嚼调试器带宽。
根据我的收集,UsbRequestJNI
是一个操作系统提供的JNI库,所以我不能只编辑源代码。那么我如何告诉它在仍然运行调试版本时停止记录这些调试消息,以便我可以看到其他相关的调试信息?
谷歌搜索只产生this,这基本上是相同的问题,但没有适用于这里的决议。
(我的开发设备运行Android 4.3,我正在Android Studio 1.0.1上开发)
更新:只是found the source为UsbRequest,相关的行是ALOGD的声明(第45和71行)。所以我想问题就变成了:我如何抑制ALOGD消息?
更新2:我按照setprop log.tag.UsbRequestJNI SUPPRESS
尝试了this answer,但令人沮丧的是它对我的设备没有影响。
对于后人来说,这些消息似乎来自UsbRequest initialize()和close()方法,因此通过重用UsbRequest对象而不是创建新对象主要解决了这个问题,并且可能还略微提高了性能。
用mik3y的usb-serial-for-android软件包打我自己。我能够通过禁用异步读取来解决它。改变这一行:
mEnableAsyncReads = (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1);
阅读:
mEnableAsyncReads = false;
此时有一些针对mik3y代码的打开请求,也许这些已经在一个分支中修复了?见https://github.com/mik3y/usb-serial-for-android/network