Comme aucune version d'Android n'est mentionnée dans la question, je propose une réponse basée sur la ligne de commande pour Android version 4.2.1 et supérieure. Il s'agit idéalement d'une solution indépendante de l'OS, c'est-à-dire de l'OS sur PC.
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 .
Pour les utilisateurs d'Android 5.x, demandez de l'aide à Google.
Voici mon petit script qui fait la magie :
#!/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 not set
\[\[ -x /data/local/tmp/busybox \]\] && busybox=/data/local/tmp/busybox || { \[\[ -x /system/xbin/busybox \]\] && busybox=/system/xbin/busybox || { printf "busybox binary not found or executable permission not set. Exiting\\n" && 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 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 || { printf "aapt binary not found or executable permission not set. Exiting\\n" && exit; }; }; }
# 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
# For each package name in the output we just saved, get the app's label using $path and $label, print a line and then finally list the permissions granted to the app
while read line; do
path=$(pm path $line | $busybox sed 's/^package://g');
label=$($aapt d badging $path | $busybox grep 'application: label=' | $busybox cut -d "'" -f2);
$busybox printf "Permissions for app $label having package name $line\\n";
dumpsys package $line | $busybox sed -e '1,/grantedPermissions:/d' -e '/^\\s\*$/,$d' | $busybox sort;
$busybox printf "\\n";
done < /sdcard/packages.txt
Sortie démo :
Permissions for app DisableService having package name cn.wq.disableservice
android.permission.READ\_EXTERNAL\_STORAGE
android.permission.WRITE\_EXTERNAL\_STORAGE
Permissions for app Indecent Xposure having package name co.vanir.indecentxposure
android.permission.RECEIVE\_BOOT\_COMPLETED
Permissions for app Tags having package name com.android.apps.tag
android.permission.CALL\_PHONE
android.permission.NFC
android.permission.READ\_CONTACTS
android.permission.WAKE\_LOCK
android.permission.WRITE\_SECURE\_SETTINGS
...
...
Permissions for app Themes Provider having package name 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
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 > OUTPUT_FILE # OUTPUT_FILE is the path where you want to save the final output
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 trois minutes.
En rapport : Existe-t-il un moyen natif de trouver toutes les applications installées qui ont accès à une fonction du téléphone ?