page.title=ADT Plugin for Eclipse
adt.zip.version=16.0.0
adt.zip.download=ADT-16.0.0.zip
adt.zip.bytes=6999205
adt.zip.checksum=b7e512572580291279469845386b31b6

@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="#installing">Installing the ADT Plugin</a>
      <ol>
        <li><a href="#preparing">Preparing for Installation</a></li>
        <li><a href="#downloading">Downloading the ADT Plugin</a>
        <li><a href="#configuring">Configuring the ADT Plugin</a></li>
        <li><a href="#troubleshooting">Troubleshooting</a></li>
      </ol>
    </li>
    <li><a href="#updating">Updating the ADT Plugin</a></li>
  </ol>

  <h2>See also</h2>
  <ol>
    <li><a href="{@docRoot}guide/developing/tools/adt.html">Android Developer Tools</a></li>
  </ol>

</div>
</div>

<p>Android Development Tools (ADT) is a plugin for the Eclipse IDE
that is designed to give you a powerful, integrated environment in which
to build Android applications.</p>

<p>ADT extends the capabilities of Eclipse to let you quickly set up new Android
projects, create an application UI, add components based on the Android
Framework API, debug your applications using the Android SDK tools, and even
export signed (or unsigned) {@code .apk} files in order to distribute your application.</p>

<p>Developing in Eclipse with ADT is highly recommended and is the fastest way
to get started. With the guided project setup it provides, as well as tools
integration, custom XML editors, and debug ouput pane, ADT gives you an
incredible boost in developing Android applications. </p>

<p>This document provides step-by-step instructions on how to download the ADT
plugin and install it into your Eclipse development environment. Note that
before you can install or use ADT, you must have compatible versions of both the
Eclipse IDE and the Android SDK installed. For details, make sure to read <a
href="#installing">Installing the ADT Plugin</a>, below. </p>

<p>If you are already using ADT, this document also provides instructions on
how to update ADT to the latest version or how to uninstall it, if necessary.
</p>

<p>For information about the features provided by the ADT plugin, such as code
editor features, SDK tool integration, and the graphical layout editor (for drag-and-drop layout
editing), see the <a href="{@docRoot}guide/developing/tools/adt.html">Android Developer Tools</a>
document.</p>


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

<p>The sections below provide notes about successive releases of
the ADT Plugin, as denoted by revision number. </p>

<p>For a summary of all known issues in ADT, see <a
href="http://tools.android.com/knownissues">http://tools.android.com/knownissues</a>.</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" />
ADT 16.0.0</a> <em>(December 2011)</em>
  <div class="toggleme">
<dl>
  <dt>Dependencies:</dt>

  <dd>
    <ul>
      <li>Eclipse Helios (Version 3.6) or higher is required for ADT
16.0.0.</li>
      <li>ADT 16.0.0 is designed for use with <a
href="{@docRoot}sdk/tools-notes.html">SDK Tools r16</a>. If you haven't already installed SDK Tools
r16 into your SDK, use the Android SDK Manager to do so.</li>
    </ul>
  </dd>

  <dt>General improvements:</dt>
  <dd>
    <ul>
      <li>Added Lint tools to detect common errors in Android projects. (<a
href="http://tools.android.com/recent/lint">more info</a>)</li>
    </ul>
  </dd>
</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" />
ADT 15.0.1</a> <em>(November 2011)</em>
  <div class="toggleme">
<dl>
  <dt>Dependencies:</dt>
  
  <dd>ADT 15.0.1 is designed for use with <a href="{@docRoot}sdk/tools-notes.html">SDK Tools r15</a>.
  If you haven't already installed SDK Tools r15 into your SDK, use the Android SDK Manager to
  do so.</dd>
  
  <dt>Bug fixes:</dt>
  <dd>
    <ul>
      <li>Fixed how source files are attached to library project <code>.jar</code> files.</li>
      <li>Fixed how the <code>bin/</code> folder for library projects are refreshed. This ensures that parent projects pick up changes in library projects.</li>
      <li>Fixed how a parent project's library container is updated when a library project is recompiled. This ensures that parent projects are
      recompiled when code in a library project changes.</li>
      <li>Fixed how <code>res/</code> folders are checked in library projects. This ensures that all <code>res</code> folders are properly included
      even if Eclipse is not aware of them due to refresh issues.</li>
      <li>Fixed issue that prevented <code>aapt</code> from running when editing certain XML files.</li>
      <li>Fixed minor XML formatting issues.</li>
    </ul>
  </dd>
</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" />
ADT 15.0.0</a> <em>(October 2011)</em>
  <div class="toggleme">
<dl>

<dt>Dependencies:</dt>

<dd>ADT 15.0.0 is designed for use with <a href="{@docRoot}sdk/tools-notes.html">SDK Tools r15</a>.
If you haven't already installed SDK Tools r15 into your SDK, use the Android SDK Manager to
do so.</dd>

<dt>Bug fixes:</dt>
<dd>
<ul>
  <li>Fixed build issue when using Renderscript in projects that target API levels 11-13
    (<a href="http://code.google.com/p/android/issues/detail?id=21006">Issue 21006</a>).</li>
  <li>Fixed issue when creating projects from existing source code.</li>
  <li>Fixed issues in the SDK Manager
    (<a href="http://code.google.com/p/android/issues/detail?id=20939">Issue 20939</a>,
    <a href="http://code.google.com/p/android/issues/detail?id=20607">Issue 20607</a>).</li>
  <li>Fixed scrolling issue in the new Logcat panel of DDMS.</li>
</ul>
</dd>
</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" />
ADT 14.0.0</a> <em>(October 2011)</em>
  <div class="toggleme">
<dl>

<dt>Dependencies:</dt>

<dd>ADT 14.0.0 is designed for use with <a href="{@docRoot}sdk/tools-notes.html">SDK Tools r14</a>.
If you haven't already installed SDK Tools r14 into your SDK, use the Android SDK Manager to
do so.</dd>

<dt>Build system:</dt>
<dd>
  <ul>
    <li>Changed <code>default.properties</code> to <code>project.properties</code> and
    <code>build.properties</code> to <code>ant.properties</code>. ADT automatically
    renames these files, if necessary, when you open a project in Eclipse.</li>
    <li>Changed how library projects are built in Eclipse.</a></li>
    <li>Changed output of <code>javac</code> from <code>bin/</code> to <code>bin/classes</code>
    in Eclipse.</li>
    <li>Improved incremental builds so that resource compilation runs less frequently. Builds no
    longer run when you edit strings or layouts (unless you add a new <code>id</code>) and no longer
    run once for each library project.</li>
    <li>Introduced a "PNG crunch cache" that only runs on modified PNG files, instead of
    crunching all existing PNG files, all the time.</li>
    <li>Modified resource compilation so it no longer happens for normal save operations. It only
    happens when running or debugging (the build option that lets you disable the packaging
    step, which was introduced in ADT 12, is now on by default.)</li>
  </ul>
<p>For a complete overview of the build system changes and what you need to do to support them,
see the <a href="http://tools.android.com/recent/buildchangesinrevision14">Android Tools Project
site</a>.</p>
</dd>

<dt>General improvements:</dt>
<dd>
  <ul>


<li>Added a Welcome Wizard to help with the initial setup of the Android
development environment (<a href="http://tools.android.com/recent/welcomewizard">more
info</a>).</li>
<li>Integrated the Android Asset Studio, which helps you create icons for things
like the launcher, menus, and tabs. (<a
href="http://tools.android.com/recent/assetstudiointegration">more
info</a>).</li>
<li>Revamped the Logcat view and added support to display and filter logs by
   application names as well as PIDs (<a
   href="http://tools.android.com/recent/updatedlogcatviewer">more info</a>).</li>
<li>Revamped the SDK Manager UI (<a href="http://tools.android.com/recent/newsdkmanager">more
info</a>).</li>
<li>Revamped the New Project and the New XML File wizards to have
multiple pages. Sample projects are now copied into the workspace such that they can be modified
and deleted without affecting the master copy
(<a href="http://tools.android.com/recent/revampedwizards">more info</a>).</li>
<li>Removed the dependency on Eclipse GEF.</li>
</ul>
</dd>

<dt>XML and Java editors:</dt>
<dd>
  <ul>
    <li>Added a new XML formatter that formats all XML files according to the
   standard Android coding style. The formatter can also reorder
   attributes to follow a recommended order and processes any changes made in the Layout editor.
(<a href="http://tools.android.com/recent/xmlformatter">more info</a>).</li>
  <li>Added the "Go to Matching" (Ctrl-Shift-P) feature, which lets you jump
between opening and closing tags in XML files.</li>
  <li>Added support for the "Select Enclosing Element" feature on Mac.</li>
  <li>Added a Quickfix for extracting Strings when the caret is inside a String (<a href="">see
more</a>).</li>
  <li>Improved "smart indent", which allows automatic indentation and un-indentation
   when pressing the Return key in XML editors (<a
href="http://tools.android.com/recent/xmleditingimprovements">more info</a>).</li>

  </ul>
</dd>

<dt>Layout editor:</dt>
<dd>
  <ul>
    <li>Added tooltip feedback for dragging and resizing operations. For
    example, when dragging in a relative layout, the proposed
    constraints are shown. When resizing, the new dimensions are
    shown (<a href="http://tools.android.com/recent/layouteditorfeedbacktooltips">more
info</a>).</li>
    <li>Added the ability to suppress rendering fidelity warnings (<a
href="http://tools.android.com/recent/suppressrenderwarnings">more info</a>).</li>
    <li>Added "Remove Container" visual refactoring that removes the
    children of a container up to the top level and transfers
    namespace and layout attributes if necessary (<a
href="http://tools.android.com/recent/removecontainervisualrefactoring">more info</a>).</li>
    <li>Added pull-right menus to the context menu for accessing
    properties of the parents, which is useful when the children fully
    cover the parent and make it hard to select on their own.</li>
     <li>Improved access to properties in the context menu. The most
    frequently set attributes for each view are listed at the top of
    the menu. The Properties menu offers access to the most
    recently set attributes, attributes organized by their defining
    view, and layout attributes only or all attributes alphabetically (<a
href="http://tools.android.com/recent/layouteditorcontextmenuimprovements">more info</a>).</li>
  </ul>
</dd>

<dt>Bug fixes:</dt>
<dd>Fixed many bugs and added <a
href="http://tools.android.com/recent/miscellaneousrecentfixes">minor improvements</a>, in
particular some <a href="http://tools.android.com/recent/linuxfixes">critical bug fixes on
Linux</a>.</dd>

</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" />
ADT 12.0.0</a> <em>(July 2011)</em>
  <div class="toggleme">
<dl>

<dt>Dependencies:</dt>

<dd>ADT 12.0.0 is designed for use with <a href="{@docRoot}sdk/tools-notes.html">SDK Tools r12</a>. If you haven't
already installed SDK Tools r12 into your SDK, use
the Android SDK and AVD Manager to do so.</dd>

<dt>Visual Layout Editor:</dt>
<dd>
<ul>
  <li>New RelativeLayout drop support with guideline suggestions for
   attachments and cycle prevention
   (<a href="http://tools.android.com/recent/revampedrelativelayoutsupport">more info</a>).</li>
  <li>Resize support in most layouts along with
  guideline snapping to the sizes dictated by <code>wrap_content</code> and <code>match_parent</code>.
  In LinearLayout, sizes are mapped to weights instead of pixel widths.
  (<a href="http://tools.android.com/recent/resizesupport">more info</a>).</li>
  <li>Previews of drawables and colors in the resource chooser dialogs
  (<a href="http://tools.android.com/recent/imageandcolorpreviews">more info</a>).</li>
  <li>Improved error messages and links for rendering errors including
  detection of misspelled class names
  (<a href="http://tools.android.com/recent/improvedrenderingerrordiagnostics">more info</a>).</li>
</ul>
</dd>

<dt>Build system:</dt>
<dd>
<ul>
  <li id="build-option">A new option lets you disable the packaging step in the automatic
  builders. This improves performance when saving files by not
  performing a full build, which can take a long time for large projects.
  If the option is enabled, the APK is packaged when the
  application is deployed to a device or emulator or when the
  release APK is exported (<a href="http://tools.android.com/recent/finercontroloveradtbuildprocess">more info</a>).</li>
</ul>
</dd>

<dt>Bug fixes:</dt>
<dd>Many bug fixes are part of this release
(<a href="http://tools.android.com/recent/adt12bugfixroundup">more info</a>).</dd>

</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" />
ADT 11.0.0</a> <em>(June 2011)</em>
  <div class="toggleme">

<dl>

<dt>Dependencies:</dt>

<dd>ADT 11.0.0 is designed for use with SDK Tools r11. If you haven't
already installed SDK Tools r11 into your SDK, use the Android SDK and AVD Manager to do
so.</dd>

<dt>Visual Refactoring:</dt>
<dd>
  <ul>
    <li>"Extract Style" feature pulls out style-related attributes from your layout and extracts
them as a new style defined in {@code styles.xml} (<a
href="http://tools.android.com/recent/extractstylerefactoring">more info</a>).</li>
    <li>"Wrap in Container" feature lets you select a group of views then surround them
    in a new layout (a new view group, such as a LinearLayout), and transfers namespace and layout
    parameters to the new parent (<a
href="http://tools.android.com/recent/newrefactoringswrapinchangelayoutchangewidget">more
info</a>).</li>
    <li>"Change Layout" feature changes layouts from one type
    to another, and can also flatten a layout hierarchy (<a
href="http://tools.android.com/recent/newrefactoringswrapinchangelayoutchangewidget">more
info</a>).</li>
    <li>"Change Widget Type" feature changes the type of the
    selected views to a new type. Also, a new selection context menu
    in the visual layout editor makes it easy to select siblings as
    well as views anywhere in the layout that have the same type (<a
href="http://tools.android.com/recent/newrefactoringswrapinchangelayoutchangewidget">more
info</a>).</li>
    <li>"Extract as Include" feature finds identical collections of views
    in other layouts and offers to combine them into a single layout that you can then include in
 each layout (<a
href="http://tools.android.com/recent/extractasincludeimprovements">more info</a>).</li>
    <li>Quick Assistant in Eclipse can be invoked
    from the XML editor (with Ctrl-1) to apply any of the above
    refactorings (and Extract String) to the current selection (<a
href="http://tools.android.com/recent/refactoringquickassistant">more info</a>).</li>
  </ul>
</dd>

<dt>Visual Layout Editor:</dt>
<dd>
  <ul>
    <li>This is the update to the layout editor you've been waiting for! It includes (almost) all
the goodies demonstrated at Google I/O. <a href="http://www.youtube.com/watch?v=Oq05KqjXTvs">Watch
the video</a> on YouTube.</li>
    <li>The palette now supports different configurations for supported widgets. That is, a single
view is presented in various different configurations that you can drag into your layout. For
example, there is a <em>Text Fields</em> palette category where you can drag an {@link
android.widget.EditText} widget in as a password field, an e-mail field, a phone field, or other
types of text boxes. Similarly, {@link android.widget.TextView} widgets are preconfigured
with large, normal and small theme sizes, and {@link android.widget.LinearLayout} elements are
preconfigured in horizontal and vertical configurations (<a
href="http://tools.android.com/recent/multipletextfieldandlayouttypes">more info</a>).</li>
    <li>The palette supports custom views. You can pick up any custom
    implementations of the View class you've created in your project or from included libraries and
drag them into your layout (<a
href="http://tools.android.com/recent/customviewsinthepalette">more info</a>).</li>
    <li>Fragments are available in the palette for placement in your layout. In the tool, you can
choose which layout to show rendered for a given fragment tag. Go to declaration works for fragment
classes (<a href="http://tools.android.com/recent/fragmentsupport">more info</a>).</li>
    <li>The layout editor automatically applies a "zoom to fit" for newly
    opened files as well as on device size and orientation changes to
    ensure that large layouts are always fully visible unless you
    manually zoom in.</li>
    <li>You can drop in an {@code &lt;include&gt;} element from the palette, which will pop up
    a layout chooser. When you select the layout to include, it is added with an {@code
&lt;include&gt;}. Similarly, dropping images or image buttons will pop up image
    resource choosers (<a
href="http://tools.android.com/recent/includetagdropsupport">more info</a>).</li>
    <li>The configuration chooser now applies the "Render Target" and
    "Locale" settings project wide, making it trivial to check the
    layouts for different languages or render targets without having
    to configure these individually for each layout.</li>
    <li>The layout editor is smarter about picking a default theme to
    render a layout with, consulting factors like theme registrations
    in the manifest, the SDK version, and other factors.</li>
    <li>The layout editor is smarter about picking a default configuration to render a layout
with, defaulting to the currently visible configuration in the previous file. It also considers the
SDK target to determine whether to default to a tablet or phone screen size.</li>
    <li>Basic focus support. The first text field dropped in a layout is assigned focus, and there
are <strong>Request Focus</strong> and <strong>Clear Focus</strong> context menu items on text
fields to change the focus.</li>
  </ul>
</dd>

<dt>XML editors:</dt>
<dd>
<ul>
  <li>Code completion has been significantly improved. It now works
  with {@code &lt;style&gt;} elements, completes dimensional units,
  sorts resource paths in values based on the attribute name, and more. There are also many fixes to
handle text replacement (<a
href="http://tools.android.com/recent/xmlcodecompletionimprovements">more info</a>).</li>
  <li>AAPT errors are handled better. They are now underlined for the
  relevant range in the editor, and a new quickfix makes it trivial
  to create missing resources.</li>
  <li>Code completion for drawable, animation and color XML files (<a
href="http://tools.android.com/recent/codecompletionfordrawablescolorsandanimationfiles">more
info</a>).</li>
</ul>
</dd>

<dt>DDMS:</dt>
<dd>
<ul>
  <li>"New Folder" action in the File Explorer.</li>
  <li>The screenshot dialog will add timestamps to the filenames and preserve the orientation on
snapshot refresh.</li>
</ul>
</dd>

<dt>General notes:</dt>
<dd>
  <ul>
    <li>TraceView supports zooming with the mouse-wheel in the timeline.</li>
    <li>The New Android Project wizard now supports Eclipse working sets.</li>
  </ul>
</dd>
</dl>
<p>More information about tool changes are available on the <a
href="http://tools.android.com/recent">Android Tools Project Site</a>.</p>
</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" />
ADT 10.0.1</a> <em>(March 2011)</em>
  <div class="toggleme">

<dl>

<dt>Dependencies:</dt>

<dd>ADT 10.0.1 is designed for use with SDK Tools r10. If you haven't
already installed SDK Tools r10 into your SDK, use the Android SDK and AVD Manager to do
so.</dd>

<dt>General notes:</dt>
<dd>
  <ul>
    <li>Temporary work-around to resolve the rare cases in which the layout editor will
not open.</li>
    <li>Fix issue in which ADT 10.0.0 would install on Eclipse 3.4 and lower, even though ADT
requires Eclipse 3.5 or higher (as of 10.0.0).</li>
  </ul>
</dd>
</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" />
ADT 10.0.0</a> <em>(February 2011)</em>
  <div class="toggleme">

<dl>

<dt>Dependencies:</dt>

<dd>ADT 10.0.0 is designed for use with SDK Tools r10. If you haven't
already installed SDK Tools r10 into your SDK, use the Android SDK and AVD Manager to do
so.</dd>

<dt>General notes:</dt>
<dd>
  <ul>
  <li>The tools now automatically generate Java Programming Language source files (in the <code>gen/</code> directory) and
    bytecode (in the <code>res/raw/</code> directory) from your <code>.rs</code> files.</li>
  <li>A Binary XML editor has been added (<a href="http://tools.android.com/recent/binaryxmleditor">details</a>).</li>
  <li>Traceview is now integrated into the Eclipse UI (<a href="http://tools.android.com/recent/traceviewineclipse">details</a>).</li>
  <li>The "Go To Declaration" feature for XML and <code>.java</code> files quickly show all the matches in the project
  and allows you jump to specific items such as string translations or <code>onClick</code> handlers
  (<a href="http://tools.android.com/recent/gotodeclarationimprovements">details</a>).</li>
  <li>The Resource Chooser can create items such as dimensions, integers, ids, and booleans
  (<a href="http://tools.android.com/recent/resourcechoosercannowcreatearbitraryvalues">details</a>).</li>
  <li>Improvements to the Visual Layout Editor:
      <ul>
        <li>A new Palette with categories and rendering previews
        (<a href="http://tools.android.com/recent/newpalette">details</a>).</li>
        <li>A Layout Actions bar that provides quick access to common layout operations
        (<a href="http://tools.android.com/recent/layoutactionsbar">details</a>).</li>
        <li>When the Android 3.0 rendering library is selected, layouts render more like they do on devices.
        This includes rendering of status and title bars to more accurately reflect the actual
        screen space available to applications
        (<a href="http://tools.android.com/recent/systembarandactionbar">details</a>).</li>
        <li>Zoom improvements such as fit to view, persistent scale, and keyboard access.
        (<a href="http://tools.android.com/recent/zoomimprovements">details</a>).</li>
        <li>Further improvements to <code>&lt;merge&gt;</code> layouts, as well as layouts with gesture overlays
        (<a href="http://tools.android.com/recent/improvedsupportformergetags">details</a>).</li>
        <li>Improved rendering error diagnostics.</li>
      </ul>
    </li>
  </ul>
</dd>
</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" />
ADT 9.0.0</a> <em>(January 2011)</em>
  <div class="toggleme">

<dl>

<dt>Dependencies:</dt>

<dd>ADT 9.0.0 is designed for use with SDK Tools r9. If you haven't
already installed SDK Tools r9 into your SDK, use the Android SDK and AVD Manager to do
so.</dd>

<dt>General notes:</dt>
<dd>
  <ul>
    <li>"Go To Declaration" hyperlink support: You can jump directly from code references (such as
    <code>R.id.main</code>) to the corresponding XML declaration, or from XML attributes (such as
    <code>@string</code>) to the corresponding resource definition, or from manifest XML
    registrations to activities and services.</li>
    <li>Improvements were made to name refactoring.</li>
    <li>AVDs now automatically save their state, so they can restart almost instantly. You can enable this feature when
    creating an AVD or by editing an AVD with the AVD Manager.</li>
    <li>Improvements to the Visual Layout Editor:
      <ul>
        <li>Support for rendering targets: You can now choose an arbitrary Android platform to
        render the current page, regardless of the project's minimum platform. This makes it
        easy to verify the layout and appearance of your activity on different versions of
        the platform.
        </li>
        <li>Improved support for empty and nested layouts: Dragging items over nested and
        invisible layouts automatically enlarges and highlights these layouts, so that they
        can receive drops.
        </li>
        <li>XML formatting improvements: The editor generates cleaner XML and you can now enable
        XML auto-formatting in the <strong>Preferences</strong> menu.</li>
        <li>Improved Outline labels: The Outline tab now displays additional information about each
        View. Textual Views display a snippet of the actual text. Views with a source
        (such as ImageView) displays the resource name. Included Views display the name of the View.
        </li>
        <li>When you right click a View in the Layout Editor,
        the context menu now contains <strong>Edit ID...</strong> and <strong>Edit Text...</strong>
        items. The <strong>Properties...</strong> context menus now list all of the properties and
        provide a way to edit them
        (<a href="http://tools.android.com/recent/editidtextandotherpropertiesviamenu">Details</a>).
        </li>
        <li>The layout editor now properly handles
        <a href="{@docRoot}guide/topics/resources/layout-resource.html#include-element"><code>&lt;include&gt;</code></a>
        and <a href="{@docRoot}guide/topics/resources/layout-resource.html#merge-element"><code>&lt;merge&gt;</code></a>
        tags (<a href="http://tools.android.com/recent/supportforincludeandmerge">Details</a>).</li>
        <li>"Extract as Include" refactoring: The Layout Editor has a new refactoring that allows
        you to select one or more views in a layout, and extract it into a separate layout
        (<a href="http://tools.android.com/recent/extractasincluderefactoring">Details</a>).</li>
        <li>Improved diagnostics for class loading and rendering errors: Class loading and rendering
        error messages are more useful and provide better information about the root cause of the
        error.</li>
        <li>Improved error handling to prevent drag and reordering operations from adding children
        into an {@link android.widget.AdapterView}.</li>
        <li>Outline reordering: Reordering your views in the Outline tab is much easier
        (<a href="http://tools.android.com/recent/outlineimprovements">Details</a>).</li>
        <li>Fix for keybinding bug where keyboard shortcuts did not work (Issues
        <a href="http://code.google.com/p/android/issues/detail?id=13231">13231</a> and
        <a href="http://code.google.com/p/android/issues/detail?id=13134">13134</a>).</li>
        <li>Fix for problems with Custom layout attribute menu (Issue
        <a href="http://code.google.com/p/android/issues/detail?id=13134">13134</a>).</li>
        <li>Automatic configuration for various view types: Certain views have properties configured
        by default. For example, the width of an {@link android.widget.EditText} object is set to
        <code>match_parent</code> when added to a vertical {@link android.widget.LinearLayout}
        or a default image is added to an {@link android.widget.ImageButton}.</li>
        <li>Previews during dragging: Dragging from the palette or dragging within the layout editor
        now shows live previews of the dragged item.</li>
        <li>Navigation improvements: In the Layout Editor, double-clicking Views jumps to the
        corresponding XML element. In the Outline view, double-clicking opens the Properties view.</li>
        <li>The editor has Honeycomb style animation preview support.</li>
        <li>Improved rendering support for various Views (such as TabHosts and SlidingDrawers) in
        Honeycomb (Issues <a href="http://code.google.com/p/android/issues/detail?id=3162">3162</a>
        and <a href="http://code.google.com/p/android/issues/detail?id=13092">13092</a>).</li>
        <li>Included layouts can be rendered and edited in the context of the layouts that include
        them. From a layout using an <a href="{@docRoot}guide/topics/resources/layout-resource.html#include-element">
        <code>&lt;include&gt;</code></a> tag, double-clicking on the
        <a href="{@docRoot}guide/topics/resources/layout-resource.html#include-element">
        <code>&lt;include&gt;</code></a> element edits the referenced layout in the context of the
        current layout. Additionally, when editing a layout that is included by other layouts,
        you can quickly change between context layouts, by right clicking in the editor and choosing
        <strong>Show included in...</strong>. This feature is only available in Honeycomb.</li>
      </ul>
    </li>
    <li>This release fixes many other bugs, but the most important ones are listed below:
  <ul>
   <li>Fixed issue that prevented launching debug builds on productions devices when
    <code>debuggable=true</code> was not set in the Android manifest.</li>
    <li>The LogCat view in DDMS properly handles UTF-8 characters.</li>
    <li>The SDK Manager is more reliable on Windows
    (<a href="http://tools.android.com/recent/sdkmanagerfixes">Details</a>).</li>
    <li>A JUnit initialization bug that prevented you from working with JUnit tests was fixed
    (Issue <a href="http://code.google.com/p/android/issues/detail?id=12411">12411</a>).</li>
  </ul>
</li>
  </ul>
</dd>
</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" />
ADT 8.0.1</a> <em>(December 2010)</em>
  <div class="toggleme">

<dl>

<dt>Dependencies:</dt>

<p><p>ADT 8.0.1 is designed for use with SDK Tools r8. If you haven't
already installed SDK Tools r8 into your SDK, use the Android SDK and AVD Manager to do
so.</p></dd>

<dt>General notes:</dt>
<dd>
<ul>
  <li>This is a quick follow-up to ADT 8.0.0 to fix some bugs.</li>
  <li>Fixes an issue in which projects failed to compile, citing a dex error.</li>
  <li>Better ProGuard error reporting when exporting applications for release.</li>
</ul>
<p>Also see the recent release notes for 8.0.0, below.</p>
</dd>
</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" />
ADT 8.0.0</a> <em>(December 2010)</em>
  <div class="toggleme">

<dl>

<dt>Dependencies:</dt>

<p><p>ADT 8.0.0 is designed for use with SDK Tools r8. If you haven't
already installed SDK Tools r8 into your SDK, use the Android SDK and AVD Manager to do
so.</p></dd>

<dt>General notes:</dt>
<dd>
<ul>
  <li>New version number scheme that follows the SDK Tools revision number. The major version
number for your ADT plugin should now always match the revision number of your SDK Tools. For
example, ADT 8.x is for SDK Tools r8.</li>
  <li>Support for true debug build. You no longer need to change the value of the
   <code>debuggable</code> attribute in the Android Manifest.
  <p>Incremental builds automatically insert <code>debuggable="true"</code>, but if you perform
  "export signed/unsigned application package", ADT does <em>not</em> insert it.
  If you manually set <code>debuggable="true"</code> in the manifest file, then release builds will
  actually create a debug build (it does not remove it if you placed it there).</p></li>
  <li>Automatic <a href="{@docRoot}guide/developing/tools/proguard.html">ProGuard</a> support in
  release builds. For it to work, you need to have a <code>proguard.config</code>
  property in the <code>default.properties</code> file that points to a ProGuard config file.</li>
  <li>Completely rewritten Visual Layout Editor. (This is still a work in progress.) Now includes:
    <ul>
      <li>Full drag and drop from palette to layout for all Layout classes.</li>
      <li>Move widgets inside a Layout view, from one Layout view to another and from one layout file to another.</li>
      <li>Contextual menu with enum/flag type properties.</li>
      <li>New zoom controls.</li>
    </ul></li>
  <li>New HierarchyViewer plug-in integrated in Eclipse.</li>
  <li>Android launch configurations don't recompile the whole workspace on launch anymore.</li>
  <li><code>android.jar</code> source and javadoc location can now be configured.</li>
</ul>
</dd>
</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" />
ADT 0.9.9</a> <em>(September 2010)</em>
  <div class="toggleme">

<dl>

<dt>Dependencies:</dt>

<dd><p>ADT 0.9.9 replaces ADT 0.9.8 and is designed for use with SDK Tools r7
and later. ADT 0.9.9 includes the ADT 0.9.8 features as well as an important
bugfix, so we recommend that you upgrade as soon as possible. If you haven't
already installed SDK Tools r7 into your SDK, use the Android SDK Manager to do
so.</p></dd>

<dt>General notes:</dt>
<dd>
<ul>
<li>Fixes a problem in project import, in which source files were deleted in some cases.</li>
<li>Includes all other ADT 0.9.8 features (see below).</li>
</ul>
</dd>
</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" />
ADT 0.9.8</a> <em>(September 2010)</em>
  <div class="toggleme">


</ul>
</dd>

<dl>

<dt>Dependencies:</dt>

<dd><p>ADT 0.9.8 is now deprecated. Please use ADT 0.9.9 instead.</p></dd>

<dt>General notes:</dt>
<dd>
<ul>
<li>Adds a new Action, "Rename Application Package", to the Android Tools
contextual menu. The Action does a full application package refactoring.
<li>Adds support for library projects that don't have a source folder
called <code>src/</code>. There is now support for any number of source folders,
with no name restriction. They can even be in subfolder such as
<code>src/java</code>. If you are already working with library projects created
in ADT 0.9.7, see <a
href="{@docRoot}guide/developing/projects/index.html#libraryMigrating">Migrating
library projects to ADT 0.9.8</a> for important information about moving
to the new ADT environment.</li>
<li>Adds support for library projects that depend on other library
projects.</li>
<li>Adds support for additional resource qualifiers:
<code>car</code>/<code>desk</code>, <code>night</code>/<code>notnight</code> and
<code>navexposed</code>/<code>navhidden</code>.</li>
<li>Adds more device screen types in the layout editor. All screen
resolution/density combinations listed in the <a
href="{@docRoot}guide/practices/screens_support.html#range">Supporting
Multiple Screens</a> are now available.</li>
<li>Fixes problems with handling of library project names that
contain characters that are incompatible with the Eclipse path variable.
Now properly sets up the link between the main project and the library
project.</li>
</ul>
</dd>
</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" />
ADT 0.9.7</a> <em>(May 2010)</em>
  <div class="toggleme">

<dl>
<dt>Library projects:</dt>
<dd>
<p>The ADT Plugin now supports the use of <em>library projects</em> during
development, a capability that lets you store shared Android application
code and resources in a separate development project. You can then reference the
library project from other Android projects and, at build time, the tools
compile the shared code and resources as part of the dependent applications.
More information about this feature is available in the <a
href="{@docRoot}guide/developing/projects/index.html#LibraryProjects">Creating and Managing Projects</a> document. </p>
<p>If you are not developing in Eclipse, <a
href="tools-notes.html">SDK Tools r6</a> provides the equivalent library
project support through the Ant build system.</p>
</dd>
</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" />
ADT 0.9.6</a> <em>(March 2010)</em>
  <div class="toggleme">

<dl>
<dt>Dependencies:</dt>

<dd><p>ADT 0.9.6 is designed for use with SDK Tools r5 and later. Before
updating to ADT 0.9.6, we highly recommend that you use the Android SDK and
AVD Manager to install SDK Tools r5 into your SDK.</p></dd>

<dt>General Notes:</dt>
<dd>
<ul>
<li>Editing <code>default.properties</code> outside of Eclipse will now
automatically update the project.</li>
<li>Loads the SDK content only when a project requires it. This will make
Eclipse use less resources when the SDK contains many versions of Android.</li>
<li>Resolves potential deadlock between modal dialogs, when launching ADT the
first time with the SDK Usage panel.</li>
<li>Fixes issues with the New Project Wizard when selecting samples.</li>
</ul>
</dd>
<dt>AVD/SDK Manager:</dt>
<dd>
<ul>
<li>Adds support for platform samples components.</li>
<li>Improves support for dependency between components.</li>
<li>AVDs now sorted by API level.</li>
<li>The AVD creation dialog now enforces a minimum SD card size of 9MB.</li>
<li>Prevents deletion of running AVDs.</li>
</ul>
</dd>
<dt>DDMS:</dt>
<dd>
<ul>
<li>DDMS plug-in now contains the Allocation Tracker view.</li>
<li>New action in the Logcat view: "Go to problem" lets you go directly from an
exception trace output to the code.</li>
</ul>
</dd>
<dt>Editors:</dt>
<dd>
<ul>
<li>Explode mode in the Visual Layout Editor adds a margin to all layout objects
so that it's easier to see embedded or empty layouts.</li>
<li>Outline mode in the Visual Layout Editor draws layout outline to make it
easier to see layout objects.</li>
<li>Several fixes in the configuration selector of the Visual Layout
Editor.</li>
</ul>
</dd>
<dt>Application launching:</dt>
<dd>
<ul>
<li>Applications launched from ADT now behave as if they were clicked from the
Home screen.</li>
<li>Fixes issue where add-on with no optional library would not show up as valid
targets for application launches.</li>
<li>Resolves possible crash when launching applications.</li>
</ul>
</dd>
</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" />
ADT 0.9.5</a> <em>(December 2009)</em>
  <div class="toggleme">
<dl>
<dt>Dependencies:</dt>

<dd><p>ADT 0.9.5 requires features provided in SDK Tools r4 or higher. If you install
ADT 0.9.5, which is highly recommended, you should use the Android SDK and AVD
Manager to download the latest SDK Tools into your SDK. For more information,
see <a href="{@docRoot}sdk/adding-components.html">Adding SDK Components</a>.</p>
</dd>

<dt>General notes:</dt>
<dd>
<ul>
<li>AVD Launch dialog now shows scale value.</li>
<li>Fixes potential NPE in SDK Manager on AVD launch, for older AVD with no skin name specified.</li>
<li>Fixes XML validation issue in on older Java versions.</li>
<li>.apk packaging now properly ignores vi swap files as well as hidden files.</li>
</ul>
</dd>
</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" />
ADT 0.9.4</a> <em>(October 2009)</em>
  <div class="toggleme">
<dl>
<dt>Dependencies:</dt>

<dd><p>ADT 0.9.4 requires features provided in SDK Tools r3 or higher. If you install
ADT 0.9.4, which is highly recommended, you should use the Android SDK and AVD
Manager to download the latest SDK Tools into your SDK. For more information,
see <a href="{@docRoot}sdk/adding-components.html">Adding SDK Components</a>.</p>
</dd>

<dt>Project Creation Wizard:</dt>
<dd>
<ul>
<li>New option to create a project from a sample by choosing it from a list.</li>
</ul>
</dd>

<dt>Layout Editor:</dt>
<dd>
<ul>
<li>Improved Configuration selector that lets you see how your layout will
render on different devices. Default device descriptions include ADP1
and Google Ion, while SDK add-ons can also provide new descriptions.
A new UI allows you to create custom descriptions.</li>
<li>Adds a new clipping toggle, to let you see your full layout even if it's
bigger than the screen.</li>
</ul>
</dd>

<dt>DDMS integration:</dt>
<dd>
<ul>
<li>Includes the improvements from the standlone DDMS, revision 3.</li>
<li>Adds an option to open HPROF files into eclipse instead of writing them on
disk. If a profiler such as MAT (<a href="http://eclipse.org/mat">Memory Analyzer
Tool</a>) is installed, it'll open the file.</li>
</ul>
</dd>

<dt>Android SDK and AVD Manager integration:</dt>
<dd>
<ul>
<li>Includes the improvements from the standalone Android SDK and AVD Manager,
revision 3.</li>
</ul>
</dd>
</dl>
 </div>
</div>



<h2 id="installing">Installing the ADT Plugin</h2>

<p>The sections below provide instructions on how to download and install
ADT into your Eclipse environment. If you encounter problems, see the <a
href="#troubleshooting">Troubleshooting</a> section.</p>


<h3 id="preparing">Preparing Your Development Computer</h3>

<p>ADT is a plugin for the Eclipse IDE. Before you can install or use ADT,
you must have a compatible version of Eclipse installed on your development
computer. Check the <a
href="requirements.html">System Requirements</a> document for
a list of Eclipse versions that are compatible with the Android SDK.</li></p>

<ul>
<li>If Eclipse is already installed on your computer, make sure that it is
a version that is compatible with ADT and the Android SDK.

<li>If you need to install or update Eclipse, you can download it from this
location:

<p style="margin-left:2em;"><a href=
"http://www.eclipse.org/downloads/">http://www.eclipse.org/downloads/</a>
</p>

<p>The "Eclipse Classic" version is recommended. Otherwise, a Java or RCP
version of Eclipse is recommended.</p></li>
</ul>

<p>Additionally, before you can configure or use ADT, you must install the
Android SDK starter package, as described in <a
href="installing.html#Installing">Downloading the SDK Starter Package</a>.
Specifically, you need to install a compatible version of the Android SDK Tools
and at least one development platform. To simplify ADT setup, we recommend
installing the Android SDK prior to installing ADT. </p>

<p>When your Eclipse and Android SDK environments are ready, continue with the
ADT installation as described in the steps below. </p>

<h3 id="downloading">Downloading the ADT Plugin</h3>

<p>Use the Update Manager feature of your Eclipse installation to install the latest
revision of ADT on your development computer.<>

<p>Assuming that you have a compatible version of the Eclipse IDE installed, as
described in <a href="#preparing">Preparing for Installation</a>, above, follow
these steps to download the ADT plugin and install it in your Eclipse
environment.</p>


<ol>
    <li>Start Eclipse, then select <strong>Help</strong> &gt; <strong>Install New
Software...</strong>.</li>
    <li>Click <strong>Add</strong>, in the top-right corner.</li>
    <li>In the Add Repository dialog that appears, enter "ADT Plugin" for the <em>Name</em> and the
following URL for the <em>Location</em>:
      <pre>https://dl-ssl.google.com/android/eclipse/</pre>
    </li>
    <li>Click <strong>OK</strong>
      <p>Note: If you have trouble acquiring the plugin, try using "http" in the Location URL,
instead of "https" (https is preferred for security reasons).</p></li>
    <li>In the Available Software dialog, select the checkbox next to Developer Tools and click
<strong>Next</strong>.</li>
    <li>In the next window, you'll see a list of the tools to be downloaded. Click
<strong>Next</strong>. </li>
    <li>Read and accept the license agreements, then click <strong>Finish</strong>.
      <p>Note: If you get a security warning saying that the authenticity or validity of
the software can't be established, click <strong>OK</strong>.</p></li>
    <li>When the installation completes, restart Eclipse. </li>
</ol>

<h3 id="configuring">Configuring the ADT Plugin</h3>

<p>After you've successfully downloaded the ADT as described above, the next step
is to modify your ADT preferences in Eclipse to point to the Android SDK directory:</p>

<ol>
    <li>Select <strong>Window</strong> &gt; <strong>Preferences...</strong> to open the Preferences
        panel (Mac OS X: <strong>Eclipse</strong> &gt; <strong>Preferences</strong>).</li>
    <li>Select <strong>Android</strong> from the left panel.</li>
      <p>You may see a dialog asking whether you want to send usage statistics to Google. If so,
make your choice and click <strong>Proceed</strong>. You cannot continue with this procedure until
you click <strong>Proceed</strong>.</p>
    <li>For the <em>SDK Location</em> in the main panel, click <strong>Browse...</strong> and
        locate your downloaded SDK directory. </li>
    <li>Click <strong>Apply</strong>, then <strong>OK</strong>.</li>
</ol>

<p>Done! If you haven't encountered any problems, then the installation is
complete. If you're installing the Android SDK for the first time, return to <a
href="{@docRoot}sdk/installing.html#InstallingADT">Installing the SDK</a> to complete your setup.
</p>


<h3 id="troubleshooting">Troubleshooting ADT Installation</h3>

<p> If you are having trouble downloading the ADT plugin after following the
steps above, here are some suggestions: </p>

<ul>
  <li>If Eclipse can not find the remote update site containing the ADT plugin,
try changing the remote site URL to use http, rather than https. That is, set
the Location for the remote site to:
<pre>http://dl-ssl.google.com/android/eclipse/</pre></li>
<li>If you are behind a firewall (such as a corporate firewall), make sure that
you have properly configured your proxy settings in Eclipse. In Eclipse,
you can configure proxy information from the main Eclipse menu in
<strong>Window</strong> (on Mac OS X, <strong>Eclipse</strong>) &gt;
<strong>Preferences</strong> &gt; <strong>General</strong> &gt; <strong>Network
Connections</strong>.</li>
</ul>

<p> If you are still unable to use Eclipse to download the ADT plugin as a
remote update site, you can download the ADT zip file to your local machine and
manually install it:</p>

<ol>
  <li>Download the current ADT Plugin zip file from the table below (do not unpack it).

  <table class="download">
    <tr>
      <th>Name</th>
      <th>Package</th>
      <th>Size</th>
      <th>MD5 Checksum</th>
  </tr>
  <tr>
    <td>ADT {@adtZipVersion}</td>
    <td>
      <a href="http://dl.google.com/android/{@adtZipDownload}">{@adtZipDownload}</a>
    </td>
    <td>{@adtZipBytes} bytes</td>
    <td>{@adtZipChecksum}</td>
  </tr>
</table>
</li>

</li>
  <li>Follow steps 1 and 2 in the <a href="#installing">default install
      instructions</a> (above).</li>
  <li>In the Add Site dialog, click <strong>Archive</strong>.</li>
  <li>Browse and select the downloaded zip file.</li>
  <li>Enter a name for the local update site (e.g.,
      "Android Plugin") in the "Name" field.</li>
  <li>Click <strong>OK</strong>.
  <li>Follow the remaining procedures as listed for
      <a href="#installing">default installation</a> above,
      starting from step 4.</li>
</ol>

<p>To update your plugin once you've installed using the zip file, you will have
to follow these steps again instead of the default update instructions.</p>

<h4>Other install errors</h4>

<p>Note that there are features of ADT that require some optional
Eclipse components (for example, WST). If you encounter an error when
installing ADT, your Eclipse installion might not include these components.
For information about how to quickly add the necessary components to your
Eclipse installation, see the troubleshooting topic
<a href="{@docRoot}resources/faq/troubleshooting.html#installeclipsecomponents">ADT
Installation Error: "requires plug-in org.eclipse.wst.sse.ui"</a>.</p>

<h4>For Linux users</h4>
<p>If you encounter this error when installing the ADT Plugin for Eclipse:
<pre>
An error occurred during provisioning.
Cannot connect to keystore.
JKS</pre>
<p>
...then your development machine lacks a suitable Java VM. Installing Sun
Java 6 will resolve this issue and you can then reinstall the ADT
Plugin.</p>


<h2 id="updating">Updating the ADT Plugin</h2>

<p>From time to time, a new revision of the ADT Plugin becomes available, with
new features and bug fixes. Generally, when a new revision of ADT is available,
you should update to it as soon as convenient. </p>

<p>In some cases, a new revision of ADT will have a dependency on a specific
revision of the Android SDK Tools. If such dependencies exist, you will need to
update the SDK Tools component of the SDK after installing the new revision of
ADT. To update the SDK Tools component, use the Android SDK and AVD Manager, as
described in <a href="adding-components.html">Adding SDK Components</a>.</p>

<p>To learn about new features of each ADT revision and also any dependencies on
the SDK Tools, see the listings in the <a href="#notes">Revisions</a>
section. To determine the version currently installed, open the
Eclipse Installed Software window using <strong>Help</strong>
&gt; <strong>Software Updates</strong> and refer to the version listed for
"Android Development Tools".</p>

<p>Follow the steps below to check whether an update is available and, if so,
to install it. </p>

<ol>
    <li>Select <strong>Help</strong> &gt; <strong>Check for Updates</strong>.
      <p>If there are no updates available, a dialog will say so and you're done.</p></li>
    <li>If there are updates available, select Android DDMS, Android Development Tools,
      and Android Hierarchy Viewer, then click <strong>Next</strong>.</li>
    <li>In the Update Details dialog, click <strong>Next</strong>.</li>
    <li>Read and accept the license agreement and then click <strong>Finish</strong>.
      This will download and install the latest version of Android DDMS and
      Android Development Tools.</li>
    <li>Restart Eclipse.</li>
</ol>


<p>If you encounter problems during the update, remove the existing ADT plugin from Eclipse, then
perform a fresh installation, using the instructions for <a href="#installing">Installing the ADT
Plugin</a>.</p>

