¿Cómo puedo encontrar el nombre de la aplicación por UID?

En el "historial de la batería" descubrí que la aplicación con UID 10058 está usando mucha batería.

¿Cómo puedo encontrar el nombre de la aplicación con UID igual a 10058?

Respuestas (6)

Android asigna a cada aplicación un UID (ID de usuario) en el momento de la instalación; a diferencia del PID (ID de proceso), que es transitorio y cambia todo el tiempo, el UID permanece constante mientras no se reinstale la aplicación. El UID debe ser único para cada aplicación, excepto cuando la aplicación solicite explícitamente compartir un ID de usuario con otra aplicación (existen restricciones de seguridad al respecto, las dos aplicaciones deben estar firmadas con la misma clave privada, es decir, provienen del mismo desarrollador).

Estas aplicaciones afirman mostrar el UID de las aplicaciones:

EDITAR:

Intente mirar /data/system/packages.xml(necesita root para ver este archivo), cada aplicación instalada debe tener una entrada allí. Digamos, tengo Adobe Reader instalado en mi teléfono:

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

Mi teléfono se ha asignado userId="10034"a Adobe Reader.

Para las aplicaciones que solicitaron compartir la identificación de usuario con otra aplicación, diga 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>

entonces el atributo que estás buscando essharedUserId="10064"

Requisitos previos : configure en una PC, conecte el dispositivo a la PC, inicie un shell en la PC para ingresar los comandos de adb.

Nota :

  • Reemplace UIDdonde sea que aparezca en los siguientes comandos con el UID que está buscando.
  • Los comandos a continuación solo proporcionarían el nombre del paquete de la aplicación correspondiente a su UID. Para obtener la etiqueta/nombre de la aplicación después de obtener el nombre del paquete, puede usar mi respuesta aquí , o de GAThrawn o de Izzy .

Para Android 8.x y superior

Introduzca el comando:

adb shell cmd paquete lista de paquetes --uid UID 
adb shell pm lista de paquetes --uid UID                  # comando alternativo

Ejemplo:

$ adb shell pm lista de paquetes --uid 10250 
paquete: com.adobe.scan.android uid: 10250

Para Android 7.x y superior

Introduzca el comando:

adb shell "cmd lista de paquetes paquetes -U | grep UID "
adb shell "pm list packages -U | grep UID " # comando alternativo


SI los cmd anteriores no funcionan, puede probar estos a continuación y obtener el nombre exacto 
adb shell "cmd package list packages uid UID "
adb shell "pm lista de paquetes uid UID " # comando alternativo

Ejemplo:

$ adb shell "cmd lista de paquetes paquetes -U | grep 10247 "
paquete: dev.ukanth.ufirewall uid: 10247

Para cualquier versión de Android (probado desde Android 4.2.1 a 10.0)

Introduzca el comando:

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

Puede llevar unos segundos imprimir el resultado deseado.

Ejemplo:

$ adb shell "paquete dumpsys | grep -A1 'userId= 10102 '"
   ID de usuario = 10102 
   pkg = Paquete {46171ce com.android.chrome }

La línea que contiene Package{mostraría el nombre del paquete de la aplicación entre espacios en blanco y }. Puede hacer adb shell dumpsys package PKG_NAME( PKG_NAME→ nombre del paquete de una aplicación) para conocer más detalles sobre ese paquete/aplicación.


Para versiones rooteadas de Android

Si el Android está rooteado, entonces puede usar adb shell o una aplicación de emulador de terminal:

su
cat /datos/sistema/paquetes.lista | ID de usuario de grep

En la salida, cualquier cosa antes del UID sería el nombre del paquete.

Ejemplo:

shell@shamu:/ $ su
root@shamu:/ # cat /datos/sistema/paquetes.lista | grep 10102 
com.android.chrome 10102 0 /data/data/com.android.chrome predeterminado 3002,3003,3001

Alternativamente , si tiene Busybox o Toybox instalado y disponible en la variable PATH, que desde un emulador de terminal o adb shell haga lo siguiente:

su
encontrar /datos/datos/ -tipo d -grupo UID -max depth 1 | nombre base xargs

Ejemplo:

shell@shamu:/ $ su
root@shamu:/ # buscar /datos/datos/ -group 10102 -type d -max depth 1 | xargs nombre base
 com.android.chrome

Esto me funciona sin root.

Instale un emulador de terminal , inícielo y ejecute:

ps | grep 10058

psenumera los procesos y grepfiltros para el ID que desea.

Pero esto solo funciona si la aplicación se está ejecutando cuando ejecuta el comando.

Intento esto, pero no funciona, porque dicha aplicación aún no se está ejecutando.
Esto es para PID, el autor de la pregunta se refería a UID
El UID se muestra en la salida de ps, así como el PID. La salida ps normalmente tiene líneas como '12345 app_118...' donde 12345 es el PID y app_118 es el UID (correspondiente a userId=10118 en /data/system/packages.xml)

En ADB shell (o emulador de terminal) use el siguiente comando:

cat /proc/<your_process_id_here>/status

y busque en el campo "Nombre". Este debe ser el nombre del proceso. Entonces, en su caso, sería " cat /proc/10058/status "

Se supone que 10058 es el PID aquí, mientras que OP nos dio el UID.

Tuve un problema similar con Android 6.0, Moto G 2.ª generación de 2014. Actualicé la aplicación ES File Explorer y me di cuenta de que estaba muy hinchada y consumía mucha batería. Eliminé la aplicación del sistema, pero la aplicación permitió que un proceso zombie ocupase la CPU. El UID era similar al suyo 10118 y figuraba en las estadísticas de la batería como el proceso de recursos más hambriento.

Luego instalé una aplicación llamada "OS Monitor" y noté que un archivo .esfm era en realidad el único proceso que ocupaba el 60% de la CPU. Inmediatamente supe que tenía que ver con ES File Explorer, pero espera... HABÍA desinstalado ES File Explorer. Sí. Lo único que no hice fue REINICIAR el teléfono inteligente. Créeme, estaba pensando en cosas locas, como hacer root y darle una paliza a ese proceso, tirar el teléfono contra la pared e incluso comencé a creer que mi batería había llegado al final de su vida útil. Para mi sorpresa, simplemente reinicié el teléfono y el proceso desapareció.

Entonces, antes de tomar medidas drásticas, intente averiguar qué aplicación lo está haciendo pasar mal, desinstálelo y luego reinicie el teléfono. Verifique en OS Monitor la lista de uso de la CPU, y debería estar bien.

Para encontrar "todo" por UID (o GroupID) en un teléfono rooteado , incluidos los procesos en ejecución, las aplicaciones del sistema y los sensores de hardware:

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

Ejemplo 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

Ejemplo 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