Итак, я попытался улучшить автономную 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
- когда я извлекаю файл, кажется, что в журнале событий мне нужно
В API fw 6.0 23:
- у него нет пути к файлу /dev/log/events
, вместо этого он перемещен в /dev/input/event0
или dev/input/event1
- когда я извлекаю файл, он имеет размер 0Это означает, что это пустой файл
На некоторых устройствах /dev/log/events
есть даже fw 6.0 API 23 (в моем случае Samsung SM-A500F).При ручном извлечении он не пустой, но все равно имеет ошибку отклонения adb "закрыто".
Что я сделал до сих пор:
- измените команду с byte[] request = formAdbRequest("log:" + logName);
на: byte[] request = formAdbRequest("input:event0");
-> stillполучить ошибку «Closed»
- изменить команду на: 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();
}
}
}
IБоюсь, что журнал системных событий больше не может быть прочитан через log:events
, но я все еще не смог найти документы для этого.
Любые комментарии высоко ценятся.
Заранее спасибо.