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

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

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

Ответы (6)

Android присваивает каждому приложению UID (идентификатор пользователя) во время установки; в отличие от PID (идентификатора процесса), который является временным и постоянно меняется, UID остается постоянным, пока приложение не переустанавливается. UID должен быть уникальным для каждого приложения, за исключением случаев, когда приложение явно запрашивает совместное использование идентификатора пользователя с другим приложением (в этом отношении существуют ограничения безопасности, два приложения должны быть подписаны одним и тем же закрытым ключом, т. е. исходить от одного и того же разработчика).

Эти приложения утверждают, что показывают UID приложений:

РЕДАКТИРОВАТЬ:

Попробуйте посмотреть /data/system/packages.xml(нужен рут для просмотра этого файла), каждое установленное приложение должно иметь там запись. Скажем, у меня в телефоне установлен 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"

Предварительные условия : настроить в ПК, подключить устройство к ПК, запустить оболочку на ПК для ввода команд adb.

Примечание :

  • Замените UIDвезде, где это встречается в следующих командах, UID, который вы ищете.
  • Приведенные ниже команды будут предоставлять только имя пакета приложения, соответствующего вашему UID. Чтобы получить метку/имя приложения после получения имени пакета, вы можете использовать мой ответ здесь , ответ GAThrawn или Иззи .

Для Android 8.x и выше

Введите команду:

adb shell cmd package list packages --uid UID 
adb shell pm list packages --uid UID                  # альтернативная команда

Пример:

$ пакет adb shell pm list --uid 10250 
package: com.adobe.scan.android uid: 10250

Для Android 7.x и выше

Введите команду:

adb shell "cmd package list packages -U | grep UID "
adb shell "pm list packages -U | grep UID " # альтернативная команда


ЕСЛИ вышеуказанные cmds не работают, вы можете попробовать их ниже, указав точное имя 
adb shell «cmd package list packages uid UID »
adb shell "pm list packages uid UID " # альтернативная команда

Пример:

$ adb shell "cmd package list packages -U | grep 10247 "
пакет: dev.ukanth.ufirewall uid: 10247

Для любой версии Android (проверено от Android 4.2.1 до 10.0)

Введите команду:

оболочка adb "пакет думпсис | grep -A1 'userId = UID '"

Печать желаемого результата может занять несколько секунд.

Пример:

$ adb shell "dumpsys package | grep -A1 'userId = 10102 '"
   userId= 10102 
   pkg=Пакет{46171ce com.android.chrome }

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


Для корневых версий Android

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

су
кошка /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

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

су
find /data/data/ -type d -group UID -maxdepth 1 | xargs базовое имя

Пример:

shell@shamu:/ $ su
root@shamu:/ # find /data/data/ -group 10102 -type d -maxdepth 1 | xargs базовое имя
 com.android.chrome

У меня работает без рута.

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

ps | grep 10058

psперечисляет процессы и grepфильтры для нужного идентификатора.

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

Я пробую это, но это не работает, потому что такое приложение еще не запущено
Это для PID, спрашивающий имел в виду UID
UID отображается в выводе ps так же, как и PID. Вывод ps обычно содержит такие строки, как «12345 app_118...», где 12345 — это PID, а app_118 — это UID (соответствует userId=10118 в /data/system/packages.xml).

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

cat /proc/<your_process_id_here>/status

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

Здесь 10058 должен быть PID, а OP дал нам UID.

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

Затем я установил приложение под названием «Монитор ОС» и заметил, что файл .esfm на самом деле был единственным процессом, занимающим 60% процессорного времени. Я сразу понял, что это связано с ES File Explorer, но подождите... Я удалил ES File Explorer. Да. Единственное, что я не сделал, это ПЕРЕЗАГРУЗИТЬ смартфон. Поверьте мне, я думал о сумасшедших вещах, таких как получение root-прав и выбивание дерьма из этого процесса, бросание телефона в стену и даже начало верить, что моя батарея достигла конца жизни. К моему удивлению, я просто перезагрузил телефон, и процесс исчез.

Поэтому, прежде чем принимать какие-либо радикальные меры, попытайтесь выяснить, какое приложение доставляет вам неприятности, удалите его и перезагрузите телефон. Проверьте в OS Monitor список использования ЦП, и все будет в порядке.

Чтобы найти «все» по 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