Answers:
Android在安装时为每个应用程序分配一个UID(用户ID);与PID(进程ID)是瞬态的并且始终保持变化的情况不同,只要不重新安装应用程序,UID就会保持不变。除了当应用程序明确要求与另一个应用程序共享用户ID时,UID对于每个应用程序都应该是唯一的(对此存在安全限制,这两个应用程序必须使用相同的私钥签名,即来自同一开发人员)。
这些应用程序声称要显示应用程序的UID:
编辑:
尝试查看/data/system/packages.xml
(您需要root用户才能查看此文件),每个已安装的应用程序都应在其中有一个条目。说,我的手机中安装了Adobe Reader:
<package name="com.adobe.reader" codePath="/mnt/asec/com.adobe.reader-1/pkg.apk" flags="262144" ts="1300539048000" version="37149" userId="10034" installer="com.google.android.feedback">
<sigs count="1">
<cert index="21" key="... very long random string ..." />
</sigs>
<perms />
</package>
我的手机已分配userId="10034"
给Adobe Reader。
对于请求与另一个应用程序共享用户标识的应用程序,请说Handcent:
<package name="com.handcent.nextsms" codePath="/system/app/HandcentSMS.apk" flags="1" ts="1217592000000" version="373" sharedUserId="10064">
<sigs count="1">
<cert index="17" key="... very long random string ..." />
</sigs>
</package>
那么您要查找的属性是 sharedUserId="10064"
在PC上设置adb,将设备连接到PC,在PC上启动Shell并输入:
adb shell "dumpsys package | grep -A1 'userId=UID'"
替换UID
为您要查找的ID,例如10102。
例:
bash-4.2#adb shell“ dumpsys软件包| grep -A1'userId = 10102'” userId = 10102 pkg = Package {46171ce com.android.chrome } bash-4.2#
包含该行的内容Package{
将在空格和之间显示应用程序的软件包名称}
。您可以adb shell dumpsys package PKG_NAME
(PKG_NAME
→应用程序的软件包名称)来了解有关该软件包/应用程序的更多详细信息。
如果Android植根于adb shell或终端仿真器应用程序,则可以执行以下操作:
su cat /data/system/packages.list | grep UID
在输出中,UID之前的任何内容都是程序包名称。
例:
shell @ shamu:/ $ su root @ shamu:/#cat /data/system/packages.list | grep 10102 com.android.chrome 10102 0 /data/data/com.android.chrome默认3002,3003,3001 root @ shamu:/#
或者,如果您已经安装了Busybox或Toybox并且在PATH变量下可用,请从终端仿真器或adb shell中执行以下操作:
su 查找/ data / data / -type d -group UID -maxdepth 1 | xargs基本名称
例:
shell @ shamu:/ $ su root @ shamu:/#查找/ data / data / -group 10102 -type d -maxdepth 1 | xargs基本名称 com.android.chrome root @ shamu:/#
我在2014年发布的Android 6.0 Moto G 2nd Gen上也遇到了类似的问题。我碰巧已经升级了ES File Explorer应用程序,但我发现它像地狱一样肿,消耗了大量电池。我从系统中删除了该应用程序,但是该应用程序让僵尸进程占用了CPU。UID与您的10118类似,它在电池统计信息中被列为最耗电的资源过程。
然后,我安装了一个名为“ OS Monitor”的应用程序,并注意到.esfm文件实际上是唯一占用60%CPU的进程。我立即知道它与ES File Explorer有关,但是请稍候...我已经卸载了ES File Explorer。是。我唯一没有做的就是重新启动智能手机。相信我,我正在考虑一些疯狂的事情,例如扎根和摆脱垃圾,将手机扔在墙上,甚至开始相信我的电池寿命将尽。令我惊讶的是,我只是重新启动了电话,整个过程就消失了。
因此,在采取任何严厉措施之前,请尝试找出哪个应用程序给您带来了麻烦,请先将其卸载,然后重新启动手机。检查OS Monitor的CPU使用率列表,就可以了。
要在有根电话上通过UID(或GroupID)查找“一切” ,包括正在运行的进程,系统应用程序和硬件传感器,请执行以下操作:
# ID=3011; find / -group $ID -o -user $ID 2>/dev/null
# ID=3011; find / -group $ID -o -user $ID 2>/dev/null
/proc/208
/proc/208/task
/proc/208/task/208
/proc/208/task/208/attr
[...]
# ls -la /proc/208/exe
lrwxrwxrwx 1 root root 0 2017-04-04 22:14 /proc/208/exe -> /system/bin/sensors.qcom
# ID=10009; find / -group $ID -o -user $ID 2>/dev/null
/data/misc/profiles/cur/0/com.android.cellbroadcastreceiver
/data/misc/profiles/cur/0/com.android.cellbroadcastreceiver/primary.prof
/data/data/com.android.cellbroadcastreceiver
/data/data/com.android.cellbroadcastreceiver/cache
/data/data/com.android.cellbroadcastreceiver/code_cache
/data/user_de/0/com.android.cellbroadcastreceiver
/data/user_de/0/com.android.cellbroadcastreceiver/cache
/data/user_de/0/com.android.cellbroadcastreceiver/code_cache
/data/user_de/0/com.android.cellbroadcastreceiver/code_cache/com.android.opengl.shaders_cache
/data/user_de/0/com.android.cellbroadcastreceiver/shared_prefs
/data/user_de/0/com.android.cellbroadcastreceiver/shared_prefs/com.android.cellbroadcastreceiver_preferences.xml
/data/user_de/0/com.android.cellbroadcastreceiver/shared_prefs/_has_set_default_values.xml
/data/user_de/0/com.android.cellbroadcastreceiver/databases
/data/user_de/0/com.android.cellbroadcastreceiver/databases/cell_broadcasts.db
/data/user_de/0/com.android.cellbroadcastreceiver/databases/cell_broadcasts.db-journal
find /data/data/ -user UID -type d -maxdepth 1 | xargs basename
,如果你要在第一多个结果find
的命令。