Determinar qual aplicativo está se baseando em outros aplicativos?

21

Existe uma maneira de determinar qual aplicativo está se baseando em outros aplicativos?

Por exemplo, o aplicativo Facebook Messenger pode desenhar os balões de bate-papo em cima de tudo, mas como sei qual aplicativo está fazendo isso?

Meu problema:

Eu tenho um aplicativo que está desenhando anúncios em cima de tudo e quero saber qual aplicativo está fazendo isso. Não apenas para desinstalá-lo, mas para avisar a todos que usam este aplicativo. (Não instalei nenhum aplicativo recentemente e já verifiquei as atualizações recentes.)

Tentei usar a Hierarquia do Dump View para UI Automator no Android Studio, mas parece que os aplicativos que aparecem na parte superior não podem ser selecionados dessa maneira.

(Clique na imagem para ampliar)

Tela do Android Studio

andreroggeri
fonte
Apenas para adicionar aos problemas mencionados nas respostas abaixo (para tentar mantê-lo completo). No TouchWiz (Samsung Galaxy, o meu é a Nota 4), desligar o painel lateral do teclado resolveu esse problema para mim.
0xc0de
Para não desenvolvedores, basta verificar aqui uma lista de aplicativos: android.stackexchange.com/questions/154274/…
Jonathan

Respostas:

24

Nota:

  • já deve estar configurado no PC.
  • Para Android anterior à versão 4.4.x, pode ser necessário acesso root.
  • Alguns comandos não funcionariam no Android anterior à versão 5.1.
  • Vá para o título " Aplicativos para aplicativos " se você não estiver familiarizado ou desconfortável com a linha de comando e / ou se a linha de comando não resolver o problema.

Editar: reduza a busca na solução anterior e siga apenas esta seção editada.

Configure e execute este comando:

adb shell "dumpsys window windows | toybox grep -i system_alert_window"

Você obteria a saída de todas as sobreposições ativas na tela. Exemplo de uma saída com o DU Screen Recorder, Tasker e AZ Screen Recorder mostrando sobreposições ativas na tela:

bash-4.3 # adb shell "janelas da janela do dumpsys | toybox grep -i system_alert_window"
    mOwnerUid = 10087 mShowToOwnerOnly = pacote verdadeiro = net.dinglisch.android.tasker appop = SYSTEM_ALERT_WINDOW
    mOwnerUid = 10604 mShowToOwnerOnly = true pacote = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
    mOwnerUid = 10604 mShowToOwnerOnly = true pacote = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
    mOwnerUid = 10649 mShowToOwnerOnly = pacote verdadeiro = com.duapps.recorder appop = SYSTEM_ALERT_WINDOW
    mOwnerUid = 10649 mShowToOwnerOnly = pacote verdadeiro = com.duapps.recorder appop = SYSTEM_ALERT_WINDOW
    mOwnerUid = 10604 mShowToOwnerOnly = true pacote = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
    mOwnerUid = 10604 mShowToOwnerOnly = true pacote = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
    mOwnerUid = 10638 mShowToOwnerOnly = pacote verdadeiro = ninja.sesame.app.edge appop = SYSTEM_ALERT_WINDOW

O texto destacado ao lado de package = e antes do appop é o (s) nome (s) do pacote do (s) aplicativo (s) atualmente desenhando sobreposição na tela. No seu caso, a saída, incluindo os nomes dos pacotes, será diferente.

Anote os nomes dos pacotes (doravante denominados PKG) e execute este comando:

adb shell am force-stop PKG

Substitua PKG pelo nome do pacote que você anotou. Se você tiver vários nomes de pacotes, repita o comando com um nome de pacote por vez.

O comando interromperia o aplicativo com força e descartaria a sobreposição. Isso deve funcionar. Como alternativa, você pode retirar a permissão de "Desenhar sobre outros aplicativos" (sobreposição de tela em resumo) dos aplicativos usando este comando:

adb shell appops set PKG SYSTEM_ALERT_WINDOW ignore

Mais uma vez, substitua PKG pelo nome do pacote, conforme necessário. Além disso, pode ser necessário repetir o comando force-stop para o PKG. Se você decidir reverter as alterações, substitua ignorar por permitir no comando acima mencionado.

Como alternativa, você pode usar o App Ops para gerenciar as permissões da GUI.

Para saber qual nome do pacote corresponde a qual aplicativo, você pode tentar um aplicativo de código aberto, como Informações sobre aplicativos . Pesquise pelo nome do pacote e você obterá o nome do aplicativo.

Edição concluída

Você realmente não precisa mais ler agora . Estou deixando a solução anterior (ou seja, a seção a seguir) intacta, porque 21 pessoas que votaram acharam isso útil e eu não quero mais estragar tudo.


Uma maneira simples seria descobrir todos os aplicativos com a permissão "desenhar sobre outros aplicativos" e depois selecioná-los dentre os que estão atualmente ativos na tela. Posteriormente, envolva a interrupção forçada desses aplicativos comuns até apontar o aplicativo responsável pela sobreposição ativa.

Enumerar aplicativos com permissão para sobreposição

A permissão exigida por um aplicativo para criar uma sobreposição é android.permission.SYSTEM_ALERT_WINDOW(desenhar sobre outros aplicativos).

Precisamos descobrir todos os aplicativos instalados com a referida permissão. Cabe a você descobrir um método para isso. Minha resposta aqui pode ajudá-lo.

Observe que precisamos dos nomes dos pacotes dos aplicativos e não de seus rótulos.

Escolha cereja nas janelas ativas

Execute o comando

adb shell dumpsys window windows 

Isso fornecerá detalhes sobre o que está causando a exibição de algo na tela, incluindo o nome do componente de um aplicativo que está causando o problema.

A decisão de como você extrairia o nome é sua. Você pode tentar este comando no entanto

adb shell 'dumpsys window windows | grep "Window #"'

Se você receber o erro: 'grep' não é reconhecido como um comando interno ou externo , no Windows, tente este comando alternativo:

adb shell "dumpsys window windows | grep 'Window #'"

Saída de demonstração

Janela nº 4 Janela {42065d50 u0 com.android.phone/com.mediatek.phone.UssdAlertActivity}:
Janela nº 5 Janela {42197468 u0 ginlemon.flowerpro / ginlemon.flower.HomeScreen}:
Janela nº 6 Janela {420fdb58 u0 com.android.systemui.ImageWallpaper}:
Janela nº 7 Janela {421e3b88 u0 com.android.contacts / com.android.contacts.activities.DialtactsActivity}:

Na saída acima, qualquer coisa com êxito u0 e precedente /é o nome do pacote de um aplicativo. Um aplicativo pode ter vários componentes exibindo algo na tela.

Você deve criar uma lista desses nomes de pacotes. Se você tiver o BusyBox instalado , poderá fazer

adb shell 'dumpsys window windows | grep "Window #" | sed -e "s/.*u0 //g" -e "s/\/.*//g" -e "s/}://g"'

De qualquer forma, agora você teria duas listas:

  • Primeira lista contém todos os aplicativos com permissão android.permission.SYSTEM_ALERT_WINDOW.
  • A segunda lista contém todos os aplicativos que exibem ativamente algo na tela.

Compare essas duas listas e selecione aplicativos comuns em ambas as listas. Essa terceira lista constituiria aplicativos com permissão para desenhar sobreposições e atualmente está desenhando uma sobreposição ativa na tela.

Hora de matar

Mate cada um dos aplicativos da terceira lista, um por um, e observe o estado da sobreposição. Você pode usar am force-stop PACKAGE_NAME --user 0ou qualquer outro método que melhor lhe convier. PACKAGE_NAMEé o nome do pacote do aplicativo.

EDIT : Não é necessário matar um aplicativo. Você pode negar ao aplicativo a permissão para passar por cima de outros aplicativos. Use este comando:

adb shell 'appops set PACKAGE SYSTEM_ALERT_WINDOW deny'   # replace PACKAGE with package name of the app

Para reverter as alterações, substitua deny por allow no referido comando e execute-o.

Se você estiver executando o Android Marshmallow, esta resposta de Andrew T. pode ser usada.

Nota: O comando acima mencionado foi testado com sucesso no Android 5.1.1 e 6.0.1 (compilações do CM). Também é possível que o comando funcione no Android 5.0.x, mas não posso garantir . A execução desse comando na versão Android lançada antes do Lollipop causaria falha.

Como muitas vezes a sobreposição é perceptível, ela desaparece instantaneamente no momento em que o aplicativo que o causa é eliminado; portanto, você saberia qual aplicativo estava causando essa sobreposição.

Aplicativos para aplicativos

Originalmente sugerido por Izzy, você pode usar um aplicativo com a funcionalidade de listar permissões concedidas aos aplicativos instalados, para destacar os aplicativos com a permissão "desenhar sobre outros aplicativos". Você pode pesquisar esse aplicativo por conta própria ou usar o verificador de permissão da lista mantido por Izzy em seu site.

Você também precisaria de um gerente de processo / aplicativo para forçar / interromper / matar alguns processos. Eu recomendo o OS Monitor, mas você tem a liberdade de usar qualquer aplicativo competente. Veja aplicativos relacionados em Informações do sistema .

Apenas para fins de demonstração

Tentei o Advanced Permission Manager para listar aplicativos com permissão para "desenhar sobre outros aplicativos". Depois, mudei para o OS Monitor para ver os aplicativos sendo executados em primeiro e segundo plano. Combinei a saída dos dois aplicativos e parei individualmente os aplicativos comuns em ambos. Você pode interromper um processo de dentro do Monitor do SO, portanto, não é necessário alternar para as configurações do aplicativo.

(Clique na imagem para ampliar)

IMG: IMG: IMG:

Senhor do Fogo
fonte
11
Muito obrigado Firelord. Eu aprendi muito com a sua postagem!
precisa saber é o seguinte
11
Obrigado, a lista de janelas foi um salva-vidas quando eu estava tentando encontrar um aplicativo de adware que parecia capaz de desenhar tudo ... sem ter a permissão "desenhar outros aplicativos".
Craig Ringer
3

Se você estiver usando o Android 6.0 Marshmallow, poderá usar o gerenciador de permissões nativo.

De um artigo sobre BGR ,

O Android 6.0 Marshmallow possui muitos novos recursos altamente esperados e um deles é algo que os usuários do iPhone têm há anos: permissões granulares de aplicativos. A Phone Arena instalou a versão mais recente do desenvolvedor do Marshmallow e publicou algumas dicas fantásticas para ajudar os usuários do Android a garantir que estão apenas compartilhando dados com aplicativos que eles desejam compartilhar especificamente.

Para acessar o recurso de gerenciamento de permissões do Marshmallow, abra o menu Configurações e clique na seção Aplicativos. A partir daí, clique no ícone de roda dentada que lhe dará a opção de acessar o gerenciador de permissões de aplicativos.

Para listar os aplicativos que podem desenhar sobre outros aplicativos, vá para Configurações - Aplicativos - Avançado (menu com ícone de engrenagem) - Passe sobre outros aplicativos .

Você também pode ativar / desativar o recurso temporariamente tocando no aplicativo e alternar para "Permitir desenho sobre outros aplicativos".

Gerenciador de permissões do Android M

Imagem cortesia de Sebastiano Gottardo no Medium

Andrew T.
fonte
11
Para mim, o Avançado (menu com ícone de roda dentada) estava ausente, mas está no ícone superior / direito do dotdotdot; configurações de aplicativos.
AnneTheAgile 10/07
3

Muito obrigado @Firelord! Finalmente encontrei o aplicativo que está me impedindo de instalar apk e executar backups adb.

Para mim, achei que era um aplicativo chamado Battery MixLeia para ver o que fiz e como o fiz.

https://play.google.com/store/apps/details?id=jp.smapho.battery_mix

Muitas pessoas tiveram problemas com a instalação de apk e não conseguiram pressionar 'Instalar'. Todas as respostas que pude encontrar foram principalmente para exibir aplicativos de escurecimento, tingimento e economia de energia. Como não usei nenhum ou removi todos os aplicativos semelhantes, estava lutando para descobrir o que estava acontecendo e qual aplicativo era o culpado. E finalmente! Após um comando simples e uma pesquisa rápida, ele foi resolvido: D

O aplicativo ofensivo Battery Mixé um aplicativo simples de monitoramento da bateria, que tinha a função que eu exibia uma linha fina na parte superior da tela para mostrar o estado do nível da bateria (um ótimo aplicativo pequeno).

Portanto, para diagnosticar, usei um comando Firelord(acima) para despejar um arquivo de texto e depois procurar o aplicativo que estava causando o sistema Android para impedir que eu clicasse no botão Instalar.

Executar comando do PC

adb shell dumpsys window windows > dumpsys-windows.txt

Procurar por

SYSTEM_ALERT_WINDOW

Para encontrar qualquer aplicativo incorreto, procurei a string acima

O que me deu a linha:

mOwnerUid=10129 mShowToOwnerOnly=true package=jp.smapho.battery_mix appop=SYSTEM_ALERT_WINDOW

(Veja o upload da imagem para a seção do arquivo de texto) insira a descrição da imagem aqui

imediatamente pude reconhecer a qual aplicativo estava se referindo: jp.smapho. battery_mix

Portanto, agora eu sei como matar esse aplicativo sempre que planejar carregar de lado ou fazer backups adb.

mitchbw
fonte
-1

Para Android Marshmallow e Oxygen 3.0.2, pop-up Desativar layout da tela

Vá para Aplicativos, configure Aplicativos e selecione Desenhar sobre outros aplicativos.

Vá e selecione o aplicativo para desativá-lo, para que o aplicativo seja desbloqueado da persmissão de layout da tela. e o aplicativo pode obter permissões diretamente

Acesse o aplicativo e as permissões respectivas e ative as permissões desejadas.

Apreciar

Raj

DILLIRAJ PD
fonte
2
Toda essa informação já está na resposta de Andrew T. Você não precisa postar uma nova resposta para repetir as mesmas instruções. Guardar o seu esforço para perguntas que não são respondidas ainda :-)
Dan Hulme