5

我正在尝试获取 dumpsys 统计信息 [如 dumpsys cpuinfo、dumpsys 电池]。我在java中执行这些并将其写入文件。但我得到,

2012.06.20 07:32:19
Permission Denial: can't dump cpuinfo from from pid=862, uid=10040 without permission android.permission.DUMP
for all dumpsys commands.

我已经在 android.manifest"android.permission.DUMP"中添加了权限。"android.permission.BATTERY_STATS"但是,没有得到结果请帮助作为它的关键。我使用的代码如下,其中 cmd 包含 dumpsys cpuinfo 或 dumpsys battery [任何人]

Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
System.setOut(new PrintStream(new FileOutputStream("/sdcard/Monitor/"+file+".txt",false)));
System.out.println("\n\n"+sdf.format(cal.getTime()));           
Log.w("cmd-fn", cmd);
process=Runtime.getRuntime().exec(cmd);
process.waitFor();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String buffer="";

while((buffer=bufferedReader.readLine())!=null)
      {
    //fileobj.write(buffer);
    System.out.println(buffer);
    //output.write(buffer);
}
    buffer="";
    BufferedReader buffered = new BufferedReader(new InputStreamReader(process.getErrorStream()));
    while((buffer=buffered.readLine())!=null)
        {
        Log.w("exception",buffer);
        }

以下是我的清单条目

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.DUMP" />
<uses-permission android:name="android.permission.BATTERY_STATS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
4

4 回答 4

11

DUMP 权限被定义为 android:protectionLevel="signatureOrSystem"除非您的应用使用平台密钥签名或安装在系统分区中,否则您无法获得它。

于 2012-06-20T08:39:50.320 回答
2

android 开发团队决定停止向第三方应用授予这些权限。现在只有系统应用程序可以获取它们。

更多详情:https ://code.google.com/p/acra/issues/detail?id=100

于 2015-01-27T12:24:32.483 回答
-1

您可以通过检查 /proc/meminfo 文件来访问一些内存信息,/proc/ 下还有其他有趣的文件。希望这些文件在未来的版本中是可读的

获取 meminfo 的代码示例:

    public static String showMemInfo() {
    StringBuilder meminfo = new StringBuilder();
    try {
        ArrayList<String> commandLine = new ArrayList<String>();
        commandLine.add("cat");
        commandLine.add("/proc/meminfo");

        Process process = Runtime.getRuntime().exec(commandLine.toArray(new String[commandLine.size()]));
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));

        String line;
        while ((line = bufferedReader.readLine()) != null) {
            meminfo.append(line);
            meminfo.append("\n");
        }

    } catch (IOException e) {
        Log.e(LOG_TAG, "Could not read /proc/meminfo", e);
    }

    return meminfo.toString();
}

PS:我知道它不像 dumpsys 那样冗长;)

于 2012-06-26T00:56:02.903 回答
-1

您可以使用其他两种方法来获取 cpu 信息

  1. 使用 top 命令 int adb shell,获取大部分信息

    top -n 1
    
  2. 您还可以在 /proc/stat 和 /proc/pid/stat 中查找信息以获取 cpu 信息

    cat /proc/stat
    

    如果您想了解详细信息,请查看获取内存使用情况

于 2015-08-11T07:04:25.780 回答