En caso de que alguna vez decida ir con una forma de línea de comandos, puede probar mi enfoque.
Dependencias
-
Requiere adb para que se configure en el PC.
-
Requiere busybox binario. Si el dispositivo está rooteado, instale Busybox app. Si no, descargue el binario de busybox desde fuente oficial , cambie el nombre del binario a busybox , establecer la compatibilidad con Linux permiso de ejecución 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
-
Requiere aapt binario. Si estás ejecutando una ROM de CM o sus derivados, entonces ignora este requisito. De lo contrario, para Android 4.x, puedes considerar la descarga del binario desde aquí , cambie el nombre del binario a aapt , establecer la compatibilidad con Linux permiso de ejecución 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 .
Usuarios de Android 5.x: pedir ayuda a Google.
Este es mi pequeño script:
#!/system/bin/sh
# Check if the busybox binary exists under /data/local/tmp/ or /system/xbin. Set the detected binary's path into the variable busybox or exit if file doesn't exist or executable permission is not set
\[\[ -x /data/local/tmp/busybox \]\] && busybox=/data/local/tmp/busybox || { \[\[ -x /system/xbin/busybox \]\] && busybox=/system/xbin/busybox || { date +'busybox binary not found or executable permission is not set. Exiting' && exit; }; }
# Check if the aapt binary exists under /data/local/tmp or /system/bin or /system/xbin. Set the detected binary's path into the variable aapt or exit if file doesn't exist or executable permission is not set
\[\[ -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 || { date +'aapt binary not found or executable permission is not set. Exiting' && exit; }; }; }
! \[\[ "$1" == +(\[0-9a-zA-Z.\_\]) \]\] && { $busybox printf 'Permission field should not be empty or contain anything beyond these characters: a-zA-Z0-9.\_' && exit; } || perm=$1;
# List package name of all the installed apps and save them in the file packages.txt under /sdcard
pm list packages | $busybox sed 's/^package://g' | $busybox sort -o /sdcard/packages.txt
$busybox printf "\\nList of apps with permission $perm:\\n\\n";
# From the output we just saved, take each line (package name) and see whether the package has the said permission. Print the app's label and package name when positive. Before printing everything we're also sorting the lines in A-Za-z order. Sorting is not mandatory.
while read line; do
\[\[ \`dumpsys package $line | grep "$perm"\` \]\] && perm=1 || perm=0;
if \[\[ $perm == 1 \]\]; then
path=$(pm path $line | $busybox sed 's/^package://g');
label=$($aapt d badging $path 2>&1 | $busybox sed -ne '/application: label=/p' | $busybox cut -d "'" -f2);
$busybox printf "$label ($line)\\n";
fi
done < /sdcard/packages.txt | sort
Guarda el script en PC en un archivo llamado perm_script.sh
y moverlo a /sdcard usando
adb push LOCAL_FILE /sdcard/ # LOCAL_FILE is the path where you saved that file into PC
Ejecutar ese archivo
adb shell sh /sdcard/perm_script.sh PERMISSION # replace PERMISSION with the android permission for which apps are to be shown
Cuanto mayor sea el número de aplicaciones instaladas en el sistema, mayor será el tiempo de ejecución del comando. En mi dispositivo, tardó unos 40 segundos.
Salida de demostración:
List of apps with permission android.permission.CAMERA:
AirDroid (com.sand.airdroid)
Android Live Wallpapers (com.android.wallpaper)
Barcode Scanner (com.google.zxing.client.android)
Camera (com.android.camera2)
CellConnectionService (com.mediatek.CellConnService)
Chrome (com.android.chrome)
...
Webkey (com.webkey)
YGPS (com.mediatek.ygps)
YouTube (com.google.android.youtube)
Una sola línea
Puedes reducir el script a una línea:
adb shell pm list packages | tr -d '\\r'| sed 's/package://g' | while read line; do \[\[ \`adb shell dumpsys package $line | grep 'android.permission.CAMERA'\` \]\] && echo "$line"; done
Inconvenientes:
Beneficio: el tiempo de ejecución se reduce a un ~50%.
Eliminación de los volúmenes
Utilice este comando para eliminar esas aplicaciones en bloque
adb shell pm list packages | tr -d '\\r'| sed 's/package://g' | while read line; do \[\[ \`adb shell dumpsys package $line | grep 'android.permission.CAMERA'\` \]\] && echo "Removing $line" && adb uninstall $line; done
Espera que informe de un fallo en las aplicaciones del sistema.
Mostrar información de la aplicación para todos
El siguiente comando mostrará la página de información de las aplicaciones que tienen el permiso android.permission.CAMERA
adb shell pm list packages | tr -d '\\r'| sed 's/package://g' | while read line; do \[\[ \`adb shell dumpsys package $line | grep 'android.permission.CAMERA'\` \]\] && printf "Launching App info page of $line\\n" && adb shell am start -d "package:$line" -n com.android.settings/.applications.InstalledAppDetails --activity-multiple-task && sleep 1.5; done
La bandera --activity-multiple-task
es importante tener en cuenta. Es debido a que cada página de información de la aplicación para una aplicación se mostraría como una nueva tarea para la misma actividad. En esencia, se puede acceder a la página de información de la aplicación para cada aplicación que tenga el permiso de Android alimentado bajo las actividades recientes y una vez que se cierra la página de información de la aplicación utilizando el botón Atrás, la página de información de la aplicación para otra aplicación se mostraría porque se abrieron consecutivamente.
De esta manera, puede revisar la aplicación que tiene el permiso de la Cámara y tomar las acciones en él, ya sea Desinstalar o Desactivar.
0 votos
@Firelord, Estaba buscando algo que se puede hacer en la interfaz de usuario fácilmente. Es decir, por un usuario general...
0 votos
Me imaginaba que Google Play tendría algo que te permitiera filtrar las aplicaciones que has instalado por permisos...
1 votos
Lo siento, no me había dado cuenta. ¿Estaría bien una recomendación de aplicación si no la línea de comandos?
1 votos
¿Por casualidad tienes Android rooteado? XPrivacy puede hacer fácilmente el trabajo aquí. Si no, vea si aSpotCat o Gestor avanzado de permisos obras. También puedes consultar la lista de Izzy aquí para aplicaciones relevantes.
0 votos
@Firelord ¡Gracias! Supongo que una aplicación de permisos es mi mejor apuesta. También voy a tratar de enviar una solicitud de función a Google Play ... parece que esto debería ser una opción básica