android - DDMS 事件日志:runLogService 得到“com.android.ddmlib.AdbCommandRejectedException:已关闭”
问题描述
因此,在检查事件日志面板/选项卡时,我尝试改进独立的 DDMS。我收到了这个错误:
11:09:45 E/EventLog: closed
com.android.ddmlib.AdbCommandRejectedException: closed
at com.android.ddmlib.AdbHelper.runLogService(AdbHelper.java:579)
at com.android.ddmlib.AdbHelper.runEventLogService(AdbHelper.java:548)
at com.android.ddmlib.Device.runEventLogService(Device.java:584)
at com.android.ddmuilib.log.event.EventLogPanel$8.run(EventLogPanel.java:461)
到目前为止,我尝试使用模拟器 fw 2.3.3(API 10)并且它可以工作,但不适用于 fw 6.0(API 23)。
到目前为止,我发现:
在 fw 2.3.3 API 10 上:
- 它有文件路径/dev/log/events
- 当我拉出文件时,似乎记录了我需要的事件
在 fw 6.0 API 23 上:
- 它没有文件路径/dev/log/events
,而是移动到/dev/input/event0
或dev/input/event1
- 当我拉文件时,它的大小为 0,意味着它是一个空文件
有些设备/dev/log/events
甚至具有 fw 6.0 API 23(在我的情况下是三星 SM-A500F)。手动拉取时,它不是空的,但仍然有 adb 拒绝错误“关闭”。
到目前为止我所做的:
- 将命令从更改byte[] request = formAdbRequest("log:" + logName);
为:byte[] request = formAdbRequest("input:event0");
-> 仍然得到“关闭”错误
- 将命令更改为:byte[] request = formAdbRequest("shell:logcat -v threadtime -b " + logName);
-> “关闭”错误消失了,但结果数据无法解析,它有不同的格式
public static void runLogService(InetSocketAddress adbSockAddr, Device device, String logName,
LogReceiver rcvr) throws TimeoutException, AdbCommandRejectedException, IOException {
SocketChannel adbChan = null;
try {
adbChan = SocketChannel.open(adbSockAddr);
adbChan.configureBlocking(false);
// if the device is not -1, then we first tell adb we're looking to talk
// to a specific device
setDevice(adbChan, device);
byte[] request = formAdbRequest("log:" + logName);
write(adbChan, request);
AdbResponse resp = readAdbResponse(adbChan, false /* readDiagString */);
if (!resp.okay) {
throw new AdbCommandRejectedException(resp.message);
}
byte[] data = new byte[16384];
ByteBuffer buf = ByteBuffer.wrap(data);
while (true) {
int count;
if (rcvr != null && rcvr.isCancelled()) {
break;
}
count = adbChan.read(buf);
if (count < 0) {
break;
} else if (count == 0) {
try {
Thread.sleep(WAIT_TIME * 5);
} catch (InterruptedException ie) {
}
} else {
if (rcvr != null) {
rcvr.parseNewData(buf.array(), buf.arrayOffset(), buf.position());
}
buf.rewind();
}
}
} finally {
if (adbChan != null) {
adbChan.close();
}
}
}
恐怕系统事件日志不再可以阅读了log:events
,但我仍然找不到这方面的文件。
任何意见都受到高度赞赏。
提前致谢。