以编程方式在其他应用程序的应用程序中显示logcat

时间:2017-11-28 08:33:48

标签: android logcat

我需要在我的应用程序和其他应用程序中读取和过滤logcat日志。如果Read logcat programmatically within application,我发现了其他问题和最有用的问题。

所以我尝试编写我的代码,但结果总是一样的,即返回在应用程序启动之前所做的logcat日志。

public void getLog() {
    edLog.setText("");
    Log.e("imgspa", "ciao");
    try {
        //Process logcat = Runtime.getRuntime().exec(new String[]{"logcat", "-d", "*:I"});
        //Process logcat = Runtime.getRuntime().exec(new String[]{"logcat", "-d", "B4A:I"});
        //Process logcat = Runtime.getRuntime().exec(new String[]{"logcat", "-d", "-v", "time", "-e", "*VFY*"});
        //Process logcat = Runtime.getRuntime().exec(new String[]{"logcat", "-d", "-v", "time", "*:I"});
        //Process logcat = Runtime.getRuntime().exec(new String[]{"logcat", "-d"});
        Process logcat = Runtime.getRuntime().exec(new String[]{"logcat", "-d", "-v", "threadtime", "*:*"});
        BufferedReader br = new BufferedReader(new InputStreamReader(logcat.getInputStream()));
        String line;

        final StringBuilder sb = new StringBuilder();
        String separator = System.getProperty("line.separator");
        sb.append("inizio");
        sb.append(separator);
        while ((line = br.readLine()) != null) {
            sb.append(line);
            sb.append(separator);
        }
        sb.append("fine");
        edLog.setText(sb.toString());
    } catch (IOException e) {
        e.printStackTrace();
    }
}

正如您所看到的,我尝试了不同的解决方案,但没有人可以帮助我。 我需要获取logcat,其中应用程序名称为“B4A”。

我要指出: - 我有一个root设备 - 我已经添加了READ_LOGS权限

3 个答案:

答案 0 :(得分:1)

自Android 4.1起,它无法读取其他应用程序的日志。 查看explanation

对于有根设备,您需要手动获取READ_LOGS权限

String pname = getPackageName();
String[] CMDLINE = { "su", "-c", null };
if(getPackageManager().checkPermission(android.Manifest.permission.READ_LOGS, pname) != 0) {

    try {

        CMDLINE[2] = String.format("pm grant %s android.permission.READ_LOGS", pname);
        java.lang.Process p = Runtime.getRuntime().exec(CMDLINE);
        int res = p.waitFor();
        Log.d(TAG, "exec returned: " + res);
        if (res != 0)
            throw new Exception("failed to become root");
    } catch (Exception e) {
        Log.d(TAG, "exec(): " + e);

    }

}

或者只是尝试使用.exec("su -c logcat -d")

答案 1 :(得分:1)

从JellyBean开始,您无法访问您的应用程序未添加的logcat日志。  link

答案 2 :(得分:0)

更改是第三方应用程序无法再获取读取日志权限,但是每个应用程序都可以读取仅包含已写入行的日志,而无需任何权限。

除非你扎根,否则你不能这样做,因为果冻豆。请参阅此Android bug report以及此相关讨论。引用:

img.simone如需更多查询,请阅读this

希望它能帮到你!!