page.title=SDK Tools
excludeFromSuggestions=true
@jd:body

<p>SDK Tools is a downloadable component for the Android SDK. It includes the
complete set of development and debugging tools for the Android SDK.</p>

<p>If you are new to the Android SDK, the <a
href="{@docRoot}sdk/index.html">SDK starter package</a> installs the
latest revision of the SDK Tools in the <code>&lt;sdk&gt;/tools</code> directory.</p>

<p>If you are already using the SDK and you want to update to the latest version
of the SDK Tools, use the <em>Android SDK Manager</em> to get the
update, rather than downloading a new SDK starter package. For more information
about how to update, see <a
href="{@docRoot}sdk/exploring.html#UpdatingComponents">Exploring the SDK</a>.</p>


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

<p>The sections below provide notes about successive releases of
the SDK Tools, as denoted by revision number. To determine what revision of the SDK
Tools you are using, refer to the "Installed Packages" listing in the Android SDK Manager. </p>

<p>For a summary of all known issues in SDK Tools, 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=""/>SDK Tools, Revision 23.0.2</a> <em>(July 2014)</em>
  </p>

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

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

    <dd>
      <ul>
        <li>Android SDK Platform-tools revision 19 or later.</li>
        <li>If you are developing in Eclipse with ADT, note that this version of SDK Tools is
          designed for use with ADT 23.0.2 and later. If you haven't already, update your
        <a href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin</a> to 23.0.2.</li>
        <li>If you are developing outside Eclipse, you must have
          <a href="http://ant.apache.org/">Apache Ant</a> 1.8 or later.</li>
      </ul>
    </dd>

    <dt>General Notes:</dt>
    <dd>
      <ul>
        <li>Added ProGuard <code>.bat</code> files that were missing.</li>
        <li>Added the <code>proguard-android.txt</code> file that was missing.</li>
        <li>Renamed the <code>lombok-ast-0.2.2.jar</code> file to <code>lombok-ast.jar</code>,
            which should allow running lint from the command line.</li>
      </ul>
    </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=""/>SDK Tools, Revision 23.0.0</a> <em>(June 2014)</em>
  </p>

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

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

    <dd>
      <ul>
        <li>Android SDK Platform-tools revision 19 or later.</li>
        <li>If you are developing in Eclipse with ADT, note that this version of SDK Tools is
          designed for use with ADT 23.0.0 and later. If you haven't already, update your
        <a href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin</a> to 23.0.0.</li>
        <li>If you are developing outside Eclipse, you must have
          <a href="http://ant.apache.org/">Apache Ant</a> 1.8 or later.</li>
      </ul>
    </dd>

    <dt>General Notes:</dt>
    <dd>
      <ul>
        <li>Added the Android Wear tools and system images.</li>
      </ul>
    </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=""/>SDK Tools, Revision 22.6.4</a> <em>(June 2014)</em>
  </p>

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

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

    <dd>
      <ul>
        <li>Android SDK Platform-tools revision 18 or later.</li>
        <li>If you are developing in Eclipse with ADT, note that this version of SDK Tools is
          designed for use with ADT 22.6.3 and later. If you haven't already, update your
        <a href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin</a> to 22.6.3.</li>
        <li>If you are developing outside Eclipse, you must have
          <a href="http://ant.apache.org/">Apache Ant</a> 1.8 or later.</li>
      </ul>
    </dd>

    <dt>General Notes:</dt>
    <dd>
      <ul>
        <li>Fixed an issue with the x86 emulator that caused Google Maps to crash.
            (<a href="http://b.android.com/69385">Issue 69385</a>)</li>
        <li>Fixed minor OpenGL issues.</li>
      </ul>
    </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=""/>SDK Tools, Revision 22.6.3</a> <em>(April 2014)</em>
  </p>

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

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

    <dd>
      <ul>
        <li>Android SDK Platform-tools revision 18 or later.</li>
        <li>If you are developing in Eclipse with ADT, note that this version of SDK Tools is
          designed for use with ADT 22.6.3 and later. If you haven't already, update your
        <a href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin</a> to 22.6.3.</li>
        <li>If you are developing outside Eclipse, you must have
          <a href="http://ant.apache.org/">Apache Ant</a> 1.8 or later.</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>
  </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=""/>SDK Tools, Revision 22.6.2</a> <em>(March 2014)</em>
  </p>

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

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

    <dd>
      <ul>
        <li>Android SDK Platform-tools revision 18 or later.</li>
        <li>If you are developing in Eclipse with ADT, note that this version of SDK Tools is
          designed for use with ADT 22.6.2 and later. If you haven't already, update your
        <a href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin</a> to 22.6.2.</li>
        <li>If you are developing outside Eclipse, you must have
          <a href="http://ant.apache.org/">Apache Ant</a> 1.8 or later.</li>
      </ul>
    </dd>

    <dt>General Notes:</dt>
    <dd>
      <ul>
        <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 with Nexus 5 Android virtual devices created from the command line
            where the SD card file system was read-only.</li>
      </ul>
    </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=""/>SDK Tools, Revision 22.6.1</a> <em>(March 2014)</em>
  </p>

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

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

    <dd>
      <ul>
        <li>Android SDK Platform-tools revision 18 or later.</li>
        <li>If you are developing in Eclipse with ADT, note that this version of SDK Tools is
          designed for use with ADT 22.6.1 and later. If you haven't already, update your
        <a href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin</a> to 22.6.1.</li>
        <li>If you are developing outside Eclipse, you must have
          <a href="http://ant.apache.org/">Apache Ant</a> 1.8 or later.</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>
  </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=""/>SDK Tools, Revision 22.6</a> <em>(March 2014)</em>
  </p>

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

    <dl>
    <dt>Dependencies:</dt>
    <dd>
      <ul>
        <li>Android SDK Platform-tools revision 18 or later.</li>
        <li>If you are developing in Eclipse with ADT, note that this version of SDK Tools is
          designed for use with ADT 22.6.0 and later. If you haven't already, update your
        <a href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin</a> to 22.6.0.</li>
        <li>If you are developing outside Eclipse, you must have
          <a href="http://ant.apache.org/">Apache Ant</a> 1.8 or later.</li>
      </ul>
    </dd>

    <dt>General Notes:</dt>
    <dd>
      <ul>
        <li><p>The command line <code>lint</code> script (<code>tools\lint.bat</code> on
            Windows platforms, <code>tools/lint</code> on other platforms) and the
            <code>lint</code> target on <code>ant</code> builds fail with the following
            error:</p>
            <p><code>Exception in thread "main" java.lang.NoClassDefFoundError:
            lombok/ast/AstVisitor</code></p>
            <p>As a temporary workaround, rename the file
              <code>tools\lib\lombok-ast-0.2.2.jar</code> to
            <code>tools\lib\lombok-ast.jar</code>.
            We will release an updated version of the tools with a fix for
            this issue as soon as possible.</p>
          </li>
        <li>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.</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>
            <li>Look for manifest values that are overwritten by values from Gradle build
                scripts.</li>
          </ul>
        </li>
        <li>Fixed a number of minor issues in the SDK and build system.</li>
        <li>Emulator:
          <ul>
            <li>Fixed a problem with the emulator shutting down immediately for Android 1.5
                on the Nexus One and Nexus S devices.
                (<a href="http://b.android.com/64945">Issue 64945</a>)</li>
            <li>Fixed a problem with port numbers longer than four digits.
                (<a href="http://b.android.com/60024">Issue 60024</a>)</li>
            <li>Fixed battery errors for the Nexus One and Nexus S devices.
                (<a href="http://b.android.com/39959">Issue 39959</a>)</li>
            <li>Fixed a problem with paths or arguments that contain
                spaces on Windows platforms.
                (<a href="http://b.android.com/18317">Issue 18317</a>)</li>
            <li>Fixed a problem with long path values on Windows platforms.
                (<a href="http://b.android.com/33336">Issue 33336</a>)</li>
            <li>Fixed a problem with the {@code -snapshot-list} command line
                option on 64-bit systems.
                (<a href="http://b.android.com/34233">Issue 34233</a>)</li>
          </ul>
        </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=""/>SDK Tools, Revision 22.3</a> <em>(October 2013)</em>
  </p>

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

    <dl>
    <dt>Dependencies:</dt>
    <dd>
      <ul>
        <li>Android SDK Platform-tools revision 18 or later.</li>
        <li>If you are developing in Eclipse with ADT, note that this version of SDK Tools is
          designed for use with ADT 22.3.0 and later. If you haven't already, update your
        <a href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin</a> to 22.3.0.</li>
        <li>If you are developing outside Eclipse, you must have
          <a href="http://ant.apache.org/">Apache Ant</a> 1.8 or later.</li>
      </ul>
    </dd>

    <dt>General Notes:</dt>
    <dd>
      <ul>
        <li>Added support for Android 4.4 (API level 19).</li>
        <li>Fixed a number of minor bugs in the SDK and build system.</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=""/>SDK Tools, Revision 22.2.1</a> <em>(September 2013)</em>
  </p>

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

    <dl>
    <dt>Dependencies:</dt>
    <dd>
      <ul>
        <li>Android SDK Platform-tools revision 16 or later.</li>
        <li>If you are developing in Eclipse with ADT, note that this version of SDK Tools is
          designed for use with ADT 22.2.1 and later. If you haven't already, update your
        <a href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin</a> to 22.2.1.</li>
        <li>If you are developing outside Eclipse, you must have
          <a href="http://ant.apache.org/">Apache Ant</a> 1.8 or later.</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>
        <li>Fixed crash when using the lint command line tool because of mis-matched library
          dependency. (<a href="http://b.android.com/60190">Issue 60190</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=""/>SDK Tools, Revision 22.2</a> <em>(September 2013)</em>
  </p>

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

    <dl>
    <dt>Dependencies:</dt>
    <dd>
      <ul>
        <li>Android SDK Platform-tools revision 16 or later.</li>
        <li>If you are developing in Eclipse with ADT, note that this version of SDK Tools is
          designed for use with ADT 22.2 and later. If you haven't already, update your
        <a href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin</a> to 22.2.</li>
        <li>If you are developing outside Eclipse, you must have
          <a href="http://ant.apache.org/">Apache Ant</a> 1.8 or later.</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>Moved the Systrace tool to the {@code &gt;sdk&lt;/platform-tools/} directory. </li>
        <li>Modified <a href="{@docRoot}tools/help/gltracer.html">Tracer for OpenGL ES</a> to
          support OpenGL ES 3.0.</li>
        <li>Lint
          <ul>
            <li>Fixed problem with lint not detecting custom namespaces.
              (<a href="http://b.android.com/55673">Issue 55673</a>)</li>
            <li>Fixed problem with the XML report including invalid characters.
              (<a href="http://b.android.com/56205">Issue 56205</a>)</li>
            <li>Fixed command-line execution of lint to work in headless mode to support execution
              by build servers. (<a href="http://b.android.com/55820">Issue 55820</a>)</li>
          </ul>
        </li>
        <li>Improved support for path names with spaces in the Windows command-line 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=""/>SDK Tools, Revision 22.0.5</a> <em>(July 2013)</em>
  </p>

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

    <dl>
    <dt>Dependencies:</dt>
    <dd>
      <ul>
        <li>Android SDK Platform-tools revision 16 or later.</li>
        <li>If you are developing in Eclipse with the
          <a href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin</a>, note that this version of
          SDK Tools is designed for use with ADT 22.0.5 and later. If you haven't already, update
          ADT to 22.0.5.</li>
        <li>If you are using <a href="{@docRoot}sdk/installing/studio.html">Android Studio</a>,
          note that this version of the SDK Tools is designed to work with Android Studio
          0.2.x and later.</li>
        <li>If you are developing without an integrated development environment (IDE), you must have
          <a href="http://ant.apache.org/">Apache Ant</a> 1.8 or later.</li>
      </ul>
    </dd>

    <dt>General Notes:</dt>
    <dd>
      <ul>
        <li>Fixed RenderScript compilation issue for Windows platforms with ant.</li>
        <li>Updated <a href="{@docRoot}tools/help/systrace.html">Systrace</a> to work with the
          Android 4.3 platform image.</li>
        <li>Fixed packaging of RenderScript compiler.</li>
        <li>Build tools 18.0.0 is obsolete and 18.0.1 should be used instead.</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=""/>SDK Tools, Revision 22.0.4</a> <em>(July 2013)</em>
  </p>

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

    <dl>
    <dt>Dependencies:</dt>
    <dd>
      <ul>
        <li>Android SDK Platform-tools revision 16 or later.</li>
        <li>If you are developing in Eclipse with the
          <a href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin</a>, note that this version of
          SDK Tools is designed for use with ADT 22.0.4 and later. If you haven't already, update
          ADT to 22.0.4.</li>
        <li>If you are using <a href="{@docRoot}sdk/installing/studio.html">Android Studio</a>,
          note that this version of the SDK Tools is designed to work with Android Studio
          0.2.x and later.</li>
        <li>If you are developing without an integrated development environment (IDE), you must have
          <a href="http://ant.apache.org/">Apache Ant</a> 1.8 or later.</li>
      </ul>
    </dd>

    <dt>General Notes:</dt>
    <dd>
      <ul>
        <li>Fixed problem with compiling RenderScript code.</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=""/>SDK Tools, Revision 22.0.1</a> <em>(May 2013)</em>
  </p>

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

    <dl>
    <dt>Dependencies:</dt>
    <dd>
      <ul>
        <li>Android SDK Platform-tools revision 16 or later.</li>
        <li>If you are developing in Eclipse with ADT, note that this version of SDK Tools is
          designed for use with ADT 22.0.1 and later. If you haven't already, update your
        <a href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin</a> to 22.0.1.</li>
        <li>If you are developing outside Eclipse, you must have
          <a href="http://ant.apache.org/">Apache Ant</a> 1.8 or later.</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 a problem with the monkeyrunner tool failing to import standard python classes.
          (<a href="http://code.google.com/p/android/issues/detail?id=55632">Issue 55632</a>)</li>
        <li>Fixed a problem with DDMS monitor not opening heap and network statistics views due to
          a class not found exception.
          (<a href="http://code.google.com/p/android/issues/detail?id=55394">Issue 55394</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=""/>SDK Tools, Revision 22</a> <em>(May 2013)</em>
  </p>

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

    <dl>
    <dt>Dependencies:</dt>
    <dd>
      <ul>
        <li>Android SDK Platform-tools revision 16 or later.</li>
        <li>If you are developing in Eclipse with ADT, note that this version of SDK Tools is
          designed for use with ADT 22.0.0 and later. If you haven't already, update your
        <a href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin</a> to 22.0.0.</li>
        <li>If you are developing outside Eclipse, you must have
          <a href="http://ant.apache.org/">Apache Ant</a> 1.8 or later.</li>
    </ul>
    </dd>

    <dt>General Notes:</dt>
    <dd>
      <ul>
        <li>Changed the structure of the SDK by adding a new build tool SDK Component, which is
          based on the existing platform-tools component. This change decouples the build tools
          versions from the IDE versions, allowing updates to the tools without requiring an
          IDE update.</li>
        <li>Updated tools to allow libraries to share the same package name as the applications
          that use them.</li>
        <li>Updated {@code draw9patch} tool to allow easier changing of markers.</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>Released some of the Android tools into <a href="http://www.maven.org">Maven
          Central</a> to assist third-party tool developers. The following tools are available
          in the repository: {@code manifest-merger}, {@code common/sdk_common}, {@code ddmlib},
          {@code dvlib}, {@code layoutlib_api}, {@code sdklib}, and {@code lint}.</li>
      </ul>
    </dd>

    <dt>Bug fixes:</dt>
    <dd>
      <ul>
        <li>Fixed a number of minor bugs in the SDK and build system.</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=""/>SDK Tools, Revision 21.1</a> <em>(February 2013)</em>
  </p>

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

    <dl>
    <dt>Dependencies:</dt>
    <dd>
      <ul>
        <li>Android SDK Platform-tools revision 16 or later.</li>
        <li>If you are developing in Eclipse with ADT, note that this version of SDK Tools is
          designed for use with ADT 21.1.0 and later. If you haven't already, update your
        <a href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin</a> to 21.1.0.</li>
        <li>If you are developing outside Eclipse, you must have
          <a href="http://ant.apache.org/">Apache Ant</a> 1.8 or later.</li>
    </ul>
    </dd>

    <dt>General Notes:</dt>
    <dd>
      <ul>
        <li>Improved error reporting in {@code dx} when dex merging fails in the build
          system.</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>
        <li>Added new aapt feature to compile resources.</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=""/>SDK Tools, Revision 21.0.1</a> <em>(December 2012)</em>
  </p>

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

    <dl>
    <dt>Dependencies:</dt>
    <dd>
      <ul>
        <li>Android SDK Platform-tools revision 16 or later.</li>
        <li>If you are developing in Eclipse with ADT, note that this version of SDK Tools is
          designed for use with ADT 21.0.1 and later. If you haven't already, update your
        <a href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin</a> to 21.0.1.</li>
        <li>If you are developing outside Eclipse, you must have
          <a href="http://ant.apache.org/">Apache Ant</a> 1.8 or later.</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>

        <li>RenderScript
          <ul>
            <li>Added support for
              <a href="{@docRoot}guide/topics/renderscript/compute.html#filterscript">Filterscript</a>
              compilation.</li>
            <li>Added new project setting to control the RenderScript compilation target separately
              from an Android project. Adding the following line to a {@code project.properties}
              file causes RenderScript code to be compiled for Android API Level 17, while the
              containing application can target a different (lower) API level:
              <pre>renderscript.target = 17</pre>
              Previously, the RenderScript compilation target was tied to the
              {@code android:minSdkVersion} setting in the manifest.
              (<a href="http://code.google.com/p/android/issues/detail?id=40487">Issue 40487</a>)
            </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>Fixed problem with UI Automator Viewer execution script where Android tools directory
          is not set.</li>
        <li>Fixed problem with the SDK Manager so that it auto-selects the most recently released
          platform on startup.</li>
        <li>Fixed Java finding script to look for the currently supported version of Java (1.6 or
          higher).</li>
        <li>Fixed the SDK Manager launcher in the ADT bundle so that it can properly launch the
          SDK Manager program when it is placed at the root of the bundle.</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=""/>SDK Tools, Revision 21</a> <em>(November 2012)</em>
  </p>

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

    <dl>
    <dt>Dependencies:</dt>
    <dd>
      <ul>
        <li>Android SDK Platform-tools revision 16 or later.</li>
        <li>If you are developing in Eclipse with ADT, note that this version of SDK Tools is designed
        for use with ADT 21.0.0 and later. If you haven't already, update your
        <a href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin</a> to 21.0.0.</li>
        <li>If you are developing outside Eclipse, you must have
          <a href="http://ant.apache.org/">Apache Ant</a> 1.8 or later.</li>
      </ul>
    </dd>

    <dt>General Notes:</dt>
    <dd>
      <ul>
        <li>Build System
          <ul>
            <li>Added a flag that sets <em>jumbo mode</em> for DEX files, which allows a larger
              number of strings in the DEX files. Enable this mode by adding the following line to
              the {@code project.properties} file of your project:
              <pre>set dex.force.jumbo=true</pre></li>
            <li>Improved the build time by pre-dexing libraries (both JAR files and library
              projects).</li>
            <li>Updated the build to generate {@code R} resource classes for library projects
              with only the IDs needed by the libraries, reducing the risk of hitting DEX file
              limits for fields and methods.</li>
            <li>Improved the build so that several editing features (code completion, resource
              chooser, go to declaration) properly handle library project resources.</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>Updated reporting to include errors in library projects if the library project is
              in the list of projects to be checked.</li>
            <li>Added a new {@code lint} target to the Ant build system for easier
              integration with continuous build systems.</li>
            <li>Added new {@code --sources} and {@code --classpath} arguments to point to sources
              with different directory structures.</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>
            <li>Added support for class file flow analysis.</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>
            <li>Improved support for developing Android apps on MIPS-based devices with new MIPS
              System Images for Android Virtual Devices.</li>
          </ul>
        </li>
        <li>Added {@code jobb} tool for creating and encrypting
          <a href="{@docRoot}google/play/expansion-files.html">APK Expansion Files</a>.
          (<a href="{@docRoot}tools/help/jobb.html">more info</a>)
        <li>Improved the Android 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 manifest merger to properly adapt library classes in the merged manifest.</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=""/>SDK Tools, Revision 20.0.3</a> <em>(August 2012)</em>
  </p>

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

    <dl>
    <dt>Dependencies:</dt>
    <dd>
      <ul>
        <li>Android SDK Platform-tools revision 12 or later.</li>
        <li>If you are developing in Eclipse with ADT, note that this version of SDK Tools is designed
        for use with ADT 20.0.3 and later. If you haven't already, update your
        <a href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin</a> to 20.0.3.</li>
        <li>If you are developing outside Eclipse, you must have
          <a href="http://ant.apache.org/">Apache Ant</a> 1.8 or later.</li>
    </ul>
    </dd>
    <dt>Bug fixes:</dt>
    <dd>
      <ul>
        <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=""/>SDK Tools, Revision 20.0.1</a> <em>(July 2012)</em>
  </p>

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

    <dl>
    <dt>Dependencies:</dt>
    <dd>
      <ul>
        <li>Android SDK Platform-tools revision 12 or later.</li>
        <li>If you are developing in Eclipse with ADT, note that this version of SDK Tools is designed
        for use with ADT 20.0.1 and later. If you haven't already, update your
        <a href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin</a> to 20.0.1.</li>
        <li>If you are developing outside Eclipse, you must have
          <a href="http://ant.apache.org/">Apache Ant</a> 1.8 or later.</li>
    </ul>
    </dd>
    <dt>Bug fixes:</dt>
    <dd>
      <ul>
        <li>Fixed wrong check on build state that forced repetitive Java code recompilation.</li>
        <li>Fixed problems with running more than one emulator and running multiple emulators
with GPU acceleration.</li>
        <li>Improved resize algorithm for better rendering on scaled emulator windows.</li>
        <li>Fixed a bug in the {@code lint} check for unprotected broadcast receivers to ignore
unprotected receivers for default Android actions.</li>
        <li>Fixed build issue for projects using RenderScript.</li>
        <li>Fixed memory leak in the emulator.</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=""/>SDK Tools, Revision 20</a> <em>(June 2012)</em>
  </p>

  <div class="toggle-content-toggleme">
  <dl>
    <dt>Dependencies:</dt>
    <dd>
      <ul>
        <li>Android SDK Platform-tools revision 12 or later.</li>
        <li>If you are developing in Eclipse with ADT, note that this version of SDK Tools is designed for
        use with ADT 20.0.0 and later. If you haven't already, we highly recommend updating your
        <a href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin</a> to 20.0.0.</li>
        <li>If you are developing outside Eclipse, you must have
          <a href="http://ant.apache.org/">Apache Ant</a> 1.8 or later.</li>
    </ul>
    </dd>
    <dt>General notes:</dt>
    <dd>
      <ul>
        <li>Added new Device Monitor application, grouping Android debugging tools into a
single application, including ddms, traceview, hierarchyviewer and Tracer for GLES. (<a
href="{@docRoot}tools/help/gltracer.html">more info</a>)</li>
        <li>Added new System Trace new tool for tracing Android system activity. This tool allow you
to capture a slice of system activity, plus additional information tagged from the <strong>Settings
&gt; Developer Options &gt; Monitoring: Enable traces</strong> or with specific calls added to your
application code.</li>
        </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 {@code 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>
            <li>Added two ProGuard configuration files for use in projects: {@code
proguard-android-optimize.txt} which enables optimizations and {@code proguard-android.txt} which
disables them.</li>
          </ul>
        </li>
        <li>SDK Manager
          <ul>
            <li>Improved caching to reduce downloading of repository definitions.</li>
            <li>Added <strong>Tools > Manage Add-on Sites</strong> option to improve performance by
            allowing temporary deactivation of third-party sites if they are loading slowly.</li>
            <li>Added settings for the SDK Manager download cache (<strong>SDK Manager > Tools >
Options</strong>).</li>
          </ul>
        </li>
      </ul>
    </dd>
    <dt>Bug fixes:</dt>
    <dd>
      <ul>
        <li>Build
          <ul>
            <li>Fixed problem where test projects did not have access to the full classpath of tested
projects, including Library Projects and third-party jars.</li>
            <li>Fixed deployment logic so that applications with embedded tests can now be deployed
and tested like test applications, including code coverage information.</li>
            <li>Fixed Ant support for testing projects with libraries.</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=""/>SDK Tools, Revision 19</a> <em>(April 2012)</em>
  </p>

  <div class="toggle-content-toggleme">
    <p class="note"><strong>Note:</strong> This update of SDK Tools is only available through
the <a href="{@docRoot}sdk/exploring.html">Android SDK Manager</a>. Use this tool to
download and install this update.</p>

    <dl>
    <dt>Dependencies:</dt>
    <dd>
      <ul>
        <li>Android SDK Platform-tools revision 9 or later.</li>
        <li>If you are developing in Eclipse with ADT, note that this version of SDK Tools is designed for
        use with ADT 18.0.0 and later. If you haven't already, we highly recommend updating your
        <a href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin</a> to 18.0.0.</li>
        <li>If you are developing outside Eclipse, you must have
          <a href="http://ant.apache.org/">Apache Ant</a> 1.8 or later.</li>
    </ul>
    </dd>
    <dt>Bug fixes:</dt>
    <dd>
      <ul>
        <li>Fixed an issue that prevented some developers from running the emulator with GPU
acceleration.</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=""/>SDK Tools, Revision 18</a> <em>(April 2012)</em>
  </p>

  <div class="toggle-content-toggleme">
    <p class="caution"><strong>Important:</strong> To download the new Android
    4.0 system components from the Android SDK Manager, you must first update the
    SDK tools to revision 14 or later and restart the Android SDK Manager. If you do not,
    the Android 4.0 system components will not be available for download.</p>

    <dl>
    <dt>Dependencies:</dt>
    <dd>
      <ul>
        <li>Android SDK Platform-tools revision 9 or later.</li>
        <li>If you are developing in Eclipse with ADT, note that this version of SDK Tools is designed for
        use with ADT 18.0.0 and later. If you haven't already, we highly recommend updating your
        <a href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin</a> to 18.0.0.</li>
        <li>If you are developing outside Eclipse, you must have
          <a href="http://ant.apache.org/">Apache Ant</a> 1.8 or later.</li>
    </ul>
    </dd>
    <dt>General notes:</dt>
    <dd>
      <ul>
        <li>Updated the SdkController app to encapsulate both sensor and multitouch emulation
          functionality.</li>
      </ul>
    </dd>
    <dt>Bug fixes:</dt>
    <dd>
      <ul>
        <li>Fixed Ant issues where some jar libraries in the {@code libs/} folder are not picked up
in some cases.</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=""/>SDK Tools, Revision 17</a> <em>(March 2012)</em>
  </p>

  <div class="toggle-content-toggleme">
    <p class="caution"><strong>Important:</strong> To download the new Android
    4.0 system components from the Android SDK Manager, you must first update the
    SDK tools to revision 14 or later and restart the Android SDK Manager. If you do not,
    the Android 4.0 system components will not be available for download.</p>

    <dl>
    <dt>Dependencies:</dt>
    <dd>
      <ul>
        <li>Android SDK Platform-tools revision 9 or later.</li>
        <li>If you are developing in Eclipse with ADT, note that this version of SDK Tools is designed for
        use with ADT 17.0.0 and later. If you haven't already, we highly recommend updating your
        <a href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin</a> to 17.0.0.</li>
        <li>If you are developing outside Eclipse, you must have
          <a href="http://ant.apache.org/">Apache Ant</a> 1.8 or later.</li>
    </ul>
    </dd>
    <dt>General notes:</dt>
    <dd>
      <ul>
        <li>Emulator
          <ul>
            <li>Added support for hardware accelerated graphics rendering. This feature requires an
API Level 15, Revision 3 or later system image.
(<a href="{@docRoot}tools/devices/emulator.html#accel-graphics">more info</a>)
            </li>
            <li>Added support for running Android x86 system images in virtualization mode on
Windows and Mac OS X.
(<a href="{@docRoot}tools/devices/emulator.html#accel-vm">more info</a>)
              <p class="note"><strong>Note:</strong> Use the Android SDK Manager to download and
install x86 system images. Android x86 system images are not available for all API levels.</p>
            </li>
            <li>Added experimental support for multi-touch input by enabing the emulator to receive
              touch input from a USB-tethered physical Android device.
              (<a href="http://tools.android.com/tips/hardware-emulation">more info</a>)</li>
          </ul>
        </li>
        <li>Added viewing of live detailed network usage of an app in DDMS. (<a
    href="http://tools.android.com/recent/detailednetworkusageinddms">more info</a>)</li>
        <li>ProGuard
          <ul>
            <li>Updated the bundled ProGuard tool to version 4.7. In addition to many new features,
this update fixes the {@code Conversion to Dalvik format failed with error 1} error some users have
experienced.</li>
            <li>Updated the default {@code proguard.cfg} file with better default flags for
              Android.</li>
            <li>Split the ProGuard configuration file has been in half, with project specific flags
kept in project and the generic Android flags distributed (and updated) with the tools
themselves.</li>
          </ul>
        </li>
        <li>Build
          <ul>
            <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>Fixed issue when a project and its libraries include the same jar file in their libs
              folder. (<a href="http://tools.android.com/recent/dealingwithdependenciesinandroidprojects">more
              info</a>)</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>Lint
          <ul>
            <li>Updated Lint to check Android application code. Lint rules which previously
performed pattern based searches in the application code (such as the unused resource check) have
been rewritten to use the more accurate Java-style parse trees.</li>
            <li>Added support for checking library projects. This change means that rules such as
the unused resource check properly handle resources declared in a library project and referenced in
a downstream project.</li>
            <li>Added ability to suppress Lint warnings in Java code with the new
{@code @SuppressLint} annotation, and in XML files with the new tools: namespace and
ignore attribute. (<a
    href="http://tools.android.com/recent/ignoringlintwarnings">more info</a>)</li>
            <li>New Lint checks:
              <ul>
                <li>Added check for Android API calls that require a version of Android higher than
                  the minimum supported version. You can use the new {@code @TargetApi} annotation
                  to suppress warnings when the code is wrapped in a system version condition.
                  (<a href="http://tools.android.com/recent/lintapicheck">more info</a>)</li>
                <li>Added over 20 new Lint rules, including checks for
                  <a href="http://tools.android.com/recent/lintperformancechecks">performance</a>,
                  XML layouts, manifest and file handling.</li>
              </ul>
            </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=""/>SDK Tools, Revision 16</a> <em>(December 2011)</em>
  </p>

  <div class="toggle-content-toggleme">
    <p class="caution"><strong>Important:</strong> To download the new Android
    4.0 system components from the Android SDK Manager, you must first update the
    SDK tools to revision 14 or later and restart the Android SDK Manager. If you do not,
    the Android 4.0 system components will not be available for download.</p>

<dl>
<dt>Dependencies:</dt>
<dd>
  <ul>
    <li>Android SDK Platform-tools revision 9 or later.</li>
    <li>If you are developing in Eclipse with ADT, note that this version of SDK Tools is designed for use
    with ADT 16.0.0 and later. If you haven't already, we highly recommend updating your
    <a href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin</a> to 16.0.0.</li>
    <li>If you are developing outside Eclipse, you must have <a href="http://ant.apache.org/">Apache
    Ant</a> 1.8 or later.</li>
</ul>
</dd>
<dt>General notes:</dt>
<dd>
  <ul>
    <li>Added Lint tools to detect common errors in Android projects.
      (<a href="http://tools.android.com/recent/lint">more info</a>)</li>
    <li>Added sensor emulation support, which allows the emulator to read sensor data from a
      physical Android device.
      (<a href="http://tools.android.com/recent/sensoremulation">more info</a>)</li>
    <li>Added support for using a webcam to emulate a camera on Mac OS X.</li>
  </ul>
</dd>
<dt>Bug fixes:</dt>
<dd>
  <ul>
    <li>Snapshots now work for Android 4.0 system images.</li>
    <li>Fixed several small issues for the build file.
    (<a href="http://code.google.com/p/android/issues/detail?id=21023">Issue 21023</a>,
    <a href="http://code.google.com/p/android/issues/detail?id=21267">Issue 21267</a>,
    <a href="http://code.google.com/p/android/issues/detail?id=21465">Issue 21465</a>,
    <a href="http://code.google.com/p/android/issues/detail?id=21525">Issue 21525</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=""/>SDK Tools, Revision 15</a> <em>(October 2011)</em>
  </p>

  <div class="toggle-content-toggleme">
    <p class="caution"><strong>Important:</strong> To download the new Android
    4.0 system components from the Android SDK Manager, you must first update the
    SDK tools to revision 14 or later and restart the Android SDK Manager. If you do not,
    the Android 4.0 system components will not be available for download.</p>
  <dl>
<dt>Dependencies:</dt>
<dd>
  <ul><li>Android SDK Platform-tools revision 9 or later.</li>
  <li>If you are developing in Eclipse with ADT, note that this version of SDK Tools is designed for use
  with ADT 15.0.0 and later. If you haven't already, we highly recommend updating your <a
  href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin</a> to 15.0.0.</li>
  <li>If you are developing outside Eclipse, you must have <a href="http://ant.apache.org/">Apache
  Ant</a> 1.8 or later.</li>
</ul>

<dt>Bug fixes:</dt>
<dd>
  <ul>
    <li>Fixed emulator crash on Linux due to improper webcam detection
    (<a href="http://code.google.com/p/android/issues/detail?id=20952">Issue 20952</a>).</li>
    <li>Fixed emulator issue when using the <code>-wipe-data</code> argument.</li>
    <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 an AVD using the GoogleTV addon
    (<a href="http://code.google.com/p/android/issues/detail?id=20963">Issue 20963</a>).</li>
    <li>Fixed <code>ant test</code>
    (<a href="http://code.google.com/p/android/issues/detail?id=20979">Issue 20979</a>).</li>
    <li>Fixed <code>android update project</code>
    (<a href="http://code.google.com/p/android/issues/detail?id=20535">Issue 20535</a>).</li>
    <li>Fixed scrolling issue in the new Logcat panel of DDMS.</li>
    <li>Fixed issue with MonkeyRunner
    (<a href="http://code.google.com/p/android/issues/detail?id=20964">Issue 20964</a>).</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>
  </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=""/>SDK Tools, Revision 14</a> <em>(October 2011)</em>
  </p>

  <div class="toggle-content-toggleme">
    <p class="note"><strong>Important:</strong> To download the new Android
    4.0 system components from the Android SDK Manager, you must first update the
    SDK tools to revision 14 and restart the Android SDK Manager. If you do not,
    the Android 4.0 system components will not be available for download.</p>
  <dl>
<dt>Dependencies:</dt>
<dd>
  <ul><li>Android SDK Platform-tools revision 8 or later.</li>
  <li>If you are developing in Eclipse with ADT, note that this version of SDK Tools is designed for use
  with ADT 14.0.0 and later. If you haven't already, we highly recommend updating your <a
  href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin</a> to 14.0.0.</li>
  <li>If you are developing outside Eclipse, you must have <a href="http://ant.apache.org/">Apache
  Ant</a> 1.8 or later.</li>
</ul>

<dt>General notes:</dt>
<dd>
  <ul>
    <li>Added webcam support to Android 4.0 or later platforms to emulate rear-facing cameras when
    one webcam is present, and to emulate both rear-facing and front-facing cameras when two
    webcams are present. Webcam support is for Windows and Linux only.
    Mac support will come in a later release.</li>
    <li>Changed <code>default.properties</code> to <code>project.properties</code> and
    <code>build.properties</code> to <code>ant.properties</code>. Any existing
    projects that you build with Ant must be updated with the <code>android update project</code>
    command.</li>
    <li>Changed Ant <code>build.xml</code> file to support improvements to the
    build system and added and modified Ant commands to support these changes. For a list of Ant
commands, see the
<a href="{@docRoot}tools/building/building-cmdline.html#AntReference">Ant Command
Reference</a>.</li>
    <li>Changed how library projects are built.</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>Revamped the SDK Manager UI (<a href="http://tools.android.com/recent/newsdkmanager">more
info</a>).</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>
</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=""/>SDK Tools, Revision 13</a> <em>(September 2011)</em>
  </p>

  <div class="toggle-content-toggleme">
  <dl>
<dt>Dependencies:</dt>
<dd>
<p>If you are developing in Eclipse with ADT, note that this version of SDK Tools is designed for use with
ADT 12.0.0 and later. If you haven't already, we highly recommend updating your <a
href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin</a> to 12.0.0.</p>

<p>If you are developing outside Eclipse, you must have <a href="http://ant.apache.org/">Apache
Ant</a> 1.8 or later.</p>

<dt>General notes:</dt>
<dd>
  <ul>
    <li>Fix compilation issue in Ant (<code>dex</code> step) when paths have spaces.</li>
    <li>Fix issue in emulator installation when paths have spaces.</li>
    <li>Fix issue when AVD paths have spaces.</li>
    <li>Fix rendering issue when using emulator scaling (<a href="http://code.google.com/p/android/issues/detail?id=18299">see more</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=""/>SDK Tools, Revision 12</a> <em>(July 2011)</em>
  </p>

  <div class="toggle-content-toggleme">
  <dl>
<dt>Dependencies:</dt>
<dd>
<p>If you are developing in Eclipse with ADT, note that this version of SDK Tools is designed for use with
ADT 12.0.0 and later. If you haven't already, we highly recommend updating your <a
href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin</a> to 12.0.0.</p>

<p>If you are developing outside Eclipse, you must have <a href="http://ant.apache.org/">Apache
Ant</a> 1.8 or later.</p>

<dt>General notes:</dt>
<dd>
  <ul>
    <li>The AVD manager and emulator can now use system images
    compiled for ARM v7 and x86 CPUs.</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=""/>SDK Tools, Revision 11</a> <em>(May 2011)</em>
  </p>

  <div class="toggle-content-toggleme">
  <dl>
<dt>Dependencies:</dt>
<dd>
<p>If you are developing in Eclipse with ADT, note that this version of SDK Tools is designed for use with
ADT 10.0.1 and later. If you haven't already, we highly recommend updating your <a
href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin</a> to 10.0.1.</p>

<p>If you are developing outside Eclipse, you must have <a href="http://ant.apache.org/">Apache
Ant</a> 1.8 or later.</p>

<dt>General notes:</dt>
<dd>
  <ul>
    <li>Miscellaneous emulator changes to support Android 3.1.</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=""/>SDK Tools, Revision 10</a> <em>(February 2011)</em>
  </p>

  <div class="toggle-content-toggleme">
  <dl>
<dt>Dependencies:</dt>
<dd>
<p>If you are developing in Eclipse with ADT, note that this version of SDK Tools is
designed for use with ADT 10.0.0 and later. After installing SDK Tools r10, we
highly recommend updating your ADT Plugin to 10.0.0.</p>

<p>If you are developing outside Eclipse, you must have <a href="http://ant.apache.org/">Apache
Ant</a> 1.8 or later.</p>

<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 native <code>.rs</code> 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=""/>SDK Tools, Revision 9</a> <em>(January 2011)</em>
  </p>

  <div class="toggle-content-toggleme">
  <dl>
<dt>Dependencies:</dt>
<dd>
<p>If you are developing in Eclipse with ADT, note that this version of SDK Tools is
designed for use with ADT 9.0.0 and later. After installing SDK Tools r9, we
highly recommend updating your ADT Plugin to 9.0.0.</p>

<p>If you are developing outside Eclipse, you must have <a href="http://ant.apache.org/">Apache
Ant</a> 1.8 or later.</p>

<dt>Upgrading to SDK Tools r9:</dt>
<dd>
<p>If you are upgrading to SDK Tools r9 from SDK Tools r7 or earlier, the default installed location
for the <code>adb</code> tool has changed from <code>&lt;<em>SDK</em>&gt;/tools/adb</code> to
<code>&lt;<em>SDK</em>&gt;/platform-tools/adb</code>. This means that you should
add the new location to your PATH and modify any custom build scripts to
reference the new location. Copying the <code>adb</code> executable from the new
location to the old is not recommended, since subsequent updates to the SDK
Tools will delete the file.</p>
</dd>

<dt>General notes:</dt>
<dd>
  <ul>
    <li>The default ProGuard configuration, <code>proguard.cfg</code>, now ignores the following classes:
      <ul>
        <li>classes that extend {@link android.preference.Preference}</li>
        <li>classes that extend {@link android.app.backup.BackupAgentHelper}</li>
      </ul>
    </li>
    <li>Ant lib rules now allow you to override <code>java.encoding</code>, <code>java.source</code>,
    and <code>java.target</code> properties.</li>
    <li>The default encoding for the <code>javac</code> Ant task is now UTF-8.</li>
    <li>The LogCat view in DDMS now properly displays UTF-8 characters.</li>
    <li>The SDK Manager is more reliable on Windows. For details on the improvements, see the
    <a href="http://tools.android.com/recent/sdkmanagerfixes">Android Tools Project Site</a>. </li>
    <li>Early look at the new snapshot feature: To improve startup time for the emulator, you can
enable snapshots for the system state. The emulator will then restore to the state when it last
closed almost instantly. <strong>Note:</strong> The snapshot feature is still under active
development and might not always perform as expected.</li>
    <li>Fixed the missing JAR file error that prevented <code>draw9patch</code> from running.</li>
    <li>Fixed the Windows launch scripts <code>hierarchyviewer</code> and <code>ddms</code> to support
    the new location of <code>adb</code>.</li>
    <li>Known issues with emulator performance: Because the Android emulator must simulate the ARM
instruction set architecture on your computer, emulator performance is  slow. We're working hard to
resolve the performance issues and it will improve in future releases.</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=""/>SDK Tools, Revision 8</a> <em>(December 2010)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>
<dt>Dependencies:</dt>
<dd>
<p>If you are developing in Eclipse with ADT, note that this version of SDK Tools is
designed for use with ADT 8.0.0 and later. After installing SDK Tools r8, we
highly recommend updating your ADT Plugin to 8.0.0.</p>

<p>If you are developing outside Eclipse, you must have <a href="http://ant.apache.org/">Apache
Ant</a> 1.8 or later.</p>

<p>Also note that SDK Tools r8 requires a new SDK component called
<em>Platform-tools</em>. The new Platform-tools component lets all SDK platforms
(Android 2.1, Android 2.2, and so on) use the same (latest) version of build
tools such as <code>adb</code>, <code>aapt</code>, <code>aidl</code>, and
<code>dx</code>. To download the Platform-tools component, use the Android SDK
Manager, as described in <a href="{@docRoot}sdk/exploring.html">Exploring the
SDK</a></p>

<dt>Upgrading from SDK Tools r7:</dt>
<dd>
<p>If you are upgrading to SDK Tools r8 from an earlier version, note that the
the default installed location for the <code>adb</code> tool has changed from
<code>&lt;<em>SDK</em>&gt;/tools/adb</code> to
<code>&lt;<em>SDK</em>&gt;/platform-tools/adb</code>. This means that you should
add the new location to your PATH and modify any custom build scripts to
reference the new location. Copying the <code>adb</code> executable from the new
location to the old is not recommended, since subsequent updates to the SDK
Tools will delete the file.</p>
</dd>

<dt>General notes:</dt>
<dd>
<ul>
<li>All SDK platforms now support Library Projects.</li>
<li>Support for a true debug build. Developers no longer need to add the
<code>android:debuggable</code> attribute to the
<code>&lt;application&gt;</code> tag in the manifest &mdash; the build tools add
the attribute automatically. In Eclipse/ADT, all incremental builds are assumed
to be debug builds, so the tools insert <code>android:debuggable="true"</code>.
When exporting a signed release build, the tools do not add the attribute. In
Ant, a <code>ant debug</code> command automatically inserts the
<code>android:debuggable="true"</code> attribute, while <code>ant release</code>
does not. If <code>android:debuggable="true"</code> is manually set, then
<code>ant release</code> will actually do a debug build, rather than a release
build.</li>
<li>Automatic ProGuard support in release builds. Developers generate a ProGuard
configuration file using the <code>android</code> tool &mdash; the build tools
then automatically run ProGuard against the project sources during the build.
For more information, see the <a
href="{@docRoot}tools/help/proguard.html">ProGuard</a>
documentation. </li>
<li>New overridable Ant javac properties: <code>java.encoding</code>,
<code>java.source</code>, and <code>java.target</code> (default values are
"ascii", "1.5", and "1.5", respectively).</li>
<li>New UI for the HierarchyViewer tool.</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=""/>SDK Tools, Revision 7</a> <em>(September 2010)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>
<dt>Dependencies:</dt>
<dd>
<p>If you are developing in Eclipse with ADT, note that this version of SDK Tools is
designed for use with ADT 0.9.8 and later. After installing SDK Tools r7, we
highly recommend updating your ADT Plugin to 0.9.8.</p>
</dd>

<dt>General notes:</dt>
<dd>
<ul>
<li>Added support for library projects that depend on other library projects.</li>
<li>Adds support for aidl files in library projects.</li>
<li>Adds support for extension targets in Ant build to perform tasks between the
normal tasks: <code>-pre-build</code>, <code>-pre-compile</code>, and
<code>-post-compile</code>.</li>
<li>Adds support for "headless" SDK update. See <code>android -h update sdk</code>
for more information.</li>
<li>Fixes location control in DDMS to work in any locale not using '.' as a
decimal point.</li>
</ul>
</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=""/>SDK Tools, Revision 6</a> <em>(May 2010)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>
<dt>Dependencies:</dt>
<dd>
<p>If you are developing in Eclipse with ADT, note that this version of SDK Tools is
designed for use with ADT 0.9.7 and later. After installing SDK Tools r6, we
highly recommend updating your ADT Plugin to 0.9.7.</p>
</dd>

<dt>Library projects:</dt>
<dd>
<p>The SDK Tools now support 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 developing in Eclipse, <a href="eclipse-adt.html">ADT</a>
provides the equivalent library project support.</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=""/>SDK Tools, Revision 5</a> <em>(March 2010)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>
<dt>Dependencies:</dt>
<dd><ul>
<li>If you are developing in Eclipse with ADT, note that this version of SDK Tools is
designed for use with ADT 0.9.6 and later. After installing SDK Tools r5, we
highly recommend updating your ADT Plugin to 0.9.6.</li>
<li>For Mac OS platforms, OS X 10.4.x (Tiger) is no longer
officially supported. </li>
</ul>
</dd>

<dt>SDK and AVD Manager:</dt>
<dd>
<ul>
<li>Fixes SSL download for the standalone version of the SDK Updater.</li>
<li>Fixes issue with 64-bit JVM on Windows.</li>
<li>Adds support for platform samples components.</li>
<li>Improves support for dependency between components.</li>
<li>AVDs now sorted by API level.</li>
<li>The AVD creation dialog now enforces a minimum SD card size of 9MB.</li>
<li>Prevents deletion of running AVDs.</li>
<li>Settings are now automatically saved, no need to click "Apply".</li>
</ul>
</dd>

<dt>Emulator:</dt>
<dd>
<ul>
<li>Emulator now requires SD card to be 9MB or more.</li>
</ul>
</dd>

<dt>Layoutopt:</dt>
<dd>
<ul>
<li>Fixes <code>layoutopt.bat</code> to execute correctly on Windows.</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=""/>SDK Tools, Revision 4</a> <em>(December 2009)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>
<dt>Dependencies:</dt>
<dd><p>This version of SDK Tools is compatible with ADT 0.9.5 and later, but not
compatible with earlier versions. If you are developing in Eclipse with ADT, you
<strong>must</strong> update your ADT plugin to version 0.9.5 or higher if you
install SDK Tools r4 in your SDK. </p></dd>

<dt>General notes:</dt>
<dd>
<ul>
<li>Launcher script now forces GDK_NATIVE_WINDOW=true (linux only), to fix a
compatibility issue between GTK and SWT.</li>
</ul>
</dd>

<dt>Android SDK and AVD Manager:</dt>
<dd>
<ul>
<li>AVD Launch dialog now shows scale value.</li>
<li>Fixes potential NPE in SDK Manager on AVD launch, for older AVD with no
skin name specified.</li>
<li>Fixes XML validation issue in on older Java versions.</li>
<li>No longer forces the use of Java 1.5 on Mac OS X.</li>
</ul>
</dd>

<dt>Emulator:</dt>
<dd>
<ul>
<li>No longer limits the size of the system partition.</li>
</ul>
</dd>

<dt>Ant build tools:</dt>
<dd>
<ul>
<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=""/>SDK Tools, Revision 3</a> <em>(October 2009)</em>
  </p>

  <div class="toggle-content-toggleme">
<dl>
<dt>Dependencies:</dt>
<dd><p>This version of SDK Tools is compatible with ADT 0.9.4 and later, but not
compatible with earlier versions. If you are developing in Eclipse with ADT, you
<strong>must</strong> update your ADT plugin to version 0.9.4 or higher if you
install SDK Tools r3 in your SDK.</p>
</dd>

<dt>Android tool:</dt>
<dd>
<ul>
<li>Adds new <code>android create test-project</code> and <code>android update
test-project</code> commands to allow for greater flexibility in the location of the
main and test projects.</li>
</ul>
</dd>

<dt>DDMS:</dt>
<dd>
<ul>
<li>Adds a button to dump HPROF file for running applications (app must be able
to write to the sdcard).</li>
<li>Button to start/stop profiling of a running application (app must be able to
write to the sdcard). Upon stop, Traceview will automatically be launched to
display the trace.</li>
<li>Fixed DDMS, Traceview, and the AVD Mananger/SDK Updater to run on Mac OS X
10.6.</li>
<li>Fixed screenshot support for devices running 32-bit framebuffer.</li>
</ul>
</dd>

<dt>Android SDK and AVD Manager:</dt>
<dd>
<ul>
<li>Provides a new UI that lets you set options for controlling
the emulator skin, screen size/density, and scale factor used when launching
an AVD.</li>
<li>Provides improved AVD creation UI, which lets you customize the hardware
properties of your AVDs.</li>
<li>Now enforces dependencies between platforms and tools components, and
between SDK add-ons and platforms.</li>
</ul>
</dd>

<dt>Layoutopt, a new tool for optimizing layouts:</dt>

<dd><p>The SDK Tools r3 package includes <code>layoutopt</code>, a new command-line
tool that helps you optimize your layout hierarchies. When run against your
layout files, the tool analyzes their hierarchies and notifies you of
inefficiencies and other potential issues. The tool also provides simple
solutions for the issues it finds. For usage, see <a
href="/tools/help/layoutopt.html">layoutopt</a>.</p>
</dd>
</dl>
</div>
</div>
