虽然我找到了很多这个主题,但是,它们来自旧固件。
对于调试进程地址空间,我尝试从我的应用程序中调用 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这些设备才能获得它们吗?