Wie kann ich den App-Namen anhand der UID finden?

38

Im "Batterieverlauf" habe ich festgestellt, dass die App mit der UID 10058 viel Batterie verbraucht.

Wie finde ich den Namen der App mit der UID 10058?

azat
quelle

Antworten:

32

Android weist jeder Anwendung bei der Installation eine UID (Benutzer-ID) zu. Im Gegensatz zu PID (Process ID), die vorübergehend ist und sich ständig ändert, bleibt UID konstant, solange die Anwendung nicht erneut installiert wird. Die UID sollte für jede Anwendung eindeutig sein, es sei denn, die Anwendung fordert ausdrücklich die Freigabe einer Benutzer-ID für eine andere Anwendung an (es bestehen Sicherheitsbeschränkungen, die beiden Anwendungen müssen mit demselben privaten Schlüssel signiert sein, dh sie stammen vom selben Entwickler).

Diese Anwendungen geben an, die UID der Anwendungen anzuzeigen:

BEARBEITEN:

Versuchen Sie es mit /data/system/packages.xml(Sie benötigen root, um diese Datei anzuzeigen). Jede installierte Anwendung sollte dort einen Eintrag haben. Angenommen, ich habe Adobe Reader auf meinem Handy installiert:

<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>

Mein Telefon hat userId="10034"Adobe Reader zugewiesen .

Für Anwendungen, die die Freigabe der Benutzer-ID für eine andere Anwendung angefordert haben, sagen Sie 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>

dann ist das gesuchte Attribut sharedUserId="10064"

Lüge Ryan
quelle
25

Richten Sie in einem PC ein, verbinden Sie das Gerät mit dem PC, starten Sie eine Shell auf dem PC und geben Sie Folgendes ein:

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

Ersetzen Sie UIDdurch die ID, nach der Sie suchen, z. B. 10102.

Beispiel:

bash-4.2 # adb shell "dumpsys package | grep -A1 'userId = 10102'"
   userId = 10102
   pkg = Paket {46171ce com.android.chrome }
bash-4.2 #

Die Zeile mit Package{würde den Paketnamen der App zwischen Whitespace und }. Sie können tun adb shell dumpsys package PKG_NAME( PKG_NAME→ Paketname einer App), um weitere Details zu diesem Paket / dieser App zu erfahren.


Wenn das Android- System über die ADB-Shell oder eine Terminalemulator-App gerootet ist, können Sie Folgendes tun:

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

In der Ausgabe ist alles vor der UID der Paketname.

Beispiel:

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: / #

Alternativ, wenn Sie haben Busybox oder Toybox installiert und verfügbar unter PATH - Variablen, von einem Terminal - Emulator oder ADB Shell tun:

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

Beispiel:

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

Da wir am Etikett der App und nicht am Paketnamen interessiert sind, fahren Sie mit der Antwort von GAThrawn oder von Izzy fort .

Feuerlord
quelle
Verwenden find /data/data/ -user UID -type d -maxdepth 1 | xargs basenameSie diese Option, wenn Sie im ersten findBefehl mehrere Ergebnisse erhalten .
Firelord
Das funktioniert bei mir ohne root.
Anubian Noob
5

Installieren Sie einen Terminalemulator , starten Sie ihn und führen Sie Folgendes aus:

ps | grep 10058

psListet die Prozesse und grepFilter für die gewünschte ID auf.

Dies funktioniert jedoch nur, wenn die Anwendung beim Ausführen des Befehls ausgeführt wird.

Snark
quelle
Ich versuche dies, aber es funktioniert nicht, weil eine solche App noch nicht läuft
Azat
6
Dies ist für PID, der Fragesteller bezog sich auf UID
Lie Ryan
2
Die UID wird sowohl in der ps-Ausgabe als auch in der PID angezeigt. Die ps-Ausgabe enthält normalerweise Zeilen wie '12345 app_118 ...', wobei 12345 die PID und app_118 die UID ist (entsprechend userId = 10118 in /data/system/packages.xml)
Art Swri
5

Verwenden Sie in der ADB-Shell (oder im Terminalemulator) den folgenden Befehl:

cat /proc/<your_process_id_here>/status

und schauen Sie in das Feld "Name". Dies sollte der Name des Prozesses sein. In Ihrem Fall wäre es also " cat / proc / 10058 / status ".

Chahk
quelle
3
10058 soll hier die PID sein, während OP uns die UID gab.
Firelord
0

Ich hatte ein ähnliches Problem mit Android 6.0, Moto G 2nd Gen aus dem Jahr 2014. Ich hatte zufällig die ES File Explorer-Anwendung aktualisiert und bemerkte, dass sie höllisch aufgebläht war und eine Menge Batterie aufgesaugt hatte. Ich habe die Anwendung vom System entfernt, aber die Anwendung hat einen Zombie-Prozess veranlasst, die CPU zu belegen. Die UID ähnelte Ihrer 10118 und wurde in der Batteriestatistik als der Prozess mit den meisten Ressourcen aufgeführt.

Dann habe ich eine App namens "OS Monitor" installiert und festgestellt, dass eine .esfm-Datei tatsächlich der einzige Prozess ist, der 60% der CPU einnimmt. Ich hatte sofort gewusst, dass es mit ES File Explorer zu tun hat, aber warte ... Ich hatte ES File Explorer deinstalliert. Ja. Das einzige, was ich nicht getan habe, war das Smartphone neu zu starten. Glauben Sie mir, ich dachte über verrückte Dinge nach, wie z. B. Wurzeln schlagen und den Mist aus diesem Prozess schlagen, das Telefon gegen die Wand werfen und sogar anfangen zu glauben, dass mein Akku das Ende seiner Lebensdauer erreicht hat. Zu meiner Überraschung habe ich einfach das Telefon neu gestartet und der Vorgang war beendet.

Versuchen Sie also, bevor Sie drastische Maßnahmen ergreifen, herauszufinden, welche App Ihnen eine schlechte Zeit bereitet, deinstallieren Sie sie und starten Sie das Telefon neu. Überprüfen Sie auf OS Monitor die CPU-Auslastung Liste, und Sie sollten in Ordnung sein.

dbarros
quelle
0

So finden Sie "alles" nach UID (oder GroupID) auf einem verwurzelten Telefon, einschließlich ausgeführter Prozesse, System-Apps und Hardwaresensoren:

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

Beispiel 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

Beispiel 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
quelle