在 Android 或 Android NDK 中有什么方法可以知道哪个应用程序正在磁盘或设备内存上读取或写入数据?
3 回答
您可以在输出中查找您的文件
ls -l /proc/*/fd/
为此,您不需要特殊工具或 root。
说明:
每个正在运行的进程都会获得一个/proc/
以其 pid 命名的条目。对于每个 pid,它是一个fd
带有符号链接的目录,其中文件句柄的名称指向文件名。
例如,一个条目可能...
lr-x------ app_25 app_25 2012-09-06 12:16 20 -> /system/etc/fallback_fonts.xml
不幸的是,我们没有看到 PID,但我们可以看到进程所有者app_25
。
因此我们可以查看/data/data/
(with ls -l /data/data
)
...
drwxr-x--x app_9 app_9 2012-02-23 08:31 com.android.launcher
drwxr-x--x app_25 app_25 2012-02-23 08:30 com.android.mms
drwxr-x--x app_5 app_5 2012-02-23 08:29 com.android.music
...
所以它是应用程序com.android.mms
我不知道是否有 SDK 方法可以做到这一点,但 Linux 将允许您列出进程/打开文件/套接字,您可以尝试从那里抓取东西。
首先使用ps命令获取进程的PID,输入:
$ ps -aef | grep {process-name}
$ ps -aef | grep httpd
接下来将此 PID 传递给 pfiles 命令,
$ pfiles {PID}
$ pfile 3533
这是您列出 Firefox 使用的所有打开文件的方式...
lsof -p `ps -C firefox -o pid=`
您可以使用 System.exec() 来执行这些,但您还需要具有 root 访问权限。无论如何,我想这是你必须查看那种信息的东西......
编辑:
这就是我从 Py2Cmod 得到的
初始化文件
/* Generated by py2cmod
*
* py2cmod (c) 2001 Mark Rowe
*/
#include "Python.h"
static PyObject *ErrorObject;
/* ----------------------------------------------------- */
/* List of methods defined in the module */
static struct PyMethodDef iotop/__init___methods[] = {
{NULL, (PyCFunction)NULL, 0, NULL} /* sentinel */
};
/* Initialization function for the module (*must* be called initiotop/__init__) */
static char iotop/__init___module_documentation[] = "";
void initiotop/__init__()
{
PyObject *m, *d;
/* Create the module and add the functions */
m = Py_InitModule4("iotop/__init__", iotop/__init___methods,
iotop/__init___module_documentation,
(PyObject*)NULL,PYTHON_API_VERSION);
/* Add some symbolic constants to the module */
d = PyModule_GetDict(m);
ErrorObject = PyString_FromString("iotop/__init__.error");
PyDict_SetItemString(d, "error", ErrorObject);
/* XXXX Add constants here */
PyDict_SetItemString(d, "__file__", PyString_FromString("iotop/__init__.py"));
PyDict_SetItemString(d, "__name__", PyString_FromString("iotop/__init__"));
/* Check for errors */
if (PyErr_Occurred())
Py_FatalError("can't initialize module iotop/__init__");
}
不清楚您所说的“在磁盘或设备内存上读取或写入数据”是什么意思,但我希望dumpsys工具可以提供帮助。