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 the Android SDK, available
from the SDK Manager. The driver is for Windows only and provides the necessary drivers for the
following 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>All other devices require Windows drivers provided by the hardware manufacturer, as listed in
the <a href="{@docRoot}sdk/oem-usb.html">OEM USB Drivers</a> document. The Galaxy Nexus
driver is also distributed by <a
href="http://www.samsung.com/us/support/downloads/verizon-wireless/SCH-I515MSAVZW">Samsung</a>
(listed as model SCH-I515).</p>

<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 and install the Google USB Driver
for Windows. </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>
  
