page.title=ADT Plugin for Eclipse
adt.zip.version=16.0.1
adt.zip.download=ADT-16.0.1.zip
adt.zip.bytes=7000078
adt.zip.checksum=03a2a23650ddac128c8b9e8aaf0aa433

@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.1</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.1.</li>
      <li>ADT 16.0.1 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>Bug fixes:</dt>
  <dd>
    <ul>
      <li>Fixed build issue where the 9-patch could be packaged as normal bitmap in some cases.</li>
      <li>Fixed minor issues in the <a href="http://tools.android.com/recent/lint">Lint</a>
        tool.</li>
      <li>Fixed minor issues in the SDK Manager.</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 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 tool 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>

