有没有在Android或Android NDK中知道哪个应用程序正在读取或写入磁盘或设备内存的方法?
您不需要任何特殊工具或root权限。 解释: 每个正在运行的进程都会在ls -l /proc/*/fd/
/proc/
中得到一个以其pid命名的条目。对于每个pid,都有一个名为fd
的目录,其中包含指向文件名的文件句柄名称的符号链接。不幸的是,我们看不到PID,但我们可以看到进程所有者lr-x------ app_25 app_25 2012-09-06 12:16 20 -> /system/etc/fallback_fonts.xml
app_25
。/data/data/
(使用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
不清楚你所指的“从磁盘或设备内存读取或写入数据”的意思,但我希望dumpsys 工具可以提供帮助。
我不知道是否有一种 SDK 的方法来做到这一点,但 Linux 可以让你列出进程/打开的文件/套接字,你可以尝试从那里获取信息。
首先使用 ps 命令获取进程的 PID,输入:
$ ps -aef | grep {process-name}
$ ps -aef | grep httpd
$ pfiles {PID}
$ pfile 3533
以下是如何列出 Firefox 使用的所有打开文件...
lsof -p `ps -C firefox -o pid=`
你可以使用System.exec()来执行这些操作,但是你需要拥有root权限。不过,我想查看那种信息本来就需要这样的权限...
编辑:
这是我从Py2Cmod得到的内容。
init.c
/* 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__");
}