New to Android development, I've made a small app using Eclipse that works perfectly on a virtual Android device. Now, I want to run it on the real device: Moverio, a head-mounted display made by Epson, but my computer just does not recognize it as an Android device.
Being on Windows 7, I understood I need a specific USB driver. Epson sent me instructions to install the driver, but it still doesn't work. How can I do it?
Here are the steps I followed:
- Add following two lines in [Google.NTx86] and [Google.NTamd64] sections in
\extras\google\usb_driver\android_winusb.inf:
%SingleAdbInterface% = USB_Install, USB\VID_04B8&PID_0C04
%CompositeAdbInterface% = USB_Install, USB\VID_04B8&PID_0C04&MI_01
- Add vendor ID in [username].android\adb_usb.ini]
- Enable USB debugging mode on the device
- Install USB driver following instructions given here http://developer.android.com/tools/extras/oem-usb.html#InstallingDriver
I ran into a problem in the fourth step: in my device management panel, Moverio is in the "Disk drives" category. When I right click on it to install or update drivers nevertheless, inputting the <sdk>\extras\google\usb_driver\
folder, it says the driver is up to date.
When I try to run the app using Eclipse, it asks me to install a virtual device, because it can't find any real device connected.
I managed to find a blog post walking through the process needed to enable ADB access to the device. The original is in Japanese and the Google translation left something to be desired.
I'm providing my recreation of the process below; this is partially a translation and partially an expansion and combination of the original with the official documentation which failed to cover the problem encountered with the Moverio.
With a few modifications noted at the end, I suspect this should work for installing debug support on other devices that only identify as external data drives by default as well.
The first thing you need to do is to edit the .inf file for the Google USB driver.
The file is located at \android-sdk\extras\google\usb_driver\android_winusb.inf
.
By default, the android-sdk
folder is located under C:\User\YourUserName\AppData\Local\Android\
.
You need to add the following lines to the end of the file:
[Google.NTamd64]
; BT-100
%SingleAdbInterface% = USB_Install, USB\VID_04B8&PID_0C04
%CompositeAdbInterface% = USB_Install, USB\VID_04B8&PID_0C04&MI_01
Next connect the device with developer mode disabled. Windows will identify it as a USB mass storage device (MSC).
You need to go into Device Manager and uninstall it. If you have multiple USB-MSDs listed under USB Serial Bus Controllers, you can identify which one is the Moverio by disconnecting it, right clicking on each one that is still present, selecting properties and noting the location value on the general tab. Then reconnect the Moverio and look for the new entry it adds.
After you've uninstalled the Moverio's USB Mass Storage Device entry, disconnect it and enable Developer mode on the device.
Then reconnect it. Device Manager will update to show a BT1
entry under Other Devices
Right click on the BT1 entry, select Update Driver Software, mrowse My Computer for driver software. Provide the path to the USB driver folder from step one. Click Next.
At this point I get a warning about not being able to verify the publisher of the driver. I believe this is related to my having edited the .inf file. Click install this driver software anyway.
Windows will report that the driver is successfully installed. Close the update dialog. You should now see an Android Composite ADB Interface
entry in device manager. On my computer it's appearing under ASUS Android Devices
; which I assume is a legacy of the Transformerpad I've connected in the past; in the blog I'm using as a source it appeared under Android Phone
.
ADB still needs to be informed that the device is available however. To do this, you need to edit the \.Android\adb_usb.ini
file. Default location of C:\User\YourUserName\
by appending the vendor ID as a new line to the end. This is an autogenerated file; but running the update process in the comment will remove the entry we need. If you unexpectedly lose the ability to debug, this would probably be a good spot to recheck.
# ANDROID 3RD PARTY USB VENDOR ID LIST - DO NOT EDIT.
# USE 'android update adb' TO GENERATE.
# 1 USB VENDOR ID PER LINE.
0x04B8
The only thing left is to stop and restart ADB. To do this, open a command prompt at \android-sdk\platform-tools
. Issue the command adb kill-server
followed by the command adb devices
.
C:\Users\Neelyd\AppData\Local\Android\android-sdk\platform-tools>adb kill-server
C:\Users\Neelyd\AppData\Local\Android\android-sdk\platform-tools>adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached
WS000 device
When ADB restarts the device should be listed, and appear in DDMS in Eclipse.
To use this procedure to install the generic Android USB driver on a different device I think all you should need to do is to right click on the device's USB Mass Storage Device entry in device manager (step 3); select details, select the Hardware Ids property, note the values displayed, and use them in place of the Moverio's in the android_winusb.inf
file (step 1), and the vendor ID in adb_usb.ini
(step 10).
Possible simpler option
After figuring this out, I finally got a reply from Epson support. They said it should be possible to install their driver to the USB-MSD identified in step 2 directly. If that works it would replace steps 3-6. I haven't tested it though, so I'm only leaving this note as a postscript.
Installing drivers for Windows might be much more difficult than it seems. From my experience, you have much better chance for successful development for Android on any Linux platform, be it installed next to your Windows installation on your PC or run in a virtual box. Linux does recognise almost any Android device and allows access without any driver installation.