android.hardware.usb.host.xml
fichier - situé sous /vendor/etc/permissions/
ou /system/etc/permissions/
avant Treble - contient feature name="android.hardware.usb.host"
qui indique que le périphérique peut communiquer avec des périphériques USB en tant qu'hôte USB. Cette fonctionnalité est évaluée par PackageManager (ainsi que d'autres fonctionnalités logicielles / matérielles) et utilisée par Google Play pour filtrer les applications (in)compatibles en fonction de la valeur dans AndroidManifest.xml. Voir les détails ici.
Également, si le périphérique ne prend pas en charge le mode hôte USB, le service UsbHostManager n'est pas démarré, donc des applications comme celle-ci qui utilisent les API hôte USB ne peuvent pas se connecter aux périphériques USB. Cependant, tout périphérique connecté est toujours détecté par le noyau et apparaît sous /sys
et /dev
.
Pour confirmer si le périphérique prend en charge le mode hôte USB:
~$ pm list features | grep usb.host
feature:android.hardware.usb.host
~$ dumpsys usb | grep host_manager
host_manager={
Ces lignes ne devraient pas apparaître après avoir supprimé le fichier android.hardware.usb.host.xml
.
Cependant depuis Android 6 les périphériques de stockage USB tels qu'une clé USB sont gérés par vold
, qui ne dépend pas de la fonctionnalité discutée ci-dessus. vold
écoute le noyau via un socket netlink pour l'événement de dispositif de bloc uevent
(1) et fait correspondre cela avec une entrée dans fstab
(2). Ensuite, il crée des nœuds de disque et de partition dans /dev/block/vold/
(3), vérifie le système de fichiers pour les erreurs et monte dans /mnt/media_rw/
(émule également les cartes SD dans /mnt/runtime/
) (4). Ensuite, ExternalStorageProvider
(un fournisseur de contenu) est déclenché ce qui accorde aux applications l'accès URI au stockage OTG via SAF ou Scoped Directory Access.
Donc, pour désactiver le montage automatique des périphériques de stockage USB par vold
, vous devez supprimer l'entrée correspondante de fstab
comme indiqué ici:
/devices/*/xhci-hcd.0.auto/usb* auto auto defaults voldmanaged=usb:auto
fstab
se trouve sous /odm/etc/
ou /vendor/etc/
. Avant Treble, il était dans rootfs (/
). Voir les détails dans cette réponse.