android.hardware.usb.host.xml
- ubicado en /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 host USB. Esta característica es evaluada por el PackageManager (junto con otras funciones de software/hardware) y utilizada por Google Play para filtrar aplicaciones (in)compatibles basadas en el valor en AndroidManifest.xml. Ver detalles aquí.
Además, si el dispositivo no es compatible con el modo de 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 de host USB:
~$ pm list features | grep usb.host
feature:android.hardware.usb.host
~$ dumpsys usb | grep host_manager
host_manager={
Estas líneas no deberían 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
, que no depende de la característica discutida anteriormente. vold
escucha al kernel a través de un socket netlink para el dispositivo de bloque uevent
(1) y lo empareja con alguna entrada en fstab
(2). Luego crea nodos de disco y partición en /dev/block/vold/
(3), verifica errores en el sistema de archivos y 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 a URI al almacenamiento OTG a través de SAF o Acceso a Directorios Limitado.
Para deshabilitar el montaje automático de dispositivos de almacenamiento USB por vold
, necesitas eliminar la entrada correspondiente de fstab
como se referencia 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.