0

虽然我找到了很多这个主题,但是,它们来自旧固件。

对于调试进程地址空间,我尝试从我的应用程序中调用 dumpsys,因为它比我从 adb 中调用它更准确。我用 2 种方法测试:来自 c++ 和 java

    int ret = system("shell dumpsys meminfo com.sample.android.Dumpsys -d");
    __android_log_print(ANDROID_LOG_INFO, "sample", "call dumpsys : return = %d", ret);

选择

FILE *handle = popen("dumpsys meminfo com.sample.android.Dumpsys -d", "r");
   if (handle == NULL) {
       __android_log_print(ANDROID_LOG_INFO, "sample", "Cannot call the shell dumpsys");
       pclose(handle);
   }

   char buffer[128];
   size_t readn;
   // Please note this is sample code, it should be while loop to get all text from handle
   // It run well with logcat -d
   readn = fread(buffer, 1, 128, handle) ;
   __android_log_print(ANDROID_LOG_INFO, "sample", "readn = %d", readn);
   {
       buffer[readn-1] = '\0';
       __android_log_print(ANDROID_LOG_INFO, "sample", "%s",buffer);
   }
   pclose(handle);

爪哇

        String[] command = new String[] {"dumpsys", "meminfo", "com.sample.android.Dumpsys", "-d" }; // logcat -d return the log

    Process process = null;
    try {
        process = Runtime.getRuntime().exec(command);
        InputStream inputStream = process.getInputStream();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        String line;
        while ((line = bufferedReader.readLine()) != null) {
            android.util.Log.i("sample", line);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

但是所有这些方法都无法记录任何内容。我检查了stackoverflow上的所有问题和答案,似乎他们提到了root和旧固件。

更新 1:
使用 LDPLayer 进行测试 - 一个具有 FW 7.0、root 的模拟器,这是我在 AndroidManifest 上添加的什至此权限的日志:

11-18 16:45:29.513 2474 2474 I SEAL:权限被拒绝:无法从 pid=2517、uid=10045 转储 meminfo 未经许可 android.permission.DUMP

您知道如何从新固件中使用它吗?我需要root这些设备才能获得它们吗?

4

0 回答 0