page.title=SDK Tools
@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 and AVD 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/adding-components.html#UpdatingComponents">Updating SDK
Components</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
and AVD Manager. </p>

<script type="text/javascript">
function toggleDiv(link) {
  var toggleable = $(link).parent();
  if (toggleable.hasClass("closed")) {
    //$(".toggleme", toggleable).slideDown("fast");
    toggleable.removeClass("closed");
    toggleable.addClass("open");
    $(".toggle-img", toggleable).attr("title", "hide").attr("src", (toRoot + "assets/images/triangle-opened.png"));
  } else {
    //$(".toggleme", toggleable).slideUp("fast");
    toggleable.removeClass("open");
    toggleable.addClass("closed");
    $(".toggle-img", toggleable).attr("title", "show").attr("src", (toRoot + "assets/images/triangle-closed.png"));
  }
  return false;
}
</script>
<style>
.toggleable {
padding: .25em 1em;
}
.toggleme {
  padding: 1em 1em 0 2em;
  line-height:1em;
}
.toggleable a {
  text-decoration:none;
}
.toggleme a {
  text-decoration:underline;
}
.toggleable.closed .toggleme {
  display:none;
}
#jd-content .toggle-img {
  margin:0;
}
</style>

<div class="toggleable opened">
  <a href="#" onclick="return toggleDiv(this)">
        <img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-img" height="9px" width="9px" />
SDK Tools, Revision 9</a> <em>(January 2011)</em>
  <div class="toggleme">
  <dl>
<dt>Dependencies:</dt>
<dd>
<p>If you are developing in Eclipse with ADT, note that the SDK Tools r9 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>If you enabled snapshots for an AVD, they are automatically captured. The emulator also now restores to the state when
     it last closed almost instantly.</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>
  </ul>
</dd>
</dl>
</div>
</div>

<div class="toggleable closed">
  <a href="#" onclick="return toggleDiv(this)">
        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
SDK Tools, Revision 8</a> <em>(December 2010)</em>
  <div class="toggleme">

<dl>
<dt>Dependencies:</dt>
<dd>
<p>If you are developing in Eclipse with ADT, note that SDK Tools r8 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="adding-components.html">Adding SDK
Components</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}guide/developing/tools/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="toggleable closed">
  <a href="#" onclick="return toggleDiv(this)">
        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
SDK Tools, Revision 7</a> <em>(September 2010)</em>
  <div class="toggleme">

<dl>
<dt>Dependencies:</dt>
<dd>
<p>If you are developing in Eclipse with ADT, note that SDK Tools r7 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>
</li>
</ul>
</dd>
</dl>
 </div>
</div>

<div class="toggleable closed">
  <a href="#" onclick="return toggleDiv(this)">
        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
SDK Tools, Revision 6</a> <em>(May 2010)</em>
  <div class="toggleme">

<dl>
<dt>Dependencies:</dt>
<dd>
<p>If you are developing in Eclipse with ADT, note that SDK Tools r6 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}guide/developing/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="toggleable closed">
  <a href="#" onclick="return toggleDiv(this)">
        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
SDK Tools, Revision 5</a> <em>(March 2010)</em>
  <div class="toggleme">

<dl>
<dt>Dependencies:</dt>
<dd><ul>
<li>If you are developing in Eclipse with ADT, note that SDK Tools r5 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="toggleable closed">
  <a href="#" onclick="return toggleDiv(this)">
        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
SDK Tools, Revision 4</a> <em>(December 2009)</em>
  <div class="toggleme">

<dl>
<dt>Dependencies:</dt>
<dd><p>SDK Tools r4 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="toggleable closed">
  <a href="#" onclick="return toggleDiv(this)">
        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
SDK Tools, Revision 3</a> <em>(October 2009)</em>
  <div class="toggleme">

<dl>
<dt>Dependencies:</dt>
<dd><p>SDK Tools r3 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 appplications (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="/guide/developing/tools/layoutopt.html">layoutopt</a>.</p>
</dd>
</dl>
 </div>
</div>
