所以,我试图使用bufferReader从Android设备读取logcat。由于“logcat -c”并不总是能够清除日志,我想启动阅读器,然后删除当前输出并开始只读取新行。我怎样才能做到这一点?
每次启动过程时都会捕获整个logcat输出,我只想在启动阅读器时生成当前行。
所以当我这样做时:
ProcessBuilder pb = new ProcessBuilder("adb", "logcat", "-v", "threadtime", "-b", "all");
pb.redirectErrorStream(true);
Process p = pb.start();
BufferedReader reader =
new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
while ( (line = reader.readLine()) != null) {
result += line + "\n";
}
捕获整个日志,因为adb logcat将为您提供整个日志,所有以前的行都在缓冲区中,并且没有清除队列的选项。我试图使用标记和重置,但这似乎不起作用。结果字符串始终具有logcat之前的行,这些行是在我启动阅读器之前发生的。
任何人都知道如何写这个,所以只读新行,先前删除了吗?
编辑:当我尝试使用mark和reset时,输出字符串仍然包含一小时前的logcat行,它需要从现在开始。我的理解是标记和集合用于返回缓冲区,我不想这样做。我想只读取来自logcat的新行,而不是前面的行。 ProcessBuilder pb = new ProcessBuilder("adb", "logcat", "-v", "threadtime", "-b", "all");
pb.redirectErrorStream(true);
Process p = pb.start();
BufferedReader reader =
new BufferedReader(new InputStreamReader(p.getInputStream()));
reader.mark(0);
reader.reset();
String line = null;
while ( (line = reader.readLine()) != null) {
result += line + "\n";
}
编辑#2:我确实提出了一个“临时”解决方案,通过使用logcats -T选项仅从特定时间戳中获取日志。但是这个解决方案需要我的PC和我的Android设备时间同步。如果有一个没有这个时间同步要求的更好的解决方案,那就太好了。
所以如果有人有,那就太好了。这是我的临时解决方案:
DateFormat dateFormat = new SimpleDateFormat("MM-dd HH:mm:ss.mmm");
Date date = new Date();
String dateString = dateFormat.format(date);
ProcessBuilder pb = new ProcessBuilder(
"adb", "-s", deviceID, "logcat", "-v", "threadtime", "-b", "all", "-T", dateString);
pb.redirectErrorStream(true);
p = pb.start();
BufferedReader reader =
new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
while ( (line = reader.readLine()) != null) {
result += line + "\n";
}