Как я могу найти имя приложения по UID?

39

В «истории батареи» я обнаружил, что приложение с UID 10058 использует много батареи.

Как я могу найти название приложения с UID, равным 10058?

азат
источник

Ответы:

32

Android назначает каждому приложению UID (идентификатор пользователя) во время установки; в отличие от PID (ID процесса), который является временным и постоянно меняется, UID остается постоянным до тех пор, пока приложение не будет переустановлено. 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"

Ли Райан
источник
26

Настройте на ПК, подключите устройство к ПК, запустите на ПК оболочку и введите:

adb shell "dumpsys package | grep -A1 'userId=UID'"

замещать UID на ID, который вы ищете, например, 10102.

Пример:

bash-4.2 # adb shell "dumpsys package | grep -A1 'userId = 10102'"
   = 10102 идентификатор пользователя
   pkg = пакет {46171ce com.android.chrome }
Баш-4,2 #

Строка, содержащая, Package{будет показывать имя пакета приложения между пробелами и }. Вы можете сделать adb shell dumpsys package PKG_NAME( PKG_NAME→ имя пакета приложения), чтобы узнать более подробную информацию об этом пакете / приложении.


Если Android рутирован, из оболочки adb или приложения эмулятора терминала вы можете сделать:

су
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
root @ shamu: / #

В качестве альтернативы, если Busybox или Toybox установлены и доступны в переменной PATH, из эмулятора терминала или оболочки adb выполните:

су
найти / данные / данные / -тип d -группы UID -maxdepth 1 | xargs basename

Пример:

shell @ shamu: / $ su
root @ shamu: / # find / data / data / -группа 10102 -тип d -maxdepth 1 | xargs basename
com.android.chrome
root @ shamu: / #

Поскольку нас интересует ярлык приложения, а не имя пакета, перейдите к ответу от GAThrawn или Izzy .

Повелитель огня
источник
Используйте, find /data/data/ -user UID -type d -maxdepth 1 | xargs basenameесли вы получаете несколько результатов в первой findкоманде.
Повелитель огня
Это работает для меня без рута.
Анубиан Нуб
5

Установите эмулятор терминала , запустите его и запустите:

ps | grep 10058

psперечисляет процессы и grepфильтры для идентификатора, который вы хотите.

Но это работает только в том случае, если приложение запущено при запуске команды.

Снарк
источник
Я пробую это, но это не работает, потому что такое приложение еще не запущено
azat
6
Это для PID, аскер имел в виду UID
Lie Ryan
2
UID отображается в выводе ps, а также в PID. Вывод ps обычно имеет строки типа «12345 app_118 ...», где 12345 - это PID, а app_118 - это UID (соответствует userId = 10118 в /data/system/packages.xml)
Art Swri
5

В оболочке ADB (или эмуляторе терминала) используйте следующую команду:

cat /proc/<your_process_id_here>/status

и посмотрите в поле «Имя». Это должно быть название процесса. Так что в вашем случае это будет " cat / proc / 10058 / status "

Chahk
источник
3
10058 должен быть PID здесь, в то время как OP дал нам UID.
Повелитель огня
0

У меня была похожая проблема с Android 6.0, Moto G 2nd Gen с 2014 года. Мне довелось обновить приложение ES File Explorer, и я заметил, что оно раздувалось до чертиков и высасывает много батареи. Я удалил приложение из системы, но приложение позволило зомби-процессу занять процессор. UID был похож на ваш 10118, и в статистике батареи он указан как самый голодный ресурс.

Затем я установил приложение с именем «OS Monitor» и заметил, что файл .esfm был единственным процессом, который занимал 60% процессорного времени. Я сразу понял, что это связано с ES File Explorer, но подождите ... Я удалил ES File Explorer. Да. Единственное, что я не сделал, это перезапустил смартфон. Поверьте мне, я думал о сумасшедших вещах, таких как укоренение и выход из этого процесса, бросание телефона в стену, и даже начал верить, что моя батарея достигла конца жизни. К моему удивлению, я просто перезапустил телефон, и процесс исчез.

Поэтому, прежде чем принимать какие-либо радикальные меры, попробуйте выяснить, какое приложение дает вам плохое время, удалите его и перезагрузите телефон. Проверьте на ОС Мониторинг списка загрузки процессора, и все будет в порядке.

dbarros
источник
0

Чтобы найти «все» по 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
Алек Истомин
источник