android.hardware.usb.host.xml
archivo - ubicado bajo /vendor/etc/permissions/
o /system/etc/permissions/
antes de Treble - contiene feature name="android.hardware.usb.host"
que indica que el dispositivo puede comunicarse con dispositivos USB como el host USB. Esta característica es evaluada por PackageManager (junto con otras características de software / hardware) y utilizada por Google Play para filtrar aplicaciones (in)compatibles en función del valor en AndroidManifest.xml. Ver detalles aquí.
También, si el dispositivo no es compatible con el modo host USB, el servicio UsbHostManager no se inicia, por lo que aplicaciones como esta que utilizan APIs de host USB no pueden conectarse a dispositivos USB. Sin embargo, cualquier dispositivo conectado sigue siendo detectado por el kernel y aparece en /sys
y /dev
.
Para confirmar si el dispositivo es compatible con el modo host USB:
~$ pm list features | grep usb.host
feature:android.hardware.usb.host
~$ dumpsys usb | grep host_manager
host_manager={
Estas líneas no deben aparecer después de eliminar el archivo android.hardware.usb.host.xml
.
Sin embargo, desde Android 6 los dispositivos de almacenamiento USB como una memoria USB son manejados por vold
, el cual no depende de la característica mencionada anteriormente. vold
escucha al kernel a través de un socket netlink para eventos de dispositivo de bloque uevent
(1) y lo relaciona con alguna entrada en fstab
(2). Luego crea nodos de disco y partición en /dev/block/vold/
(3), verifica el sistema de archivos en busca de errores y los monta en /mnt/media_rw/
(también emula tarjetas SD en /mnt/runtime/
) (4). Después de eso, se activa ExternalStorageProvider
(un proveedor de contenido) que otorga a las aplicaciones acceso URI al almacenamiento OTG a través de SAF o Acceso a Directorios Acotado.
Por lo tanto, para desactivar el montaje automático de dispositivos de almacenamiento USB por vold
, debes eliminar la entrada correspondiente de fstab
como se indica aquí:
/devices/*/xhci-hcd.0.auto/usb* auto auto defaults voldmanaged=usb:auto
fstab
se encuentra en /odm/etc/
o /vendor/etc/
. Antes de Treble estaba en rootfs (/
). Ver detalles en esta respuesta.