Como posso encontrar o nome do aplicativo pelo UID?

39

No "histórico da bateria", descobri que o aplicativo com o UID 10058 está usando muita bateria.

Como posso encontrar o nome do aplicativo com UID igual a 10058?

azat
fonte

Respostas:

32

O Android atribui a cada aplicativo um UID (ID do usuário) no momento da instalação; ao contrário do PID (ID do processo), que é transitório e muda constantemente, o UID permanece constante enquanto o aplicativo não for reinstalado. O UID deve ser exclusivo para cada aplicativo, exceto quando o aplicativo solicita explicitamente o compartilhamento de um ID de usuário com outro aplicativo (existem restrições de segurança em relação a isso, os dois aplicativos devem ser assinados com a mesma chave privada, ou seja, é do mesmo desenvolvedor).

Esses aplicativos afirmam mostrar o UID dos aplicativos:

EDITAR:

Tente olhar /data/system/packages.xml(você precisa de root para visualizar este arquivo), cada aplicativo instalado deve ter uma entrada lá. Digamos, eu tenho o Adobe Reader instalado no meu telefone:

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

Meu telefone foi atribuído userId="10034"ao Adobe Reader.

Para aplicativos que solicitaram compartilhar o ID do usuário com outro aplicativo, 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>

então o atributo que você está procurando é sharedUserId="10064"

Lie Ryan
fonte
26

Configure em um PC, conecte o dispositivo ao PC, inicie um shell no PC e digite:

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

Substitua UIDpelo ID que você está procurando, como 10102.

Exemplo:

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

A linha que contém Package{mostraria o nome do pacote do aplicativo entre espaços em branco e }. Você pode fazer adb shell dumpsys package PKG_NAME( PKG_NAME→ nome do pacote de um aplicativo) para saber mais detalhes sobre esse pacote / aplicativo.


Se o Android estiver enraizado, no shell adb ou em um aplicativo emulador de terminal, você poderá:

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

Na saída, qualquer coisa antes do UID é o nome do pacote.

Exemplo:

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

Como alternativa, se você tiver o Busybox ou o Toybox instalado e disponível na variável PATH, em um emulador de terminal ou shell adb, faça:

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

Exemplo:

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

Como estamos interessados ​​no rótulo do aplicativo e não no nome do pacote, continue com a resposta do GAThrawn ou do Izzy .

Senhor do Fogo
fonte
Use find /data/data/ -user UID -type d -maxdepth 1 | xargs basenamese você estiver obtendo vários resultados no primeiro findcomando.
Firelord
Isso funciona para mim sem raiz.
Anubian Noob 5/05
5

Instale um emulador de terminal , inicie-o e execute:

ps | grep 10058

pslista os processos e grepfiltros para o ID que você deseja.

Mas isso só funciona se o aplicativo estiver sendo executado quando você executar o comando.

Snark
fonte
I tentar isso, mas ele não funciona, porque tal aplicativo não está já em execução
Azat
6
Isto é para PID, o consulente estava se referindo a UID
Lie Ryan
2
O UID é mostrado na saída ps, bem como no PID. A saída ps normalmente possui linhas como '12345 app_118 ...', em que 12345 é o PID e app_118 é o UID (correspondente a userId = 10118 em /data/system/packages.xml)
Art Swri
5

No shell do ADB (ou emulador de terminal), use o seguinte comando:

cat /proc/<your_process_id_here>/status

e procure no campo "Nome". Esse deve ser o nome do processo. Portanto, no seu caso, seria " cat / proc / 10058 / status "

Chahk
fonte
3
10058 é suposto ser o PID aqui enquanto OP nos deu UID.
Firelord
0

Eu tive um problema semelhante com o Android 6.0, Moto G 2nd Gen a partir de 2014. Eu atualizei o aplicativo ES File Explorer e notei que ele estava inchado como o inferno e consumindo muita bateria. Eu removi o aplicativo do sistema, mas o aplicativo deixou um processo zumbi ocupando a CPU. O UID era semelhante ao seu 10118 e listado nas estatísticas da bateria como o processo de recurso mais faminto.

Em seguida, instalei um aplicativo chamado "OS Monitor" e notei que um arquivo .esfm era realmente o único processo que ocupava 60% da CPU. Eu soube imediatamente que tinha a ver com o ES File Explorer, mas espere ... Eu tinha desinstalado o ES File Explorer. Sim. A única coisa que não fiz foi reiniciar o smartphone. Acredite, eu estava pensando em coisas malucas, como enraizar-me e acabar com esse processo, jogar o telefone contra a parede e até comecei a acreditar que minha bateria chegava ao fim da vida. Para minha surpresa, simplesmente reiniciei o telefone e o processo se foi.

Portanto, antes de tomar medidas drásticas, tente descobrir qual aplicativo está causando problemas, desinstale-o e reinicie o telefone. Verifique no OS Monitor a lista de uso da CPU e você deve ficar bem.

dbarros
fonte
0

Para encontrar "tudo" pelo UID (ou GroupID) em um telefone raiz , incluindo processos em execução, aplicativos do sistema e sensores de hardware:

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

Exemplo 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

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