DDMS事件日志:runLogService获得“ com.android.ddmlib.AdbCommandRejectedException:已关闭”

时间:2019-01-30 04:56:40

标签: android adb ddms

因此,在检查“事件日志”面板/选项卡时,我尝试改进独立的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/event0dev/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来读取系统事件日志了,但是我仍然找不到用于此目的的文档。

任何评论都受到高度评价。
预先感谢。

0 个答案:

没有答案