Respostas:
Use aplicativos de mercado como Permission Watchdog ou Permissions . Além disso, existem vários outros.
Outro aplicativo que acabei usando em vez de Permissões é RL Permissions . Eu prefiro a interface. Quanto a qual deles funciona melhor, eu não sei.
o aSpotCat também é um ótimo aplicativo para auditoria de permissões.
Os aplicativos amigáveis para permissão listarão os aplicativos instalados pela ordem dos requisitos de permissão mais exigentes a menos exigentes. (Na verdade, ele não rastreia, audita ou ajusta o comportamento deles.)
Como nenhuma versão do Android é mencionada na pergunta, proponho uma resposta baseada em linha de comando relevante para a versão 4.2.1 e superior do Android. Idealmente, é uma solução independente de SO, SO no PC.
Requer binário do busybox . Se o dispositivo estiver enraizado, instale o aplicativo Busybox . Caso contrário, baixe o binário do busybox da fonte oficial , renomeie o binário para busybox , defina a permissão executável compatível com Linux nesse binário para todos e mova-o para o dispositivo usando
adb push LOCAL_FILE /data/local/tmp/ # LOCAL_FILE is the file path where busybox binary is located in PC
Requer aapt binário. Se você estiver executando um CM ou sua ROM derivada, ignore esse requisito. Caso contrário, no Android 4.x, você pode baixar o binário daqui , renomear o binário para aapt , definir permissão executável compatível com Linux nesse binário para todos e movê-lo para o dispositivo usando
adb push LOCAL_FILE /data/local/tmp/ # LOCAL_FILE is the file path where busybox binary is located in PC .
Para usuários do Android 5.x, solicite assistência ao Google.
Aqui está o meu pequeno script que faz a mágica:
#! / system / bin / sh # Verifique se o binário do busybox existe em / data / local / tmp / ou / system / xbin. Defina o caminho do binário detectado na variável busybox ou saia se o arquivo não existir ou se a permissão executável não estiver definida [[-x / data / local / tmp / busybox]] && busybox = / data / local / tmp / busybox || {[[-x / system / xbin / busybox]] && busybox = / system / xbin / busybox || {printf "binário do busybox não encontrado ou permissão executável não definida. Saindo \ n" && exit; }; } # Verifique se o binário aapt existe em / data / local / tmp ou / system / bin ou / system / xbin. Defina o caminho do binário detectado na variável aapt ou exit se o arquivo não existir ou se a permissão executável não estiver definida [[-x / data / local / tmp / aapt]] && aapt = / data / local / tmp / aapt || {[[-x / system / bin / aapt]] && aapt = / system / bin / aapt || {[[-x / system / xbin / aapt]] && aapt = / system / xbin / aapt || {printf "aapt binário não encontrado ou permissão executável não definida. Saindo \ n" && exit; }; }; } # Liste o nome do pacote de todos os aplicativos instalados e salve-os no arquivo packages.txt em / sdcard pacotes da lista pm | pacote $ busybox sed '/ ^: // g' | $ busybox sort -o /sdcard/packages.txt # Para cada nome de pacote na saída que acabamos de salvar, obtenha o rótulo do aplicativo usando $ path e $ label, imprima uma linha e, finalmente, liste as permissões concedidas ao aplicativo enquanto lê linha; Faz caminho = $ (pm caminho $ linha | $ pacote do busybox sed / ^: // g '); label = $ ($ aapt d crachá $ path | $ busybox grep 'aplicativo: label =' | $ busybox cut -d "'" -f2); $ busybox printf "Permissões para o aplicativo $ label com o nome do pacote $ line \ n"; pacote dumpsys $ line | $ busybox sed -e '1, / grantPermissions: / d' -e '/ ^ \ s * $ /, $ d' | ordenação $ busybox; $ busybox printf "\ n"; done </sdcard/packages.txt
Saída de demonstração:
Permissões para o aplicativo DisableService com o nome do pacote cn.wq.disableservice android.permission.READ_EXTERNAL_STORAGE android.permission.WRITE_EXTERNAL_STORAGE Permissões para o aplicativo Indposent Xposure com o nome do pacote co.vanir.indecentxposure android.permission.RECEIVE_BOOT_COMPLETED Permissões para tags de aplicativo com o nome do pacote com.android.apps.tag android.permission.CALL_PHONE android.permission.NFC android.permission.READ_CONTACTS android.permission.WAKE_LOCK android.permission.WRITE_SECURE_SETTINGS ... ... Permissões para o provedor de temas de aplicativos com o nome do pacote org.cyanogenmod.themes.provider android.permission.ACCESS_NOTIFICATIONS android.permission.ACCESS_THEME_MANAGER android.permission.INTERNET android.permission.READ_THEMES android.permission.WRITE_SECURE_SETTINGS android.permission.WRITE_SETTINGS android.permission.WRITE_THEMES
Salve o script no PC em um arquivo chamado perm_script.sh
e mova-o para / sdcard usando
adb push LOCAL_FILE /sdcard/ # LOCAL_FILE is the path where you saved that file into PC
Execute esse arquivo
adb shell sh /sdcard/perm_script.sh > OUTPUT_FILE # OUTPUT_FILE is the path where you want to save the final output
Quanto maiores os aplicativos instalados no sistema, maior será o tempo para o comando concluir a execução. No meu dispositivo, demorou cerca de três minutos.
Relacionado: Existe uma maneira nativa de encontrar todos os aplicativos instalados que têm acesso a um recurso de telefone?