5

dumpsys統計を取得しようとしています[dumpsyscpuinfo、dumpsysbatteryなど]。これらを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.permission.DUMP""android.permission.BATTERY_STATS"android.manifestに追加しました。しかし、結果を取得しないことは重要です。私が使用するコードは次のとおりです。ここで、cmdにはdumpsyscpuinfoまたはdumpsysbatteryが含まれています[誰でも]

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 に答える
-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 情報を取得するために使用できる他の 2 つの方法があります。

  1. top コマンド int adb shell を使用して、ほとんどの情報を取得します

    top -n 1
    
  2. /proc/stat および /proc/pid/stat の情報を cat して、CPU 情報を取得することもできます。

    cat /proc/stat
    

    詳細が必要な場合は、Get Memeory Usageを確認してください

于 2015-08-11T07:04:25.780 に答える