This article translated from: http://developer.android.com/guide/topics/connectivity/usb/index.html
Android supports a variety of USB peripherals and Android USB accessories in two modes (hardware that implements the android sub-Protocol): USB sub-mode and USB Host Mode. In the USB slave mode, the external USB hardware serves as the USB host. Examples of affiliated USB devices include Robot controllers, pedestal, diagnostic and music devices, card readers, etc. Android devices without host capabilities do not have the ability to interact with USB hardware. Android USB accessories must work with Android devices, and must follow the android sub-mode communication protocol. In USB Host Mode, Android devices act as hosts. Examples of such devices include digital cameras, keyboards, mice, and game controllers.
Figure 1 shows the two different modes. When the Android device is in host mode, it acts as a USB host and power supply bus. When the Android device is in USB-dependent mode, the connected USB hardware serves as the host and power supply bus.
Figure 1. USB Host Mode and slave mode
The USB slave mode and host mode are directly supported after android3.1 (API Level 12. The USB slave mode can also be added as a class library to a wider range of devices for backward compatibility with android2.3.4 (API level 10 ). The device manufacturer can choose whether to include this attachment class library in their system images.
Note: The support for the USB Host Mode and slave mode depends on the hardware of the device instead of the platform level. You can use the <uses-feature> element to filter devices that support the USB Host Mode and slave mode.
Debugging considerations
When debugging applications that use the USB slave function or host function, you will connect the USB hardware to the Android device, which will prevent you from connecting to the ADB through the USB and Android device. You can still access ADB through network connection. To enable network-based ADB, follow these steps:
1. Connect the Android device to your computer through USB;
2. In the platform-tools/directory of your SDK, in command line mode, type the adb tcpip 5555 command;
3. Type ADB connect <device-IP-address>: 5555. Then you should connect to the Android device and be able to publish the ADB command, such as ADB logcat;
4. Type adb usb and set your device to listen to the USB mode.