3 votos

¿Existe una forma nativa de encontrar todas las aplicaciones instaladas que tienen acceso a una función del teléfono?

¿Existe una forma nativa de filtrar las aplicaciones instaladas por permiso (características a las que tienen acceso)? Por ejemplo, filtrar todas las aplicaciones que tienen acceso a la cámara.

Buscando eliminar todas las aplicaciones que tienen acceso a la cámara sin tener que ir manualmente a través de cada aplicación instalada y comprobar sus permisos...

Versión de Android: KitKat y más reciente

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?

5voto

Firelord Puntos 161

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.

2voto

Acron Puntos 503

Puedes utilizar esta aplicación, App Permission Watcher Muestra exactamente qué aplicación tiene permisos y qué función. enter image description here

0 votos

Excelente App, y coherente con sus principios (Esta aplicación no requiere permisos especiales para ejecutarse.) Pero desafortunadamente bastante anticuada, y sin mantenimiento.

0voto

Arch Puntos 54

Por desgracia, no hay ninguna forma nativa, ni para KitKat ni para Lollipop (no lo he intentado para Marshmallow). No hay una aplicación especial del sistema, ni un código secreto, nada. Las únicas dos maneras (para un usuario final) de acceder a la información de una aplicación son o bien utilizando la línea de comandos, que otra respuesta ya cubrió o mediante el uso de la aplicación Configuración.

Dado que la aplicación Ajustes no hace lo que quieres y la línea de comandos parece demasiado aquí, tu mejor opción es utilizar una aplicación de terceros para ese fin.

Ten en cuenta que incluso Google Play Store no lista las aplicaciones instaladas en función de los permisos.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X