3 votes

Existe-t-il un moyen natif de trouver toutes les applications installées qui ont accès à une fonction du téléphone ?

Existe-t-il un moyen natif de filtrer les applications installées par permission (fonctions auxquelles elles ont accès) ? Par exemple, filtrer toutes les applications qui ont accès à l'appareil photo.

Vous cherchez à supprimer toutes les applications qui ont accès à la caméra sans passer manuellement par chaque application installée et vérifier ses autorisations....

Version Android : KitKat et plus récent

5voto

Firelord Points 23064

Si jamais vous décidez d'opter pour une méthode en ligne de commande, vous pouvez essayer mon approche.

Dépendances

  • Nécessite adb à configurer dans le PC.

  • Nécessite busybox binaire. Si l'appareil est enraciné, installez Busybox app. Sinon, téléchargez le binaire busybox à partir de source officielle et renomme le binaire en busybox compatible avec Linux autorisation d'exécution sur ce binaire pour tout le monde et le déplacer dans le dispositif en utilisant

    adb push LOCAL_FILE /data/local/tmp/   # LOCAL_FILE is the file path where busybox binary is located in PC
  • Nécessite aapt binaire. Si vous utilisez un CM ou une ROM dérivée, ignorez cette exigence. Sinon, pour Android 4.x, vous pouvez envisager de télécharger le binaire à partir de aquí et renomme le binaire en aapt compatible avec Linux autorisation d'exécution sur ce binaire pour tout le monde et le déplacer dans le dispositif en utilisant

    adb push LOCAL_FILE /data/local/tmp/   # LOCAL_FILE is the file path where busybox binary is located in PC . 

    Utilisateurs d'Android 5.x : demandez de l'aide à Google.

C'est mon petit 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

Enregistrez le script en PC dans un fichier nommé perm_script.sh et le déplacer dans /sdcard en utilisant

adb push LOCAL_FILE /sdcard/   # LOCAL_FILE is the  path where you saved that file into PC

Exécutez ce fichier

adb shell sh /sdcard/perm_script.sh PERMISSION   # replace PERMISSION with the android permission for which apps are to be shown

Plus le nombre d'applications installées dans le système est important, plus le temps d'exécution de la commande sera long. Dans mon appareil, cela a pris environ 40 secondes.

Sortie démo :

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)

One-liner

Vous pouvez réduire le script à une seule ligne :

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

Inconvénients :

  • Pas grand-chose, sauf que vous avez besoin d'un système d'exploitation *nix. Cygwin peut fonctionner pour MS-Windows.
  • Vous ne verrez pas les étiquettes mais seulement les noms des paquets.

    (Pour obtenir le label de l'application en utilisant le nom de son paquetage, utilisez la méthode GAThrawn <a href="https://android.stackexchange.com/a/19866/96277">réponse </a>- fonctionne si seule l'application est disponible dans le Play Store ; utilisez la méthode d'Izzy <a href="https://android.stackexchange.com/a/115664/96277">réponse </a>- fonctionne pour toute application installée).

Bénéfice : temps d'exécution réduit à ~50%.


Enlèvement en vrac

Utilisez cette commande pour supprimer ces applications en masse.

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

Attendez-vous à ce qu'il signale un échec pour les applications système.


Afficher les informations sur l'application pour tous

La commande suivante affichera la page d'information sur les applications ayant l'autorisation. 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

Le drapeau --activity-multiple-task est important de noter. C'est la raison pour laquelle chaque page d'information sur une application est présentée comme une nouvelle tâche pour la même activité. En fait, la page d'information de chaque application ayant l'autorisation fed Android est accessible sous les activités récentes et une fois que vous fermez la page d'information d'une application en utilisant le bouton Retour, la page d'information d'une autre application s'affiche parce qu'elles ont été ouvertes consécutivement.

De cette façon, vous pouvez passer en revue l'application ayant la permission d'utiliser l'appareil photo et prendre les mesures qui s'imposent, qu'il s'agisse de la désinstaller ou de la désactiver.

2voto

Acron Points 503

Vous pouvez utiliser cette application, App Permission Watcher Il montre exactement quelle application a des permissions et quelle fonction. enter image description here

0voto

Malheureusement, il n'existe pas de méthode native, ni pour KitKat ni pour Lollipop (je n'ai pas essayé pour Marshmallow). Pas d'application système spéciale, pas de code secret, rien. Les deux seules façons (pour un utilisateur final) d'accéder aux informations d'une application sont soit en utilisant la ligne de commande, ce qu'une autre réponse a déjà couvert, soit en utilisant l'application Settings.

Puisque l'application Settings ne fait pas ce que vous voulez et que la ligne de commande semble trop importante ici, votre meilleure chance est d'utiliser une application tierce à cette fin.

Veuillez noter que même le Google Play Store ne répertorie pas les applications installées en fonction des autorisations.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X