Android:通过应用程序读取adb logcat日志
我正在尝试编写一个应用程序,读取adb logcat创建的日志。根据和上的代码,我有以下代码:Android:通过应用程序读取adb logcat日志,android,logging,android-logcat,Android,Logging,Android Logcat,我正在尝试编写一个应用程序,读取adb logcat创建的日志。根据和上的代码,我有以下代码: try { Process process = Runtime.getRuntime().exec("logcat"); System.out.println("Process : " + process); // shows process id BufferedReader bufferedReader = new BufferedReader(
try {
Process process = Runtime.getRuntime().exec("logcat");
System.out.println("Process : " + process); // shows process id
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
System.out.println("Buffered reader : " + bufferedReader.readLine());
StringBuilder log = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
log.append(line);
}
TextView tv = (TextView) findViewById(R.id.textView1);
tv.setText(log.toString());
} catch (IOException e) {
}
为了测试缓冲读取器正在读取的内容,我放置了一个println,但得到一条消息“cannotbindtcp:5038”。上述代码不读取任何日志。我还尝试使用“logcat*:V”,但我甚至没有得到最低优先级的日志
我给了我的应用程序权限:android.permission.READ_LOGS
我正在Android模拟器上测试我的代码
有人能指出我做错了什么吗
谢谢你的帮助
编辑:
我试了一下“logcat-d”,得到了一行日志。在代码中,可以看到提供了try/catch块当我从应用程序中删除权限读取日志时,不会引发异常,bufferReader只会打印null(通常当应用程序找不到所需权限时,会引发异常)这种行为的原因是什么?
EDIT2:
我尝试了Log.d(TAG,Log.toString())并得到了多行文本。有人能解释一下上一次编辑的最后一个问题吗:当我删除所需权限时,为什么应用程序没有引发异常?您可能会收到消息“
无法绑定tcp:5038
”,因为没有
<uses-permission android:name="android.permission.INTERNET" />
在清单中,您永远无法获得通过Runtime.getRuntime()读取日志的权限 android开发团队决定停止向第三方应用授予这些权限。现在只有系统应用程序才能获取它们
更多详细信息:它应该是“logcat-d”afaik。但是您可能会得到一个ANR,因为它不会停止读取日志。您需要在后台线程、异步任务或类似的东西中移动读取。编辑:忘记这一点,没有ANR。@zapl我已经编辑了这个问题。您的TextView可以显示多行(
android:singleLine
)吗?您还可以尝试执行Log.d(“TAG”,Log.toString())在执行tv.setText(log.toString())之后执行code>代码>以验证是否没有显示错误。还是有例外?如果是这样,请将其添加到您的问题中。@zapl当我使用Log.d(“TAG”,Log.toString())显示时,确实会得到多行内容;您能解释一下第二部分吗:当我从应用程序中删除权限时,为什么它不引发异常并将log作为null返回给缓冲区读取器?如果命令无法执行,它似乎不会引发异常。对于BufferedReader