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.