将 logcat 输出保存为字符串值
Saving logcat output to a String value
我需要在字符串变量出现 ANR 错误时保存 logcat 输出,并将其显示在我的应用程序内的文本视图中。
我试图通过在按下按钮时调用此函数来做到这一点
Process process = Runtime.getRuntime().exec("logcat -d | grep \"ANR\" -A 38");
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
StringBuilder log = new StringBuilder();
String line = "";
while ((line = bufferedReader.readLine()) != null) {
log.append(line);
}
mTxtAnrinfo.setText(log.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
不过好像不行。更糟糕的是调试没有提供有用的信息。
我还设置了所需的清单文件权限
<uses-permission android:name="android.permission.READ_LOGS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
我错过了什么?只是执行命令
logcat-d | grep "ANR" -A 38
在 shell 中提供所需的 logcat 数据,但是当我从应用程序中 运行 它时,我什么也得不到。 while 循环中的行为空。
谢谢!
更新:
该应用程序安装为系统应用程序,要读取的日志来自其他遇到ANR错误的应用程序。
我找到了可行的解决方案。
从 Android 4.1+ 开始,应用无法再从其他应用访问日志。
shell 用户能够从其他应用程序获取日志,所以像
这样简单的事情
String[] cmd = {
"/system/bin/sh",
"-c",
"logcat -d | grep \"ActivityManager: ANR\" -A 38"
};
Process process = Runtime.getRuntime().exec(cmd);
可以给我们其他应用程序的日志。
即使应用程序本身无法从其他应用程序访问所需的日志,这样做也会以具有所需权限的 shell 用户身份触发命令。
保存为字符串,根据需要解析即可。
干杯!
我需要在字符串变量出现 ANR 错误时保存 logcat 输出,并将其显示在我的应用程序内的文本视图中。 我试图通过在按下按钮时调用此函数来做到这一点
Process process = Runtime.getRuntime().exec("logcat -d | grep \"ANR\" -A 38");
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
StringBuilder log = new StringBuilder();
String line = "";
while ((line = bufferedReader.readLine()) != null) {
log.append(line);
}
mTxtAnrinfo.setText(log.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
不过好像不行。更糟糕的是调试没有提供有用的信息。 我还设置了所需的清单文件权限
<uses-permission android:name="android.permission.READ_LOGS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
我错过了什么?只是执行命令 logcat-d | grep "ANR" -A 38 在 shell 中提供所需的 logcat 数据,但是当我从应用程序中 运行 它时,我什么也得不到。 while 循环中的行为空。
谢谢!
更新: 该应用程序安装为系统应用程序,要读取的日志来自其他遇到ANR错误的应用程序。
我找到了可行的解决方案。
从 Android 4.1+ 开始,应用无法再从其他应用访问日志。
shell 用户能够从其他应用程序获取日志,所以像
这样简单的事情String[] cmd = {
"/system/bin/sh",
"-c",
"logcat -d | grep \"ActivityManager: ANR\" -A 38"
};
Process process = Runtime.getRuntime().exec(cmd);
可以给我们其他应用程序的日志。 即使应用程序本身无法从其他应用程序访问所需的日志,这样做也会以具有所需权限的 shell 用户身份触发命令。 保存为字符串,根据需要解析即可。 干杯!