page.title=ADT Plugin
@jd:body

<p>The Android Development Tools (ADT) plugin adds powerful extensions to the Eclipse integrated development environment. It allows you to create and debug your Android applications easier and faster. If you use Eclipse, the ADT plugin gives you an incredible boost in developing Android applications:</p>

<ul>
  <li>It gives you access to other Android development tools from inside the Eclipse IDE. For example, ADT lets you access the many capabilities of the DDMS tool: take screenshots, manage port-forwarding, set breakpoints, and view thread and process informationd irectly from Eclipse.</li>
  <li>It provides a New Project Wizard, which helps you quickly create and set up all of the basic files you'll need for a new Android application.</li>
  <li>It automates and simplifies the process of building your Android application.</li>
  <li>It provides an Android code editor that helps you write valid XML for your Android manifest and resource files.</li>
</ul>

<h2 id="installingplugin">Installing the Eclipse Plugin (ADT)</h2>

<p>If you <em>will not</em> be using the Eclipse IDE, you do not need to download or install the ADT plugin.</p>

<p>To download and install the ADT plugin, follow the steps below for your respective Eclipse version. </p>

<table style="font-size:100%">
<tr><th>Eclipse 3.3 (Europa)</th><th>Eclipse 3.4 (Ganymede)</th></tr>
<tr>
<td width="50%">
<ol>
    <li>Start Eclipse, then select <strong>Help</strong> &gt; <strong>Software Updates</strong> &gt; <strong>Find
            and Install...</strong>. </li>

    <li>In the dialog that appears, select <strong>Search for new features to install</strong> and click <strong>Next</strong>. </li>
    <li>Click <strong>New Remote Site</strong>. </li>
    <li>In the resulting dialog box, enter a name for the remote site (e.g. Android Plugin) and enter this as its URL:
        <pre>https://dl-ssl.google.com/android/eclipse/</pre>
        <p>Click <strong>OK</strong>.</p> </li>
    <li>You should now see the new site added to the search list (and checked).
        Click <strong>Finish</strong>. </li>
    <li>In the subsequent Search Results dialog box, select the checkbox for
    <strong>Android Plugin</strong> &gt; <strong>Developer Tools</strong>.
    This will check both features:  "Android Developer Tools", and "Android
    Editors". The Android Editors feature is optional, but recommended.  If
    you choose to install it, you need the WST plugin mentioned earlier in this
    page. Click <strong>Next</strong>. </li>
    <li>Read the license agreement and then select <strong>Accept terms of the license agreement</strong>. 
     Click <strong>Next</strong>. </li>
    <li>Click <strong>Finish</strong>. </li>

    <li>The ADT plugin is not signed; you can accept the installation anyway
        by clicking <strong>Install All</strong>. </li>
    <li>Restart Eclipse. </li>
</ol>

</td>
<td>

<ol>
    <li>Start Eclipse, then select <strong>Help</strong> &gt; <strong>Software Updates...</strong>.
    </li>
    <li>In the dialog that appears, click the <strong>Available Software</strong> tab.
    </li>
    <li>Click <strong>Add Site...</strong>
    </li>
    <li>Enter this as the Location:
      <pre>https://dl-ssl.google.com/android/eclipse/</pre>
      <p>Click <strong>OK</strong>.</p></li>
    <li>Back in the Available Software view, you should see the plugin. Select the checkbox next to 
      <em>Developer Tools</em>  and click <strong>Install...</strong>
    </li>
    <li>On the subsequent Install window, "Android Developer Tools", and "Android Editors" should both be checked. 
    The Android Editors feature is optional, but recommended.  If
    you choose to install it, you need the WST plugin mentioned earlier in this
    page. Click <strong>Next</strong>.
     </li>
    <li>Accept the license agreement and click <strong>Finish</strong>.</li>
    <li>Restart Eclipse. </li>
</ol>

</td>
</tr>
</table>

<h3 id="troubleshooting">Troubleshooting ADT Installation</h3>
<p> 
If you are having trouble downloading the ADT plugin after following the steps above, here are some suggestions: </p>

<ul>
	<li>In Step 4, try changing the remote update site URL to use <code>http</code>, rather than <code>https</code>. </li>
	<li>If you are behind a firewall (such as a corporate firewall), make
        sure that you have properly configured your proxy settings in Eclipse.
        In Eclipse 3.3/3.4, you can configure proxy information from the main
        Eclipse menu in <strong>Window</strong> (on Mac, <strong>Eclipse</strong>) &gt; <strong>Preferences</strong> &gt; <strong>General</strong> &gt; <strong>Network Connections</strong>.</li>
</ul>
<p> 
If you are still unable to use Eclipse to download the ADT plugin, follow these steps to download and install the plugin from your computer:
</p>
<ol>
<li><a href="adt_download.html">Download the ADT zip file</a> (do not unpack it).
<li>Follow steps 1 and 2 in the default install instructions (above).
<li>In Eclipse 3.3, click <strong>New Archive Site...</strong>. <br/>
    In Eclipse 3.4, click <strong>Add Site...</strong>, then <strong>Archive...</strong>
<li>Browse and select the downloaded the zip file.
<li>Follow the remaining procedures, above, starting from steps 5.
</ol>
<p> 
Note that to update your plugin, you will have to follow these steps again instead of the default update instructions.</p>

<p>Note that the "Android Editors" feature of ADT requires several optional 
Eclipse components (for example, WST). If you encounter an error when 
installing ADT, your Eclipse installion might not include those components. 
For information about how to quickly add the necessary components to your 
Eclipse installation, see the troubleshooting topic 
<a href="{@docRoot}guide/appendix/faq/troubleshooting.html#installeclipsecomponents">ADT Installation Error: "requires plug-in org.eclipse.wst.sse.ui"</a>.</p>

<h4>For Linux users</h4>
<p>If you encounter this error when installing the ADT Plugin for Eclipse: 
<pre>
An error occurred during provisioning.
Cannot connect to keystore.
JKS</pre>
<p>
...then your development machine lacks a suitable Java VM. Installing Sun
Java 6 will resolve this issue and you can then reinstall the ADT
Plugin.</p>

<a name="Updating_the_ADT_plugin" id="Updating_the_ADT_plugin"></a>

<h2>Updating the ADT Plugin </h2>

<p>In some cases, a new ADT plugin may become available for your existing version of the SDK. You can use the steps below to update 
the ADT plugin from inside Eclipse. </p>

<table style="font-size:100%">
<tr><th>Eclipse 3.3 (Europa)</th><th>Eclipse 3.4 (Ganymede)</th></tr>
<tr>
<td width="50%">
<ol>
    <li> Select <strong>Help</strong> &gt; <strong>Software Updates</strong> &gt; <strong>Find and Install...</strong>. </li>
    <li> Select <strong>Search for updates of the currently installed features</strong> and click <strong>Finish</strong>. </li>
    <li> If an update for ADT is available, select and install. </li>
</ol>

<p> Alternatively, </p>
<ol>
    <li> Select <strong>Help</strong> &gt; <strong>Software Updates</strong> &gt; <strong>Manage Configuration</strong>. </li>
    <li> Navigate down the tree and select <strong>Android Development Tools &lt;version&gt;</strong> </li>
    <li> Select <strong>Scan for Updates</strong> under <strong>Available Tasks</strong>.</li>
</ol>
</td>
<td>
<ol>
    <li>Select <strong>Help</strong> &gt; <strong>Software Updates...</strong></li>
    <li>Select the <strong>Installed Software</strong> tab.</li>
    <li>Click <strong>Update...</strong></li>
    <li>If an update for ADT is available, select it and click <strong>Finish</strong>.</li>
</ol>
</td>
</tr>
</table>
