因此,在检查“事件日志”面板/选项卡时,我尝试改进独立的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
版本6.0 API 23(在我的情况下为Samsung SM-A500F)。手动拉动时,它不是空的,但仍然有adb拒绝错误“已关闭”。
到目前为止我做了什么:
-将命令从byte[] request = formAdbRequest("log:" + logName);
更改为:byte[] request = formAdbRequest("input:event0");
->仍然收到“已关闭”错误
-将命令更改为:byte[] request = formAdbRequest("shell:logcat -v threadtime -b " + logName);
->“ Closed”错误消失了,但是结果数据无法解析,格式不同
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
来读取系统事件日志了,但是我仍然找不到用于此目的的文档。
任何评论都受到高度评价。
预先感谢。