page.title=ADT Plugin for Eclipse
adt.zip.version=12.0.0
adt.zip.download=ADT-12.0.0.zip
adt.zip.bytes=5651973
adt.zip.checksum=8ad85d0f3da4a2b8dadfddcc2d66dbcb

@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>

</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>

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

<p>The sections below provide notes about successive releases of
the ADT Plugin, as denoted by revision number. </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 12.0.0</a> <em>(June 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>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>

