page.title=ADT Plugin

@jd:body

<div id="qv-wrapper">
<div id="qv">

  <h2>See also</h2>
  <ol>
    <li><a href="{@docRoot}sdk/installing/installing-adt.html">Installing the Eclipse
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 packages 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 output 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="{@docRoot}sdk/installing/installing-adt.html">Installing the Eclipse
Plugin</a>. </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}tools/help/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>

<div class="toggle-content opened">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-content-img"
      alt=""/>ADT 23.0.2</a> <em>(July 2014)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>
  <dt>Dependencies:</dt>

  <dd>
    <ul>
      <li>Java 7 or higher is required if you are targeting the L Developer Preview.</li>
      <li>Java 1.6 or higher is required if you are targeting other releases.</li>
      <li>Eclipse Indigo (Version 3.7.2) or higher is required.</li>
      <li>This version of ADT is designed for use with
        <a href="{@docRoot}tools/sdk/tools-notes.html">SDK Tools r23.0.2</a>.
        If you haven't already installed SDK Tools r23.0.2 into your SDK, use the
        Android SDK Manager to do so.</li>
    </ul>
  </dd>

  <dt>General Notes:</dt>
  <dd>
    <ul>
      <li>ADT Bundle shows the Java perspective by default.</li>
      <li>ADT Bundle 23.0.0 and prior versions would not allow updating the ADT plugins
          due to conflicting dependencies. This version fixes that bug and should allow
          updating to future versions of the ADT plugins.</li>
    </ul>
  </dd>
</dl>
</div>
</div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt=""/>ADT 23.0.0</a> <em>(June 2014)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>
  <dt>Dependencies:</dt>

  <dd>
    <ul>
      <li>Java 7 or higher is required if you are targeting the L Developer Preview.</li>
      <li>Java 1.6 or higher is required if you are targeting other releases.</li>
      <li>Eclipse Indigo (Version 3.7.2) or higher is required.</li>
      <li>This version of ADT is designed for use with
        <a href="{@docRoot}tools/sdk/tools-notes.html">SDK Tools r23.0.0</a>.
        If you haven't already installed SDK Tools r23.0.0 into your SDK, use the
        Android SDK Manager to do so.</li>
    </ul>
  </dd>

  <dt>General Notes:</dt>
  <dd>
    <ul>
      <li>Added the Android Wear tools and system images.</li>
    </ul>
  </dd>
</dl>
</div>
</div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt=""/>ADT 22.6.3</a> <em>(April 2014)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>
  <dt>Dependencies:</dt>

  <dd>
    <ul>
      <li>Java 1.6 or higher is required.</li>
      <li>Eclipse Indigo (Version 3.7.2) or higher is required.</li>
      <li>This version of ADT is designed for use with
        <a href="{@docRoot}tools/sdk/tools-notes.html">SDK Tools r22.6.3</a>.
        If you haven't already installed SDK Tools r22.6.3 into your SDK, use the
        Android SDK Manager to do so.</li>
    </ul>
  </dd>

  <dt>General Notes:</dt>
  <dd>
    <ul>
      <li>Fixed a problem where the AVD manager allowed creating Android Wear virtual devices
          with a target API Level lower than 19.</li>
      <li>Fixed the description of Android Wear system images in the SDK Manager.</li>
    </ul>
  </dd>

  <dt>Known Issues:</dt>
  <dd>
    <p>When you create an Android Wear virtual device in the AVD manager, a target API Level
       lower than 19 may be selected by default. Make sure you select the target API Level 19
       when creating Android Wear virtual devices.</p>
  </dd>
</dl>
</div>
</div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt=""/>ADT 22.6.2</a> <em>(March 2014)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>
  <dt>Dependencies:</dt>

  <dd>
    <ul>
      <li>Java 1.6 or higher is required.</li>
      <li>Eclipse Indigo (Version 3.7.2) or higher is required.</li>
      <li>This version of ADT is designed for use with
        <a href="{@docRoot}tools/sdk/tools-notes.html">SDK Tools r22.6.2</a>.
        If you haven't already installed SDK Tools r22.6.2 into your SDK, use the
        Android SDK Manager to do so.</li>
    </ul>
  </dd>

  <dt>General Notes:</dt>
  <dd>
    <ul>
      <li><p>Changed the URL for the Android Developer Tools update site to require HTTPS.</p>
          <p class="note"><strong>Note:</strong> If you are
          <a href="{@docRoot}sdk/installing/installing-adt.html">updating ADT</a>, make sure
          you use HTTPS in the URL for the Android Developer Tools update site.</p>
      </li>
      <li>Fixed a problem where Eclipse was non-responsive for a few seconds after opening
          an XML file. (<a href="http://b.android.com/67084">Issue 67084</a>)</li>
      <li>Fixed a problem where the SDK Manager threw a <code>NullPointerException</code> after
          removing a virtual device that was created using the Android Wear
          system image. (<a href="http://b.android.com/67588">Issue 67588</a>)</li>
      <li>Fixed a problem where the layout preview for large screens in Eclipse showed the
          resources from the <code>drawable-*</code> directories instead of those from the
          <code>drawable-large-*</code> directories.</li>
      <li>Fixed a problem with Nexus 5 Android virtual devices created from the command line
          where the SD card file system was read-only.</li>
    </ul>
  </dd>
</dl>
</div>
</div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt=""/>ADT 22.6.1</a> <em>(March 2014)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>
  <dt>Dependencies:</dt>

  <dd>
    <ul>
      <li>Java 1.6 or higher is required.</li>
      <li>Eclipse Indigo (Version 3.7.2) or higher is required.</li>
      <li>This version of ADT is designed for use with
        <a href="{@docRoot}tools/sdk/tools-notes.html">SDK Tools r22.6.1</a>.
        If you haven't already installed SDK Tools r22.6.1 into your SDK, use the
        Android SDK Manager to do so.</li>
    </ul>
  </dd>

  <dt>General Notes:</dt>
  <dd>
    <ul>
      <li>Fixed a problem where the Android Virtual Device Manager could not create new
          virtual devices. (<a href="http://b.android.com/66661">Issue 66661</a>)</li>
      <li><p>Fixed a problem with virtual devices created using ADT 22.3 or earlier.</p>
          <p>If you created an Android Virtual Device using ADT 22.3 or earlier, the
          AVD may be listed as <em>broken</em> in the AVD Manager in 22.6.1. To fix
          this problem, select the virtual device on the AVD Manager and click
          <strong>Repair</strong>.</p>
      </li>
      <li>Fixed a problem with the command line tools when creating virtual devices.
          (<a href="http://b.android.com/66740">Issue 66740</a>)</li>
      <li>Fixed a problem with the command line <code>lint</code> script.</li>
    </ul>
  </dd>

  <dt>Known Issues:</dt>
  <dd>
    <p>When you create an Android virtual device using the Nexus 5 device definition,
       you must enable the <em>Use Host GPU</em> option, otherwise the virtual device
       will not start.</p>
  </dd>
</dl>
</div>
</div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt=""/>ADT 22.6.0</a> <em>(March 2014)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>
  <dt>Dependencies:</dt>

  <dd>
    <ul>
      <li>Java 1.6 or higher is required.</li>
      <li>Eclipse Indigo (Version 3.7.2) or higher is required.</li>
      <li>This version of ADT is designed for use with
        <a href="{@docRoot}tools/sdk/tools-notes.html">SDK Tools r22.6</a>.
        If you haven't already installed SDK Tools r22.6 into your SDK, use the
        Android SDK Manager to do so.</li>
    </ul>
  </dd>

  <dt>General Notes:</dt>
  <dd>
    <ul>
      <li><p>Added support for Java 7 language features like multi-catch, try-with-resources,
            and the diamond operator. These features require version 19 or higher
            of the Build Tools. Try-with-resources requires <code>minSdkVersion</code>
            19; the rest of the new language features require
            <code>minSdkVersion</code> 8 or higher.</p>
          <p>To use the new language features after installing ADT 22.6.0, ensure
            that you run Eclipse on JDK 7 and change your application project settings
            to use JDK 7.</p>
      </li>
      <li>Added new lint checks:
        <ul>
          <li>Security:
            <ul>
              <li>Look for code potentially affected by a <code>SecureRandom</code>
                  vulnerability.</li>
              <li>Check that calls to <code>checkPermission</code> use the return
                  value.</li>
            </ul>
          </li>
          <li>Check that production builds do not use mock location providers.</li>
        </ul>
      </li>
      <li>Updated the New Project templates to include the
          <a href="{@docRoot}tools/support-library/features.html#v7-appcompat">
          v7 appcompat Support Library</a>.</li>
      <li>Updated the Android tools libraries to include the rendering sandbox,
          improvements for converting resource XML string declarations to layout
          strings, and other updates.</li>
      <li>Improved the Gradle export wizard. Note that the new importer in Android
          Studio is the preferred way to migrate existing projects to Gradle.</li>
      <li>Fixed a deadlock during startup.</li>
      <li>Fixed an issue with RenderScript support. Using RenderScript support mode
          now requires version 19.0.3 of the Build Tools.</li>
    </ul>
  </dd>

</dl>
</div>
</div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt=""/>ADT 22.3.0</a> <em>(October 2013)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>
  <dt>Dependencies:</dt>

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

  <dt>General Notes:</dt>
  <dd>
    <ul>
      <li>Added support for Android 4.4 (API level 19).</li>
      <li>Fixed problem with parsing view hierarchies containing classes in the java.*
        name space.</li>
      <li>Fixed problem importing Android projects that have the same name as an existing
        project.</li>
    </ul>
  </dd>

</dl>
</div>
</div>


<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt=""/>ADT 22.2.1</a> <em>(September 2013)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>
  <dt>Dependencies:</dt>

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

  <dt>General Notes:</dt>
  <dd>
    <ul>
      <li>Fixed problem with templates that causes the new project wizard to hang.
       (<a href="http://b.android.com/60149">Issue 60149</a>)</li>
    </ul>
  </dd>

</dl>
</div>
</div>


<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt=""/>ADT 22.2</a> <em>(September 2013)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>
  <dt>Dependencies:</dt>

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

  <dt>General Notes:</dt>
  <dd>
    <ul>
      <li>Updated build tools to allow use of RenderScript on older versions of Android
       using new features in the
       <a href="{@docRoot}tools/support-library/features.html#v8">Support Library</a>.</li>
      <li>Reverted signing changes that sometimes trigger a signing verification problem on older
        platforms.</li>
      <li>Fixed problem with gradle export function for the Windows platform.</li>
    </ul>
  </dd>

</dl>
</div>
</div>


<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt=""/>ADT 22.0.5</a> <em>(July 2013)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>
  <dt>Dependencies:</dt>

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

  <dt>General Notes:</dt>
  <dd>
    <ul>
      <li>Fixed RenderScript compilation issue for Windows platforms.</li>
      <li>Updated <a href="{@docRoot}tools/help/systrace.html">Systrace</a> report generation
        in the Monitor and DDMS perspectives.</li>
    </ul>
  </dd>

</dl>
</div>
</div>


<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt=""/>ADT 22.0.4</a> <em>(July 2013)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>
  <dt>Dependencies:</dt>

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

  <dt>General Notes:</dt>
  <dd>
    <ul>
      <li>Fixed problem with compiling RenderScript code.</li>
      <li>Improved Gradle export with better workflow and error reporting.</li>
      <li>Improved Gradle multi-module export feature.</li>
      <li>Updated build logic to force exporting of the classpath containers unless you are using
        the Maven plugin.</li>
    </ul>
  </dd>

</dl>
</div>
</div>


<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt=""/>ADT 22.0.1</a> <em>(May 2013)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>
  <dt>Dependencies:</dt>

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

  <dt>General Notes:</dt>
  <dd>
    <ul>
      <li>Fixed issue with Lint ServiceCast check and fully qualified class names.
        (<a href="http://code.google.com/p/android/issues/detail?id=55403">Issue 55403</a>)</li>
      <li>Fixed crash issue with Lint ArraySizeDetector check.
        (<a href="http://code.google.com/p/android/issues/detail?id=54887">Issue 54887</a>)</li>
      <li>Fixed problem with the Gradle export feature.</li>
      <li>Fixed version check issue for the ADT Plugin.</li>
    </ul>
  </dd>

</dl>
</div>
</div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt=""/>ADT 22.0.0</a> <em>(May 2013)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>
  <dt>Dependencies:</dt>

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

  <dt>General Notes:</dt>
  <dd>
    <ul>
      <li>Updated tools to allow libraries to share the same package name as the applications
        that use them.</li>
      <li>Added new Lint checks, including checks for layout consistency,
        {@link android.widget.RelativeLayout} siblings, {@link android.os.Parcel} creator,
        JavaScript interfaces, {@link android.app.Service} casting, quantity strings, manifest
        typos, orientation tags in layouts, overlapping names for 9-patches and images, and class
        existence checks.</li>
      <li>Updated build tools to sign applications using the BouncyCastle library instead of
        relying on Sun JVM specific APIs.</li>
      <li>Added an experimental Gradle build export feature for moving projects into the
        <a href="{@docRoot}sdk/installing/studio.html">Android Studio</a> environment or for
        setting up command-line builds with Gradle.
        (<a href="http://tools.android.com/tech-docs/new-build-system">more info</a>)</li>
    </ul>
  </dd>

</dl>
</div>
</div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt=""/>ADT 21.1.0</a> <em>(February 2013)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>
  <dt>Dependencies:</dt>

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

  <dt>General Notes:</dt>
  <dd>
    <ul>
      <li>Added new <a href="{@docRoot}tools/projects/templates.html">code templates</a> for
        notifications, blank fragments and list fragments.</li>
      <li>Added support for resource rename refactoring. Renaming a resource XML file, drawable
        icon, an {@code R.} field name or ID in the layout editor invokes a refactoring routine
        to update all resource references.</li>
      <li>Added more than 15 new Lint checks, including checks for overriding older APIs, XML
        resource problems, graphic asset issues and manifest tags.
      <li>Updated XML Editor to respond to refactoring shortcut keys such as <strong>Refactor
        &gt; Rename</strong>.</li>
      <li>Updated XML Editor to improve double click handling.</li>
      <li>Added code completion improvements for custom views, theme references and class
        references. For example, code completion in a {@code &lt;fragment android:name="" &gt;} tag
        now suggests completion with a list of fragment classes. Similarly, code completion in the
        manifest now offers implementations suitable for the given tag.</li>
      <li>Updated the <strong>Project Import</strong> dialog so that it shows a table for all
        imported projects where you can edit the name of the imported project.</li>
      <li>Added support for layout aliases in the Layout Editor.</li>
    </ul>
  </dd>

  <dt>Bug fixes:</dt>
  <dd>
    <ul>
      <li>Fixed issued with refactoring support for renaming and moving classes and packages.
      </li>
    </ul>
  </dd>

</dl>
</div>
</div>



<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt=""/>ADT 21.0.1</a> <em>(December 2012)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>
  <dt>Dependencies:</dt>

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

  <dt>General Notes:</dt>
  <dd>
    <ul>
      <li>Build
        <ul>
          <li>Updated build to detect and handle package name conflicts between an application and
            the libraries it depends on. Libraries cannot share package names unless all of them
            share the same package name.
            (<a href="http://code.google.com/p/android/issues/detail?id=40152">Issue 40152</a>,
             <a href="http://code.google.com/p/android/issues/detail?id=40273">Issue 40273</a>)
          </li>
          <li>Added a flag to disable dex merging to deal with cases where merging could generate
            a broken dex file. If this happens to your project, add the following setting to your
            {@code project.properties} file: {@code dex.disable.merger=true} This setting
            causes the build system to revert to the older, slower dex processing that does not
            pre-dex libraries.</li>
        </ul>
      </li>
    </ul>
  </dd>

  <dt>Bug fixes:</dt>
  <dd>
    <ul>
      <li>Lint
        <ul>
          <li>Corrected check for {@code 0px} values in style XML elements.
            (<a href="http://code.google.com/p/android/issues/detail?id=39601">Issue 39601</a>)
            </li>
          <li>Fixed incorrect flagging of formatting strings.
            (<a href="http://code.google.com/p/android/issues/detail?id=39758">Issue 39758</a>)
            </li>
          <li>Fixed problem where {@code tools:ignore} directive in the manifest file was ignored
            by the Lint tool.
            (<a href="http://code.google.com/p/android/issues/detail?id=40136">Issue 40136</a>)
            </li>
          <li>Fixed problem with flagging a wakelock release inside a conditional.
            (<a href="http://code.google.com/p/android/issues/detail?id=40424">Issue 40424</a>)
            </li>
          <li>Fixed incorrect reporting of missing {@code layout_width} and {@code layout_height}
            XML fields.
            (<a href="http://code.google.com/p/android/issues/detail?id=38958">Issue 38958</a>)
            </li>
          <li>Fixed handling of custom namespace attributes.</li>
          <li>Added fixes for filtering out library project warnings.</li>
          <li>Removed warnings about missing classes before a build.</li>
        </ul>
      </li>

      <li>Android Virtual Device Manager
        <ul>
          <li>Fixed handling of {@code devices.xml} file in other locales.
            (<a href="http://code.google.com/p/android/issues/detail?id=39704">Issue 39704</a>)
            </li>
          <li>Fixed problem where the AVD Manager would not allow you to create a new AVD using
            the <strong>4.0" WVGA</strong> or <strong> 4.65" 720p</strong> device definitions.
            (<a href="http://code.google.com/p/android/issues/detail?id=39939">Issue 39939</a>)
            </li>
          <li>Fixed problem where deleted device definitions were not removed.</li>
          <li>Fixed incorrect screen resolution setting for the Nexus One device definition.</li>
          <li>Fixed problem where writing of an AVD settings file does not properly escape
            {@code \\} path characters.</li>
        </ul>
      </li>

      <li>Layout Editor
        <ul>
          <li>Fixed problem where layout cannot render strings starting with {@code \@}.
            (<a href="http://code.google.com/p/android/issues/detail?id=40222">Issue 40222</a>)
            </li>
          <li>Fixed preview error when using the {@code android:numColumns} attribute in a layout.
            (<a href="http://code.google.com/p/android/issues/detail?id=21296">Issue 21296</a>)
            </li>
          <li>Fixed compatibility issue with IntelliJ layout preview caused by layout editor
            deleting the {@code .android/devices.xml} file.</li>
          <li>Added fixes to editor for {@link android.widget.GridLayout}.</li>
        </ul>
      </li>

      <li>Added support for {@code ldrtl} and {@code ldltr} resource qualifiers.</li>
      <li>Fixed problem where Android XML resources mistakenly get compiled into {@code *.out.xml}
        output files, causing project errors.
        (<a href="http://code.google.com/p/android/issues/detail?id=3767">Issue 3767</a>)</li>
      <li>Fixed error which caused resource refresh operations to fail.
        (<a href="http://code.google.com/p/android/issues/detail?id=39213">Issue 39213</a>)</li>
      <li>Updated the Custom View code template handle to library projects properly.</li>
      <li>Fixed support for library string resources ({@code strings.xml}) when exporting an
        application that references a library with string resources.
        (<a href="http://code.google.com/p/android/issues/detail?id=39751">Issue 39751</a>)</li>
      <li>Fixed problem where bad AVD setting files caused Device Manager and graphical XML editors
        to crash.
        (<a href="http://code.google.com/p/android/issues/detail?id=40400">Issue 40400</a>)</li>
    </ul>
  </dd>

</dl>
</div>
</div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt=""/>ADT 21.0.0</a> <em>(November 2012)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>
  <dt>Dependencies:</dt>

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

  <dt>General improvements:</dt>
  <dd>
    <ul>
      <li>Layout Editor
        <ul>
          <li>Added multi-configuration editing feature that was previewed at Google I/O
            developer tools talk in June. For an overview, see the
            <a href="https://www.youtube.com/watch?v=Erd2k6EKxCQ">session recording</a>
            (starting at: 20:30).</li>
          <li>Modified the layout logic so that setting a {@link android.app.Fragment} layout or
            a {@link android.widget.ListView} preview layout is now applied not
            only to the current layout but to all other configurations of the same layout.</li>
          <li>Updated the editor to include resources from library projects in the resource chooser,
            XML code completion, Go To Declaration and other editing contexts.</li>
          <li>Updated the editor so that it  no longer forces all variations of a single
            layout into a single editor. You can, for example, open both the landscape and portrait
            versions of a layout as separate editors and quickly switch between them, or even
            re-dock your editors to edit them simultaneously. If you prefer the previous behavior,
            set the new option in <strong>Preferences &gt; Android &gt; Editors</strong> to use the
            old behavior.</li>
          <li>Improved the handling of {@link android.widget.RelativeLayout} in the layout editor,
            so that dragging widgets around and deleting them should now result in the layout
            working more intuitively. In particular, deleting a widget causes the constraints
            flowing through the deleted widgets to be intelligently adjusted, and when moving
            widgets the constraints are preserved whenever possible.</li>
          <li>Added the ability to specify a default action in Layout Editor views, which you can
            invoke with the <em>F2</em> key. For example, after dropping a button or text view,
            you can press <em>F2</em> to edit its text.</li>
          <li>Added renaming of an ID (changing the {@code android:id} attribute) by invoking the
            <strong>Rename</strong> shortcut.</li>
          <li>Adding a new locale is now easier with the new <strong>Add Locale...</strong> action
            in the locale menu. In addition to creating the new values folder, it lets you edit an
            initial set of translations for the new locale.</li>
          <li>Updated the editor so that when a custom view (or incorrectly configured view)
            throws an exception during initialization or painting, part of the relevant stack trace
            is shown inline in the layout editor, and you can click on the stack frames to jump to
            the relevant location</li>
          <li>Improved the editor error display to show the relevant part of a stack trace
            when a custom view throws exceptions during rendering or construction, and provides
            hyperlinks to the stack frames.</li>
          <li>Improved the stack trace display for exceptions for custom views that are generated
            during rendering.</li>
          <li>Updated the configuration chooser so that it shows full language and region names (not
            just 2-letter codes) in menus, in the configuration dialog and other editing contexts.
            </li>
          <li>Improved the device menu in the configuration chooser.</li>
        </ul>
      </li>
      <li>Lint
        <ul>
          <li>Added over 25 new lint rules for resources, locale settings, layout
            files, incorrect use of {@link android.util.SparseArray} and
            {@link android.os.PowerManager.WakeLock} and manifest issues.</li>
          <li>Improved the XML export function to support the
            <a href="https://wiki.jenkins-ci.org/display/JENKINS/Android+Lint+Plugin">Jenkins Lint
            plugin</a>.
          </li>
        </ul>
      </li>
      <li>Editors
        <ul>
          <li>Modified the plugin to remember which editor mode (text or graphical) you were last
            using for each type of editor (layout, manifest or values) and uses that mode for newly
            opened files. This means that if you prefer to work with just XML, the editors start
            showing you XML text editors after you have switched to them for each type of editor.</li>
          <li>Updated XML code completion so that it completes (and shows documentation for) theme
            references, such as {@code ?android:attr/dividerHeight}.</li>
        </ul>
      </li>
      <li>Android Virtual Devices (AVD)
        <ul>
          <li>Added new <strong>Device Definitions</strong> tab in the AVD Manager for configuring
            standard size and Nexus virtual devices.</li>
          <li>Improved emulators so that they launch with a skin that is dynamically generated and
            reflects the actual hardware configured in the AVD Manager.</li>
        </ul>
      </li>
      <li>Improved the new template mechanism, cleaned up the existing templates and added
        several new templates</li>
      <li>Added ability to export images and frames in the Tracer for OpenGL ES tool.</li>
      <li>Integrated the Systrace tool into the DDMS perspective.</li>
      <li>Improved the JUnit test runner to allow a test to be run on all connected devices
        simultaneously.</li>
    </ul>
  </dd>

  <dt>Bug fixes:</dt>
  <dd>
    <ul>
      <li>Fixed the editors so that attributes and resources specified by XML files in the
        {@code /values} directory are validated when files are saved.</li>
      <li>Added a workaround for a bug in Eclipse on Mac OS X 10.8 where the Property Sheet was not
        working properly.</li>
    </ul>
  </dd>

</dl>

</div>
</div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt=""/>ADT 20.0.3</a> <em>(August 2012)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>
  <dt>Dependencies:</dt>

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

  <dt>Bug fixes:</dt>
  <dd>
    <ul>
      <li>Fixed issue with keyboard shortcuts for editors in Eclipse Juno (Version 4.x).</li>
      <li>Fixed problem with cached download lists in SDK Manager.</li>
    </ul>
  </dd>

</dl>

</div>
</div>


<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt=""/>ADT 20.0.2</a> <em>(July 2012)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>
  <dt>Dependencies:</dt>

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

  <dt>Bug fixes:</dt>
  <dd>
    <ul>
      <li>Fixed keybindings in various XML editors for Eclipse 4.x.</li>
      <li>Fixed a bug that occurs when you try to create layout configurations that already
        exist.</li>
    </ul>
  </dd>

</dl>

</div>
</div>


<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt=""/>ADT 20.0.1</a> <em>(July 2012)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>
  <dt>Dependencies:</dt>

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

  <dt>Bug fixes:</dt>
  <dd>
    <ul>
      <li>Fixed issue in the New Project Wizard related to installation of the Support Library.</li>
      <li>Fixed several issues with New Project Wizard related to templates.</li>
      <li>Fixed issue with the text-based launcher icon in New Project Wizard.</li>
      <li>Fixed issue with sticky error markers in Java files.</li>
      <li>Fixed problem with manifest merger when exporting release {@code .apk} files.</li>
      <li>Fixed NDK support to automatically find include path on Windows.</li>
      <li>Fixed editor startup exception for new configurations where editor would come up blank.</li>
      <li>Added support for {@code xxhdpi} density, which was included in API Level 16.</li>
      <li>Fixed a bug in the {@code lint} check for unprotected broadcast receivers to ignore
unprotected receivers for default Android actions.</li>
    </ul>
  </dd>

</dl>

</div>
</div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt=""/>ADT 20.0.0</a> <em>(June 2012)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>
  <dt>Dependencies:</dt>

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

  <dt>General improvements:</dt>
  <dd>
    <ul>
      <li>Application Templates
        <ul>
          <li>Added Android application templates to allow developers to create specific types of
applications faster, using Android-recommended best practices.</li>
        </ul>
      </li>
      <li>Performance
        <ul>
          <li>Improved overall ADT performance and fixed memory issues. Loading SDK data
should be up to 30% faster.</li>
        </ul>
      </li>
      <li>Tracer for GLES
        <ul>
          <li>Added new perspective view and tools for tracing OpenGL calls for an application and
track the visual results of each call. (<a href="{@docRoot}tools/help/gltracer.html">more info</a>)</li>
        </ul>
      </li>
      <li>Lint
        <ul>
          <li>Added new Lint rules for manifest registrations, duplicate activity
registrations, security checking, correct use of Toast, missing SharedPreferences commit()
calls, Fragment class instantiation, and handler leaks.</li>
          <li>Created tighter integration of lint with the layout editor. (<a
href="http://tools.android.com/recent/lintfeedback">more info</a>)</li>
          <li>Added execution of Lint tool on save option for Java files. (<a
href="http://tools.android.com/recent/lintonsave">more info</a>)</li>
        </ul>
      </li>
      <li>Layout Editor (<a href="http://tools.android.com/recent/newlayouteditorpropertysheet">more
info</a>)
        <ul>
          <li>Added highlighting (in bold) for important attributes, inline preview of colors and
images, including the corresponding resource name.</li>
          <li>Added display of default values, when available.</li>
          <li>Added completion of resource values and enum and flag constants.</li>
          <li>Added support for displaying advanced properties, and nested properties for better
categorization, for example, layout params are listed first as a single nested property.</li>
          <li>Display Tooltips over the attribute names, not values, so they never obscure the value
column.</li>
          <li>Provided checkbox support for boolean values.</li>
          <li>Added support for switching between alphabetical and natural sort orders.</li>
          <li>Improved layout editor tool's window management for more usable editing views.</li>
          <li>Improved the layout editor's configuration chooser header user interface.</li>
        </ul>
      </li>
      <li>XML Editing
        <ul>
          <li>Added go to declaration support for theme references (?android:attr, ?attr:).</li>
          <li>Improved code completion in style definitions.</li>
          <li>Improved code completion for the {@code minSdkVersion} and {@code targetSdkVersion}
attributes in manifest files so that version descriptions are displayed for each of the API
levels</li>
          <li>Provided support for code completion of custom attributes for custom views,
including current edits to the style files.</li>
          <li>Improved synchronization of text and graphic editors with the XML outline view,
including outline changes and display of current selection.</li>
        </ul>
      </li>
      <li>Build System
        <ul>
          <li>Added automatic merging of library project manifest files into the including
project's manifest. Enable this feature with the {@code manifestmerger.enabled} property.</li>
          <li>Added automatic ProGuard support for the {@code aapt -G} flag. This change causes
the build system to generate a temporary ProGuard keep-rules file containing classes that
are referenced from XML files (such as custom views) and pass this to ProGuard at shrink-time. This
can make the resulting APK much smaller when using just a small portion of a large library project
(such as the Android Support library), since the catch-all rules to keep all custom views from the
default ProGuard configuration file have also been removed.</li>
        </ul>
      </li>
      <li>Added support building and debugging NDK-based Android projects.</li>
      </li>
      <li>Added support to the Asset Studio Wizard for padding and turning off background
shapes.</li>
      <li>Improved LogCat to allow developers to set colors for different priorities.</li>
      <li>Improved app Run functionality to allow running on multiple devices with a single launch.
The target tab in the launch configuration dialog includes an option to allow launching on all
connected devices, with the option to further narrow the list to just physical devices or just
emulators. (This feature is available only for Run configurations, and not for Debug or JUnit
tests.)</li>
    <ul>
  </dd>

  <dt>Bug fixes:</dt>
  <dd>
    <ul>
      <li>Fixed a number of issues where Lint incorrectly reported code errors or failed to
flag code issues.</li>
      <li>Fixed several bugs in the layout editor.</li>
      <li>Fixed compatibility issues with Eclipse 4.x (Juno), including cut/copy/paste
functions.</li>
    </ul>
  </dd>

</dl>

</div>
</div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt=""/>ADT 18.0.0</a> <em>(April 2012)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>
  <dt>Dependencies:</dt>

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

  <dt>Bug fixes:</dt>
  <dd>
    <ul>
      <li>Fixed problem where exporting release package does not recompile libraries in release
        mode.
        (<a href="http://code.google.com/p/android/issues/detail?id=27940">Issue 27940</a>)</li>
    </ul>
  </dd>

</dl>

</div>
</div>


<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt=""/>ADT 17.0.0</a> <em>(March 2012)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>
  <dt>Dependencies:</dt>

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

  <dt>General improvements:</dt>
  <dd>
    <ul>
      <li>New build features
        <ul>
          <li>Added feature to automatically setup JAR dependencies. Any {@code .jar} files in the
          {@code /libs} folder are added to the build configuration (similar to how the Ant build
          system works). Also, {@code .jar} files needed by library projects are also automatically
          added to projects that depend on those library projects.
          (<a href="http://tools.android.com/recent/dealingwithdependenciesinandroidprojects">more
          info</a>)</li>
          <li>Added a feature that allows you to run some code only in debug mode. Builds now
generate a class called {@code BuildConfig} containing a {@code DEBUG} constant that is
automatically set according to your build type. You can check the ({@code BuildConfig.DEBUG})
constant in your code to run debug-only functions.</li>
          <li>Added support for custom views with custom attributes in libraries. Layouts using
custom attributes must use the namespace URI {@code http://schemas.android.com/apk/res-auto} instead
of the URI that includes the app package name. This URI is replaced with the app specific one at
build time.</li>
        </ul>
      </li>
      <li>Improved Lint features. See the <a href="{@docRoot}tools/sdk/tools-notes.html">SDK Tools r17</a>
release notes.</li>
      <li>Improved the Lint user interface
        <ul>
          <li>Added <strong>Run Lint</strong> toolbar action with a dropdown menu for selecting
specific (or all) projects, clearing results and other actions.</li>
          <li>Updated the results window to be organized as a tree rather than a flat list. Each
issue type has a single top level item, which makes it easier to quickly scan through the reported
issues and narrow down to the issues you are most interested in.</li>
          <li>Added many new toolbar actions to the results window, including expand/collapse,
ignore in file, ignore in project, ignore everywhere, show options, and configure columns.</li>
          <li>Added new column options for the <strong>Lint Warnings</strong> tab, such as
category, priority, project, file and line. The column selection (as well as the column sizes) are
persisted. You can also click on columns to sort by those values.</li>
          <li>Added Enable All and Disable All buttons to the Lint Options dialog, and a search
filter textbox to filter by issue id, summary and severity.</li>
        </ul>
      </li>
      <li>Added Quick Outline for XML editors (Ctrl-O, Command-O). This feature shows the structure
of the current file including icons and ids, lets you filter and quickly jump to specific ids.</li>
      <li>Updated the resource chooser to shows the resolved value for resources. For example,
when selecting {@code @string/hello} the chooser displays a resolved value such as "Hello World").
The resource chooser also now allows you to edit the chosen value directly.</li>
      <li>Updated Layout Editor so that it does not assign default ids to layouts, includes and
merge tags. This behavior tended to pollute the namespace with a lot of unused resources since
layouts are not usually manipulated via code, or referenced from XML. (The RelativeLayout editor
automatically assigns ids to views without ids when pointing to them.)</li>
      <li>Added ability to export screenshots from the Layout Editor</li>
    </ul>
  </dd>

  <dt>Bug fixes:</dt>
  <dd>
    <ul>
      <li>Fixed problem using Layout Editor with {@link android.widget.SlidingDrawer} which could
        not be dragged into the layout on some platforms.</li>
      <li>Fixed preview rendering for {@link android.widget.SlidingDrawer} and
        {@link android.widget.TabHost}.
        (<a href="http://code.google.com/p/android/issues/detail?id=23022">Issue 23022</a>).</li>
      <li>Fixed issues that could prevent layout rendering due to unresolvable resources.
        (<a href="http://code.google.com/p/android/issues/detail?id=21046">Issue 21046</a>,
        <a href="http://code.google.com/p/android/issues/detail?id=21051">Issue 21051</a>)</li>
      <li>Fixed a bug in resource chooser which made some types of framework resources impossible to
select. (<a href="http://code.google.com/p/android/issues/detail?id=20589">Issue 20589</a>)</li>
      <li>Fixed a bug in the formatter where a certain whitespace pattern could result in a
        non-space character getting deleted.
        (<a href="http://code.google.com/p/android/issues/detail?id=23940">Issue 23940</a>)</li>
      <li>Fixed a locale bug affecting Turkish locales in particular.
        (<a href="http://code.google.com/p/android/issues/detail?id=23747">Issue 23747</a>)</li>
      <li>Fixed an issue where dex complains about duplicate classes in cases where a Library
        Project depends on the same jar files or Java-only projects.</li>
      <li>Fixed an issue where test projects had to independently reference the library projects
        used by an app project. Now referencing only the app project is enough.</li>
    </ul>
  </dd>

</dl>

</div>
</div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt=""/>ADT 16.0.1</a> <em>(December 2011)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>
  <dt>Dependencies:</dt>

  <dd>
    <ul>
      <li>Eclipse Helios (Version 3.6) or higher is required.</li>
      <li>This version of ADT is designed for use with
        <a href="{@docRoot}tools/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="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt=""/>ADT 16.0.0</a> <em>(December 2011)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>
  <dt>Dependencies:</dt>

  <dd>
    <ul>
      <li>Eclipse Helios (Version 3.6) or higher is required for ADT 16.0.0.</li>
      <li>This version of ADT is designed for use with
        <a href="{@docRoot}tools/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="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt=""/>ADT 15.0.1</a> <em>(November 2011)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>
  <dt>Dependencies:</dt>

  <dd>This version of ADT is designed for use with
    <a href="{@docRoot}tools/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="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt=""/>ADT 15.0.0</a> <em>(October 2011)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>

<dt>Dependencies:</dt>

<dd>This version of ADT is designed for use with
  <a href="{@docRoot}tools/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 a scrolling issue in the new Logcat panel of DDMS.</li>
</ul>
</dd>
</dl>

</div>
</div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt=""/>ADT 14.0.0</a> <em>(October 2011)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>

<dt>Dependencies:</dt>

<dd>This version of ADT is designed for use with
  <a href="{@docRoot}tools/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="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt=""/>ADT 12.0.0</a> <em>(July 2011)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>

<dt>Dependencies:</dt>

<dd>This version of ADT is designed for use with
<a href="{@docRoot}tools/sdk/tools-notes.html">SDK Tools r12</a>. If you haven't
already installed SDK Tools r12 into your SDK, use
the Android SDK 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="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt=""/>ADT 11.0.0</a> <em>(June 2011)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>

<dt>Dependencies:</dt>

<dd>This version of ADT is designed for use with SDK Tools r11. If you haven't
already installed SDK Tools r11 into your SDK, use the Android SDK 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="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt=""/>ADT 10.0.1</a> <em>(March 2011)</em>
  </p>

  <div class="toggle-content-toggleme">

<dl>

<dt>Dependencies:</dt>

<dd>This version of ADT is designed for use with SDK Tools r10. If you haven't
already installed SDK Tools r10 into your SDK, use the Android SDK 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>Fixed an 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="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt=""/>ADT 10.0.0</a> <em>(February 2011)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>

<dt>Dependencies:</dt>

<dd>This version of ADT is designed for use with SDK Tools r10. If you haven't
already installed SDK Tools r10 into your SDK, use the Android SDK 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="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt=""/>ADT 9.0.0</a> <em>(January 2011)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>

<dt>Dependencies:</dt>

<dd>This version of ADT is designed for use with SDK Tools r9. If you haven't
already installed SDK Tools r9 into your SDK, use the Android SDK 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="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt=""/>ADT 8.0.1</a> <em>(December 2010)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>

<dt>Dependencies:</dt>

<p>This version of ADT is designed for use with SDK Tools r8. If you haven't
already installed SDK Tools r8 into your SDK, use the Android SDK 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="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt=""/>ADT 8.0.0</a> <em>(December 2010)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>

<dt>Dependencies:</dt>

<p>This version of ADT is designed for use with SDK Tools r8. If you haven't
already installed SDK Tools r8 into your SDK, use the Android SDK 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}tools/help/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 plugin for Eclipse.</li>
  <li>Android launch configurations no longer recompile the whole workspace on launch.</li>
  <li>The location of <code>android.jar</code> source and javadoc can now be configured.</li>
</ul>
</dd>
</dl>
 </div>
</div>


<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt=""/>ADT 0.9.9</a> <em>(September 2010)</em>
  </p>

  <div class="toggle-content-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="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt=""/>ADT 0.9.8</a> <em>(September 2010)</em>
  </p>

  <div class="toggle-content-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}tools/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 it properly sets up the link between the main project and the library
project.</li>
</ul>
</dd>
</dl>
 </div>
</div>


<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt=""/>ADT 0.9.7</a> <em>(May 2010)</em>
  </p>

  <div class="toggle-content-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}tools/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="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt=""/>ADT 0.9.6</a> <em>(March 2010)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>
<dt>Dependencies:</dt>

<dd><p>This version of ADT 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 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 packages.</li>
<li>Improves support for dependency between packages.</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 an issue where add-ons without an optional library would not show up as valid
targets for application launches.</li>
<li>Resolves a possible crash when launching applications.</li>
</ul>
</dd>
</dl>
 </div>
</div>

<div class="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt=""/>ADT 0.9.5</a> <em>(December 2009)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>
<dt>Dependencies:</dt>

<dd><p>This version of ADT 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
Manager to download the latest SDK Tools into your SDK. For more information,
see <a href="{@docRoot}sdk/exploring.html">Exploring the SDK</a>.</p>
</dd>

<dt>General notes:</dt>
<dd>
<ul>
<li>The AVD Launch dialog now allows you to set the scale value.</li>
<li>Fixes a potential NullPointerException in the SDK Manager when you launch an AVD that does not
  have a skin name specified.</li>
<li>Fixes an XML validation issue in 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="toggle-content closed">
  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
      alt=""/>ADT 0.9.4</a> <em>(October 2009)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>
<dt>Dependencies:</dt>

<dd><p>This version of ADT 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
Manager to download the latest SDK Tools into your SDK. For more information,
see <a href="{@docRoot}sdk/exploring.html">Exploring the SDK</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>
