page.title=Google USB Driver
@jd:body

<div id="qv-wrapper">
<div id="qv">
  <h2>In this document</h2>
  <ol>
    <li><a href="#notes">Revisions</a></li>
    <li><a href="#WinUsbDriver">Downloading the Google USB Driver</a></li>
    <li><a href="#InstallingDriver">Installing the USB Driver</a>
      <ol>
        <li><a href="#Win7">Windows 7</a></li>
        <li><a href="#WinXp">Windows XP</a></li>
        <li><a href="#WinVista">Windows Vista</a></li>
      </ol>
    </li>
  </ol>
  <h2>See also</h2>
  <ol>
    <li><a href="{@docRoot}guide/developing/device.html">Developing on a Device</a></li>
    <li><a href="{@docRoot}sdk/adding-components.html">Adding SDK Components</a></li>
    <li><a href="{@docRoot}sdk/oem-usb.html">OEM USB Drivers</a></li>
  </ol>
</div>
</div>

<p>The Google USB driver is a downloadable component for Windows developers, available
for download from the AVD and SDK Manager.</p>

<p>The Google USB Driver is only for Android Developer Phones (ADP), Nexus One, and Nexus S.
If you're using a different Android-powered device,
then you need to get a USB driver from the device OEM. For help finding the appropriate
driver, see the list of <a href="{@docRoot}sdk/oem-usb.html">OEM USB Drivers</a>.</p>

<div class="sidebox-wrapper">
<div class="sidebox">
  <p>The Google USB driver for Windows provides support for the following
Android-powered devices:</p>
  <ul>
    <li>ADP1 / T-Mobile G1*</li>
    <li>ADP2 / Google Ion / T-Mobile myTouch 3G*</li>
    <li>Verizon Droid*</li>
    <li>Nexus One</li>
    <li>Nexus S</li>
  </ul>
  <p>* <em>Or similar hardware on other carriers</em></p>
  <p>Any additional devices will require Windows drivers provided by
the hardware manufacturer. See <a href="{@docRoot}sdk/oem-usb.html">OEM USB Drivers</a>.</p>
</div>
</div>

<p class="note"><strong>Note:</strong>
If you're developing on Mac OS X or Linux, then you do not need to install a
USB driver. Refer to <a
href="{@docRoot}guide/developing/device.html#setting-up">Setting up a
Device</a> to start development with a device.</p>

<p>The sections below provide instructions on how to download the USB Driver
for Windows and install it on your development computer. </p>




<h2 id="notes">Revisions</h2>

<p>The sections below provide notes about successive revisions of the USB Driver
for Windows, as denoted by revision number. To determine what revision of the
USB Driver for Windows you are using, refer to the "Installed Packages" listing
in the Android SDK and AVD Manager.</p>

<script type="text/javascript">
function toggleDiv(link) {
  var toggleable = $(link).parent();
  if (toggleable.hasClass("closed")) {
    //$(".toggleme", toggleable).slideDown("fast");
    toggleable.removeClass("closed");
    toggleable.addClass("open");
    $(".toggle-img", toggleable).attr("title", "hide").attr("src", (toRoot + "assets/images/triangle-opened.png"));
  } else {
    //$(".toggleme", toggleable).slideUp("fast");
    toggleable.removeClass("open");
    toggleable.addClass("closed");
    $(".toggle-img", toggleable).attr("title", "show").attr("src", (toRoot + "assets/images/triangle-closed.png"));
  }
  return false;
}
</script>
<style>
.toggleable {
padding: .25em 1em;
}
.toggleme {
  padding: 1em 1em 0 2em;
  line-height:1em;
}
.toggleable a {
  text-decoration:none;
}
.toggleme a {
  text-decoration:underline;
}
.toggleable.closed .toggleme {
  display:none;
}
#jd-content .toggle-img {
  margin:0;
}
</style>

<div class="toggleable opened">
  <a href="#" onclick="return toggleDiv(this)">
        <img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-img" height="9px"
width="9px" />
USB Driver for Windows, Revision 4</a> <em>(December 2010)</em>
  <div class="toggleme">

<dl>
<dt><p>Adds support for the Nexus S.</p></dt>
</dl>
 </div>
</div>

<div class="toggleable closed">
  <a href="#" onclick="return toggleDiv(this)">
        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
width="9px" />
USB Driver for Windows, Revision 3</a> <em>(January 2010)</em>
  <div class="toggleme">

<dl>
<dt><p>Adds support for the Nexus One.</p></dt>
</dl>
 </div>
</div>

<div class="toggleable closed">
  <a href="#" onclick="return toggleDiv(this)">
        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
USB Driver for Windows, Revision 2</a> <em>(November 2009)</em>
  <div class="toggleme">

<dl>
<dt><p>Adds support for the Verizon Droid (or similar hardware on
other carriers).</p></dt>
</dl>
 </div>
</div>

<div class="toggleable closed">
  <a href="#" onclick="return toggleDiv(this)">
        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
USB Driver for Windows, Revision 1</a> <em>(October 2009)</em>
  <div class="toggleme">

<dl>
<dt><p>Initial release of the WinUsb-based driver, with support
for the T-Mobile G1 and myTouch 3G (and similar devices).</p></dt>
</dl>
 </div>
</div>


<h2 id="WinUsbDriver">Downloading the Google USB Driver</h2>

<div class="figure" style="width:498px;margin:0">
  <img src="{@docRoot}images/developing/sdk-usb-driver.png" alt="" />
  <p class="img-caption"><strong>Figure 1.</strong> The SDK and AVD Manager
    with the Google USB Driver selected.</p>
</div>

<p>The USB Driver for Windows is available for download as an optional SDK
component. You need the driver only if you are developing on Windows and 
want to connect an Android-powered device (ADP, Nexus One, or Nexus S) to your
development environment over USB. </p>

<p>To download the driver, use the Android SDK and AVD Manager tool that is
included with the <a href="{@docRoot}sdk/index.html">Android SDK</a>:</p>
<ol>
  <li>Launch the SDK and AVD Manager by double-clicking <code>SDK Manager.exe</code>,
  at the root of your SDK directory.</li>
  <li>Expand the <em>Third party Add-ons</em> and <em>Google Inc. add-ons</em>.</li>
  <li>Check <strong>Google Usb Driver package</strong> and click <strong>Install selected</strong>.</li>
  <li>Proceed to install the package. When done, the driver files are
downloaded into the <code>&lt;sdk&gt;\extras\google\usb_driver\</code> directory.</li>
</ol>



<h2 id="InstallingDriver">Installing the USB Driver</h2>

<p>Once you've downloaded your USB driver, follow the instructions below to install or upgrade the
driver, based on your version of Windows and whether you're installing for the first time
or upgrading an existing driver.</p>

<p class="note"><strong>Tip:</strong> When you finish the USB driver installation,
see <a
href="{@docRoot}guide/developing/device.html">Developing on a Device</a> for
other important information about using an Android-powered device for
development.</p>

<ol class="nolist">
  <li><a href="#Win7">Windows 7</a></li>
  <li><a href="#WinXp">Windows XP</a></li>
  <li><a href="#WinVista">Windows Vista</a></li>
</ol>


<p class="caution"><strong>Caution:</strong>
You may make changes to <code>android_winusb.inf</code> file found inside
<code>usb_driver\</code> (for example, to add support for other devices),
however, this will lead to security warnings when you install or upgrade the
driver. Making any other changes to the driver files may break the installation
process.</p>


<h3 id="Win7">Windows 7</h3>


<p>To install the Android USB driver on Windows 7 for the first time:</p>
<ol>
  <li>Connect your Android-powered device to your computer's USB port.</li>
  <li>Right-click on <em>Computer</em> from your desktop or Windows Explorer,
    and select <strong>Manage</strong>.</li>
  <li>Select <strong>Devices</strong> in the left pane.</li>
  <li>Locate and expand <em>Other device</em> in the right pane.</li>
  <li>Right-click the device name (such as <em>Nexus S</em>) and select <strong>Update
  Driver Software</strong>.
    This will launch the Hardware Update Wizard.</li>
  <li>Select <strong>Browse my computer for driver software</strong> and click
    <strong>Next</strong>.</li>
  <li>Click <strong>Browse</strong> and locate the USB driver folder. (The Google USB
Driver is located in {@code &lt;sdk&gt;\extras\google\usb_driver\}.)</li>
  <li>Click <strong>Next</strong> to install the driver.</li>
</ol>

<p>Or, to <em>upgrade</em> an existing Android USB driver on Windows 7 with the new
driver:</p>

<ol>
  <li>Connect your Android-powered device to your computer's USB port.</li>
  <li>Right-click on <em>Computer</em> from your desktop or Windows Explorer,
    and select <strong>Manage</strong>.</li>
  <li>Select <strong>Device Manager</strong> in the left pane of the Computer Management
  window.</li>
  <li>Locate and expand <em>Android Phone</em> in the right pane.</li>
  <li>Right-click <em>Android Composite ADB Interface</em> and select <strong>Update
  Driver</strong>.
    This will launch the Hardware Update Wizard.</li>
  <li>Select <strong>Install from a list or specific location</strong> and click
    <strong>Next</strong>.</li>
  <li>Select <strong>Search for the best driver in these locations</strong>; un-check
<strong>Search removable media</strong>; and check <strong>Include this location in the
search</strong>.</li>
  <li>Click <strong>Browse</strong> and locate the USB driver folder. (The Google USB
Driver is located in {@code &lt;sdk&gt;\extras\google\usb_driver\}.)</li>
  <li>Click <strong>Next</strong> to upgrade the driver.</li>
</ol>





<h3 id="WinXp">Windows XP</h3>

<p>To install the Android USB driver on Windows XP for the first time:</p>

<ol>
  <li>Connect your Android-powered device to your computer's USB port. Windows 
    will detect the device and launch the Hardware Update Wizard.</li>
  <li>Select <strong>Install from a list or specific location</strong> and click
    <strong>Next</strong>.</li>
  <li>Select <strong>Search for the best driver in these locations</strong>; un-check
<strong>Search
    removable media</strong>; and check <strong>Include
this location in the search</strong>.</li>
  <li>Click <strong>Browse</strong> and locate the USB driver folder. (The Google USB
Driver is located in {@code &lt;sdk&gt;\extras\google\usb_driver\}.)</li>
  <li>Click <strong>Next</strong> to install the driver.</li>
</ol>

<p>Or, to <em>upgrade</em> an existing Android USB driver on Windows XP with the new
driver:</p>

<ol>
  <li>Connect your Android-powered device to your computer's USB port.</li>
  <li>Right-click on <em>My Computer</em> from your desktop or Windows Explorer,
    and select <strong>Manage</strong>.</li>
  <li>Select <strong>Device Manager</strong> in the left pane.</li>
  <li>Locate and expand <em>Android Phone</em> in the right pane.</li>
  <li>Right-click <em>Android Composite ADB Interface</em> and select <strong>Update
  Driver</strong>.
    This will launch the Hardware Update Wizard.</li>
  <li>Select <strong>Install from a list or specific location</strong> and click
    <strong>Next</strong>.</li>
  <li>Select <strong>Search for the best driver in these locations</strong>; un-check <strong>Search
    removable media</strong>; and check <strong>Include
this location in the search</strong>.</li>
  <li>Click <strong>Browse</strong> and locate the USB driver folder. (The Google USB
Driver is located in {@code &lt;sdk&gt;\extras\google\usb_driver\}.)</li>
  <li>Click <strong>Next</strong> to upgrade the driver.</li>
</ol>



<h3 id="WinVista">Windows Vista</h3>

<p>To install the Android USB driver on Windows Vista for the first time:</p>

<ol>
  <li>Connect your Android-powered device to your computer's USB port. Windows
  will detect the device and launch the Found New Hardware wizard.</li>
  <li>Select <strong>Locate and install driver software</strong>.</li>
  <li>Select <strong>Don't search online</strong>.</li>
  <li>Select <strong>I don't have the disk. Show me other options</strong>.</li>
  <li>Select <strong>Browse my computer for driver software</strong>.</li>
  <li>Click <strong>Browse</strong> and locate the USB driver folder. (The Google USB
Driver is located in {@code &lt;sdk&gt;\extras\google\usb_driver\}.) As long as you specified the
exact location of the 
    installation package, you may leave <strong>Include subfolders</strong> checked or
  unchecked&mdash;it doesn't matter.</li>
  <li>Click <strong>Next</strong>. Vista may prompt you to confirm the privilege elevation
  required for driver installation. Confirm it.</li>
  <li>When Vista asks if you'd like to install the Google ADB Interface device,
  click <strong>Install</strong> to install the driver.</li>
</ol>

<p>Or, to <em>upgrade</em> an existing Android USB driver on Windows Vista with the new
driver:</p>

<ol>
  <li>Connect your Android-powered device to your computer's USB port.</li>
  <li>Right-click on <em>Computer</em> from your desktop or Windows Explorer,
    and select <strong>Manage</strong>.</li>
  <li>Select <strong>Device Manager</strong> in the left pane.</li>
  <li>Locate and expand <em>ADB Interface</em> in the right pane.</li>
  <li>Right-click on <em>HTC Dream Composite ADB Interface</em>, and select <strong>Update
  Driver Software</strong>.</li>
  <li>When Vista starts updating the driver, a prompt will ask how you want to
  search for the driver
    software. Select <strong>Browse my computer for driver software</strong>.</li>
  <li>Click <strong>Browse</strong> and locate the USB driver folder. (The Google USB
Driver is located in {@code &lt;sdk&gt;\extras\google\usb_driver\}.) As long as you specified the
exact location of the 
    installation package, you may leave <strong>Include subfolders</strong> checked or
    unchecked&mdash;it doesn't matter.</li>
  <li>Click <strong>Next</strong>. Vista might prompt you to confirm the privilege elevation
  required for driver installation. Confirm it.</li>
  <li>When Vista asks if you'd like to install the Google ADB Interface device,
  click <strong>Install</strong> to upgrade the driver.</li>
</ol>
  
