Vous pouvez accorder ou révoquer uniquement les autorisations d'exécution (introduites dans Android 6 avec niveau de protection : dangerous
) - soit à partir du CLI ( adb shell
) ou GUI (Paramètres). Depuis l'aide du gestionnaire de paquets :
~$ pm
...
grant [--user USER_ID] PACKAGE PERMISSION
revoke [--user USER_ID] PACKAGE PERMISSION
These commands either grant or revoke permissions to apps. The permissions
must be declared as used in the app's manifest, be runtime permissions
(protection level dangerous), and the app targeting SDK greater than Lollipop MR1.
...
Pour obtenir une liste de tous les dispositifs sur le périphérique dangerous
permissions :
~$ pm list permissions -g -d | awk -F: '/permission:/ {print $2}'
Ou obtenez directement de la source Android. Cette liste exclut toutes les permissions dangereuses définies par des paquets non-AOSP, par exemple celles fournies par les services Google Play. wget
est une applet busybox, ou obtenir un binaire statique :
~$ wget -qO- https://raw.githubusercontent.com/aosp-mirror/platform_frameworks_base/android-9.0.0_r52/core/res/AndroidManifest.xml | grep -E 'protectionLevel=|<permission android:name=' | grep -B1 'protectionLevel=.*dangerous' | awk -F'"' '/permission/ {print $2}'
Ou pour éviter tout résultat erroné, préformatez .xml
(vous devez obtenir xmllint
ou un outil similaire) :
~$ wget -qO- https://raw.githubusercontent.com/aosp-mirror/platform_frameworks_base/android-9.0.0_r52/core/res/AndroidManifest.xml | xmllint --format - | grep 'protectionLevel=.*dangerous' | grep -o 'permission android:name=[^ ]*' | cut -d'"' -f2
En plus de dangerous
les permissions, il est également possible de grant
o deny
o ignore
certaines des permissions spéciales indiquées ci-dessous :
Paramètres → Apps et notifications → Avancé → Accès aux applications spéciales .
Ceux-ci ne sont pas gérés directement par le gestionnaire de paquets, mais appops
- un cadre de contrôle des permissions secondaires. Il s'agit des éléments suivants signature
qui ne peuvent être accordées qu'aux applications système. Sur Android 9 :
~$ wget -qO- https://raw.githubusercontent.com/aosp-mirror/platform_frameworks_base/android-9.0.0_r52/core/res/AndroidManifest.xml | grep -E 'protectionLevel=|<permission android:name=' | grep -B1 'protectionLevel=.*appop' | awk -F'"' '/permission/ {print $2}'
android.permission.MANAGE_IPSEC_TUNNELS
android.permission.SYSTEM_ALERT_WINDOW
android.permission.WRITE_SETTINGS
android.permission.REQUEST_INSTALL_PACKAGES
android.permission.PACKAGE_USAGE_STATS
android.permission.ACCESS_NOTIFICATIONS
android.permission.INSTANT_APP_FOREGROUND_SERVICE
Leurs correspondants appops
les opérations ont noms similaires avec des différences mineures. Aussi quelques OPs dépendent de d'autres OP. Pour obtenir une liste complète des opérations que vous pouvez lire ou paramétrer par la ligne de commande :
~$ wget -qO- https://raw.githubusercontent.com/aosp-mirror/platform_frameworks_base/android-9.0.0_r52/core/java/android/app/AppOpsManager.java | awk '/int OP_/ {print $5}'
Pour plus de détails sur la façon d'utiliser appops
voir des exemples de VIBRATE
, REQUEST_INSTALL_PACKAGES
, COARSE_LOCATION
/ FINE_LOCATION
y BOOT_COMPLETED
/ RUN_IN_BACKGROUND
.