page.title=ADT Plugin Release Notes

@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 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 class="note"><strong>Note:</strong>
If you have been using Eclipse with ADT, be aware that <a
href="{@docRoot}tools/studio/index.html">Android Studio</a> is now the official IDE
for Android, so you should migrate to Android Studio to receive all the
latest IDE updates. For help moving projects,
see <a href="/sdk/installing/migrate.html">Migrating to Android
Studio</a>.</p>

<p>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>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.6</a> <em>(March 2015)</em>
  </p>

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

  <dd>
    <ul>
      <li>Java 7 or higher is required if you are targeting Android 5.0 and higher.</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 r24.1.2</a>.
        If you haven't already installed SDK Tools r24.1.2 into your SDK, use the
        Android SDK Manager to do so.</li>
    </ul>
  </dd>

  <dt>General Notes:</dt>
  <dd>
    <ul>
        <li>Fixed issues with the rendering library.</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.4</a> <em>(October 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 Android 5.0 and higher.</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.4</a>.
        If you haven't already installed SDK Tools r23.0.4 into your SDK, use the
        Android SDK Manager to do so.</li>
    </ul>
  </dd>

  <dt>General Notes:</dt>
  <dd>
    <ul>
        <li>Fixed duplicate devices in AVD for Wear and TV.</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.3</a> <em>(August 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 Android 5.0 and higher.</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>Fixed an issue where ADT displayed a <code>NullPointerException</code> warning dialog
          when a valid SDK was not configured. (<a href="http://b.android.com/73313">Issue
          73313</a>)</li>
      <li>Fixed a minor issue with RenderScript support.</li>
      <li>Disabled APK compression.</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.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 Android 5.0 and higher.</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 Android 5.0 and higher.</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 standalone 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>
