Respuestas:
Use aplicaciones de mercado como Permission Watchdog o Permissions . Además, hay varios otros.
Otra aplicación que terminé usando en lugar de Permisos es Permisos RL . Prefiero la interfaz En cuanto a cuál funciona mejor, no lo sé.
Las aplicaciones compatibles con permisos enumerarán las aplicaciones instaladas por orden de los requisitos de permisos más exigentes a los menos exigentes. (Sin embargo, en realidad no rastrea ni audita ni ajusta su comportamiento).
Dado que no se menciona ninguna versión de Android en la pregunta, propongo una respuesta basada en la línea de comandos relevante para la versión de Android 4.2.1 y superior. Idealmente, es una solución independiente del sistema operativo, sistema operativo en PC, es decir.
Requiere busybox binario. Si el dispositivo está rooteado, instale la aplicación Busybox . De lo contrario, descargue el binario busybox de la fuente oficial , cambie el nombre del binario a busybox , configure el permiso ejecutable compatible con Linux en ese binario para todos y muévalo al dispositivo usando
adb push LOCAL_FILE /data/local/tmp/ # LOCAL_FILE is the file path where busybox binary is located in PC
Requiere aapt binary. Si está ejecutando un CM o su ROM derivada, ignore este requisito. De lo contrario, para Android 4.x, puede considerar descargar el binario desde aquí , cambiar el nombre del binario a aapt , configurar el permiso ejecutable compatible con Linux en ese binario para todos y moverlo al dispositivo usando
adb push LOCAL_FILE /data/local/tmp/ # LOCAL_FILE is the file path where busybox binary is located in PC .
Para usuarios de Android 5.x, solicite ayuda a Google.
Aquí está mi pequeño guión que hace la magia:
#! / system / bin / sh # Compruebe si el binario busybox existe en / data / local / tmp / o / system / xbin. Establezca la ruta del binario detectado en la variable busybox o salga si el archivo no existe o el permiso ejecutable no está configurado [[-x / data / local / tmp / busybox]] && busybox = / data / local / tmp / busybox || {[[-x / system / xbin / busybox]] && busybox = / system / xbin / busybox || {printf "binario busybox no encontrado o permiso ejecutable no establecido. Saliendo \ n" && salir; }; } # Compruebe si el binario aapt existe en / data / local / tmp o / system / bin o / system / xbin. Establezca la ruta del binario detectado en la variable aapt o salga si el archivo no existe o el permiso ejecutable no está establecido [[-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 binario no encontrado o permiso ejecutable no establecido. Saliendo \ n" && exit; }; }; } # Enumere el nombre del paquete de todas las aplicaciones instaladas y guárdelas en el archivo packages.txt en / sdcard pm lista de paquetes | $ busybox sed 's / ^ paquete: // g' | $ busybox sort -o /sdcard/packages.txt # Para cada nombre de paquete en la salida que acabamos de guardar, obtenga la etiqueta de la aplicación usando $ path y $ label, imprima una línea y finalmente enumere los permisos otorgados a la aplicación mientras lee la línea; hacer ruta = $ (pm ruta $ línea | $ busybox sed 's / ^ paquete: // g'); etiqueta = $ ($ aapt d badging $ ruta | $ busybox grep 'aplicación: etiqueta =' | $ busybox corte -d "'" -f2); $ busybox printf "Permisos para la aplicación $ label que tiene el nombre del paquete $ line \ n"; paquete dumpsys $ line | $ busybox sed -e '1, / grantPermissions: / d' -e '/ ^ \ s * $ /, $ d' | $ busybox sort; $ busybox printf "\ n"; hecho </sdcard/packages.txt
Salida de demostración:
Permisos para la aplicación DisableService que tiene el nombre del paquete cn.wq.disableservice android.permission.READ_EXTERNAL_STORAGE android.permission.WRITE_EXTERNAL_STORAGE Permisos para la aplicación Indecent Xposure que tiene el nombre del paquete co.vanir.indecentxposure android.permission.RECEIVE_BOOT_COMPLETED Permisos para etiquetas de aplicaciones que tienen el nombre del paquete com.android.apps.tag android.permission.CALL_PHONE android.permission.NFC android.permission.READ_CONTACTS android.permission.WAKE_LOCK android.permission.WRITE_SECURE_SETTINGS ... ... Permisos para el proveedor de temas de aplicaciones que tiene el nombre del paquete 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
Guarde el script en la PC en un archivo llamado perm_script.sh
y muévalo a / sdcard usando
adb push LOCAL_FILE /sdcard/ # LOCAL_FILE is the path where you saved that file into PC
Ejecute ese archivo
adb shell sh /sdcard/perm_script.sh > OUTPUT_FILE # OUTPUT_FILE is the path where you want to save the final output
Cuanto mayores sean las aplicaciones instaladas en el sistema, mayor será el tiempo para que el comando complete la ejecución. En mi dispositivo, me llevó unos tres minutos.
Relacionado: ¿Existe una forma nativa de encontrar todas las aplicaciones instaladas que tienen acceso a una función del teléfono?