Jak mogę znaleźć nazwę aplikacji według UID?

38

W „historii baterii” odkryłem, że aplikacja z UID 10058 zużywa dużo baterii.

Jak mogę znaleźć nazwę aplikacji o UID równym 10058?

azat
źródło

Odpowiedzi:

32

Android przypisuje każdej aplikacji UID (identyfikator użytkownika) podczas instalacji; w przeciwieństwie do PID (ID procesu), który jest przejściowy i ciągle się zmienia, UID pozostaje stały, dopóki aplikacja nie zostanie ponownie zainstalowana. Identyfikator UID powinien być unikalny dla każdej aplikacji, z wyjątkiem sytuacji, gdy aplikacja wyraźnie zażąda współdzielenia identyfikatora użytkownika z inną aplikacją (istnieją ograniczenia bezpieczeństwa, obie aplikacje muszą być podpisane tym samym kluczem prywatnym, tj. Pochodzi od tego samego programisty).

Te aplikacje twierdzą, że pokazują UID aplikacji:

EDYTOWAĆ:

Spróbuj spojrzeć na /data/system/packages.xml(potrzebujesz roota, aby wyświetlić ten plik), każda zainstalowana aplikacja powinna mieć tam wpis. Załóżmy, że w moim telefonie jest zainstalowany program 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>

Mój telefon przypisał userId="10034"program Adobe Reader.

W przypadku aplikacji, które poprosiły o udostępnienie identyfikatora użytkownika innej aplikacji, powiedz 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>

to atrybut, którego szukasz, to sharedUserId="10064"

Lie Ryan
źródło
25

Skonfiguruj na komputerze, podłącz urządzenie do komputera, uruchom powłokę na komputerze i wprowadź:

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

Zamień UIDna identyfikator, którego szukasz, na przykład 10102.

Przykład:

bash-4.2 # adb shell "pakiet dumpsys | grep -A1 'userId = 10102'”
   userId = 10102
   PKG = pakiet {46171ce com.android.chrome }
bash-4.2 #

Linia zawierająca Package{pokazywałaby nazwę pakietu aplikacji pomiędzy spacjami i }. Możesz zrobić adb shell dumpsys package PKG_NAME( PKG_NAME→ nazwa pakietu aplikacji), aby dowiedzieć się więcej o tym pakiecie / aplikacji.


Jeśli Android jest zrootowany, z poziomu powłoki adb lub aplikacji emulującej terminal, możesz:

su
cat /data/system/packages.list | grep UID

W danych wyjściowych wszystko przed identyfikatorem UID jest nazwą pakietu.

Przykład:

shell @ shamu: / $ su
root @ shamu: / # cat /data/system/packages.list | grep 10102
com.android.chrome 10102 0 /data/data/com.android.chrome domyślnie 3002,3003,3001
root @ shamu: / #

Alternatywnie, jeśli masz zainstalowany Busybox lub Toybox i dostępny pod zmienną PATH, z emulatora terminala lub powłoki adb wykonaj:

su
find / data / data / -type d -group UID -maxdepth 1 | xargs basename

Przykład:

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

Ponieważ interesuje nas etykieta aplikacji, a nie nazwa pakietu, przejdź do odpowiedzi od GAThrawn lub Izzy .

Firelord
źródło
Użyj, find /data/data/ -user UID -type d -maxdepth 1 | xargs basenamejeśli otrzymujesz wiele wyników w pierwszym findpoleceniu.
Firelord
To działa dla mnie bez rootowania.
Anubian Noob
5

Zainstaluj emulator terminala , uruchom go i uruchom:

ps | grep 10058

pswyświetla procesy i grepfiltry dla żądanego identyfikatora.

Ale działa to tylko wtedy, gdy aplikacja jest uruchomiona po uruchomieniu polecenia.

Snark
źródło
Próbuję tego, ale to nie działa, ponieważ taka aplikacja jeszcze nie działa
azat
6
To dotyczy PID, pytający odnosił się do UID
Lie Ryan
2
UID jest pokazany na wyjściu ps, a także PID. Wyjście ps zwykle ma wiersze takie jak „12345 app_118 ...”, gdzie 12345 to PID, a app_118 to UID (odpowiadający userId = 10118 w /data/system/packages.xml)
Art Swri
5

W powłoce ADB (lub emulatorze terminala) użyj następującego polecenia:

cat /proc/<your_process_id_here>/status

i spójrz w pole „Nazwa”. To powinna być nazwa procesu. W twoim przypadku będzie to „ cat / proc / 10058 / status

Chahk
źródło
3
10058 ma być tutaj PID, podczas gdy OP dał nam UID.
Firelord
0

Miałem podobny problem z Androidem 6.0, Moto G 2. generacji od 2014 roku. Zdarzyło mi się uaktualnić aplikację ES File Explorer i zauważyłem, że jest rozdęta jak diabli i zużywa dużo baterii. Usunąłem aplikację z systemu, ale aplikacja pozwoliła procesowi zombie zajmującemu procesor. Identyfikator UID był podobny do twojego 10118 i był wymieniony w statystykach baterii jako najbardziej głodny proces zasobów.

Następnie zainstalowałem aplikację o nazwie „OS Monitor” i zauważyłem, że plik .esfm był tak naprawdę jedynym procesem zajmującym 60% procesora. Od razu wiedziałem, że ma to związek z Eksploratorem plików ES, ale poczekaj ... Miałem odinstalowany Eksplorator plików ES. Tak. Jedyne, czego nie zrobiłem, to zrestartowanie smartfona. Uwierz mi, myślałem o szalonych rzeczach, takich jak zrootowanie i pokonanie bzdur z tego procesu, rzucenie telefonem o ścianę, a nawet zacząłem wierzyć, że moja bateria wyczerpała się. Ku mojemu zaskoczeniu po prostu ponownie uruchomiłem telefon i proces zniknął.

Dlatego przed podjęciem jakichkolwiek drastycznych kroków spróbuj dowiedzieć się, która aplikacja daje zły czas, odinstaluj ją, a następnie uruchom ponownie telefon. Sprawdź w OS Monitoruj listę użycia procesora i wszystko powinno być w porządku.

dbarros
źródło
0

Aby znaleźć „wszystko” według identyfikatora UID (lub GroupID) na zrootowanym telefonie, w tym uruchomionych procesów, aplikacji systemowych i czujników sprzętowych:

# ID=3011; find / -group $ID -o -user $ID   2>/dev/null

Przykład 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

Przykład 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
Alec Istomin
źródło