在“电池历史记录”中,我发现UID为10058的应用程序消耗了很多电池。

我如何找到UID等于10058的应用程序的名称?

#1 楼

Android在安装时为每个应用程序分配一个UID(用户ID);与PID(进程ID)是瞬态的并且始终保持变化的情况不同,只要不重新安装应用程序,UID就会保持不变。除了当应用程序明确要求与另一个应用程序共享用户ID时,UID对于每个应用程序都应该是唯一的(对此存在安全限制,这两个应用程序必须使用相同的私钥签名,即来自同一开发人员)。

这些应用程序声称要显示应用程序的UID:


https://market.android.com/details?id=redfishandroid.appexplorer
https://market.android.com/details?id=com.sayhello2theworld.te

编辑:

尝试查看/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。

对于需要的应用程序与另一个应用程序共享用户ID,例如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"

#2 楼

先决条件:在PC上设置adb,将设备连接到PC,在PC上启动外壳程序以输入adb命令。
注意:

在以下命令中替换UID
以下命令将仅提供与您的UID相对应的应用程序的软件包名称。要在获取程序包名称后获取应用程序标签/名称,您可以在此处使用我的答案,也可以使用GAThrawn或Izzy的答案。


对于Android 8.x及更高版本
输入命令:
adb shell cmd package list packages --uid UID
adb shell pm list packages --uid UID                 # alternative command

示例:
$ adb shell pm list packages --uid 10250
package:com.adobe.scan.android uid:10250


对于Android 7.x及更高版本
输入命令:
adb shell "cm package list packages -U | grep UID"
adb shell "pm list packages -U | grep UID"           # alternative command

示例:
$ adb shell "cmd package list packages -U | grep 10247"
package:dev.ukanth.ufirewall uid:10247


对于任何Android版本(从Android 4.2.1到10.0进行测试)
输入命令:
adb shell "dumpsys package | grep -A1 'userId=UID'"

请花几秒钟来打印所需的输出。
示例:
$ adb shell "dumpsys package | grep -A1 'userId=10102'"
   userId=10102
   pkg=Package{46171ce com.android.chrome}

包含Package{的行将在空白和}之间显示应用程序的软件包名称。您可以执行adb shell dumpsys package PKG_NAMEPKG_NAME→应用程序的程序包名称)以了解有关该程序包/应用程序的更多详细信息。

对于植根的Android版本
如果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 default 3002,3003,3001

已经安装了Busybox或Toybox,并且可以在PATH变量下使用它,而不是通过终端仿真器或adb shell执行:
su
find /data/data/ -type d -group UID -maxdepth 1 | xargs basename

示例:
shell@shamu:/ $ su
root@shamu:/ # find /data/data/ -group 10102 -type d -maxdepth 1 | xargs basename
com.android.chrome



评论


这对我没有根源。

–努比亚Noob
16年5月5日在6:36

#3 楼

安装终端仿真器,启动它并运行:

ps | grep 10058


ps列出了所需ID的进程和grep过滤器。仅当运行命令时应用程序正在运行时才起作用。

评论


我尝试了此操作,但它不起作用,因为该应用程序尚未运行

– azat
2011年4月19日在13:54

这是针对PID,询问者是指UID

– Lie Ryan
2011年4月19日在17:21

UID显示在ps输出以及PID中。 ps输出通常具有类似于“ 12345 app_118 ...”的行,其中12345是PID,而app_118是UID(对应于/data/system/packages.xml中的userId = 10118)

– Art Swri
2013年6月12日16:09

#4 楼

在ADB Shell(或终端仿真器)中,使用以下命令:

cat /proc/<your_process_id_here>/status


,然后在“名称”字段中查找。这应该是进程的名称。因此,在您的情况下,它将是“ cat / proc / 10058 / status”

评论


10058应该是此处的PID,而OP给了我们UID。

–Firelord♦
2015年10月2日,11:02



#5 楼

我在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使用率列表,您应该没事。

#6 楼

要在有根电话上通过UID(或GroupID)查找“一切”,包括正在运行的进程,系统应用程序和硬件传感器:
# ID=3011; find / -group $ID -o -user $ID   2>/dev/null

示例1:
# 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

示例2
# 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