page.title=Developing In Eclipse, with ADT
@jd:body

<div id="qv-wrapper">
  <div id="qv">
  <h2>In this document</h2>
  <ol>
    <li><a href="#CreatingAProject">Creating an Android Project</a></li>
    <li><a href="#AVD">Creating an AVD</a></li>
    <li><a href="#Running">Running Your Application</a>
      <ol>
        <li><a href="#RunningOnEmulator">Running on the emulator</a></li>
        <li><a href="#RunningOnDevice">Running on a device</a></li>
      </ol>
    </li>
    <li><a href="#RunConfig">Creating a Custom Run Configuration</a></li>
    <li><a href="#Signing">Setting Up Application Signing</a></li>
    <li><a href="#libraryProject">Working with Library Projects</a>
      <ol>
        <li><a href="#libraryReqts">Development requirements</a></li>
        <li><a href="#librarySetup">Setting up a library project</a></li>
        <li><a href="#libraryReference">Referencing a library project</a></li>
        <li><a href="#considerations">Development considerations</a></li>
      </ol>
    </li>
    <li><a href="#Tips">Eclipse Tips</a></li>
  </div>
</div>


<p>The Android Development Tools (ADT) plugin for Eclipse adds powerful extensions to the Eclipse 
integrated development environment. It allows you to create and debug 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 information directly 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>
  <li>It will even export your project into a signed APK, which can be distributed to users.</li>
</ul>

<p>To begin developing Android applications in the Eclipse IDE with ADT, you first need to 
download the Eclipse IDE and then download and install the ADT plugin. To do so, follow the 
steps given in <a href="{@docRoot}sdk/eclipse-adt.html#installing">Installing 
the ADT Plugin</a>.</p>

<p>If you are already developing applications using a version of ADT earlier than 0.9, make
sure to upgrade to the latest version before continuing. See the guide to
<a href="{@docRoot}sdk/eclipse-adt.html#updating">Updating Your ADT Plugin</a>.</p>

<p class="note"><strong>Note:</strong> This guide assumes you are using the latest version of
the ADT plugin. While most of the information covered also applies to previous 
versions, if you are using an older version, you may want to consult this document from
the set of documentation included in your SDK package (instead of the online version).</p>


<h2  id="CreatingAProject">Creating an Android Project</h2>

<p>The ADT plugin provides a New Project Wizard that you can use to quickly create a new
Android project (or a project from existing code). To create a new project:</p>

<ol>
  <li>Select <strong>File</strong> &gt; <strong>New</strong> &gt; <strong>Project</strong>.</li>
  <li>Select <strong>Android</strong> &gt; <strong>Android Project</strong>, and click
    <strong>Next</strong>.</li>
  <li>Select the contents for the project:
    <ul>
      <li>Enter a <em>Project Name</em>. This will be the name of the folder where your
        project is created.</li>
      <li>Under Contents, select <strong>Create new project in workspace</strong>.
        Select your project workspace location.</li>
      <li>Under Target, select an Android target to be used as the project's Build Target. 
        The Build Target
        specifies which Android platform you'd like your application built against.
        <p>Unless you know that you'll be using new APIs introduced in the latest SDK, you should
        select a target with the lowest platform version possible.</p>
        <p class="note"><strong>Note:</strong> You can change your the Build Target for your 
        project at any time: Right-click the project in the Package Explorer, select
        <strong>Properties</strong>, select <strong>Android</strong> and then check 
        the desired Project Target.</p>
      </li>
      <li>Under Properties, fill in all necessary fields.
        <ul>
          <li>Enter an <em>Application name</em>. This is the human-readable title for your 
            application &mdash; the name that will appear on the Android device.</li>
          <li>Enter a <em>Package name</em>. This is the package namespace (following the same rules
            as for packages in the Java programming language) where all your source code
            will reside.</li>
          <li>Select <em>Create Activity</em> (optional, of course, but common) and enter a name
            for your main Activity class.</li>
          <li>Enter a <em>Min SDK Version</em>. This is an integer that indicates
            the minimum API Level required to properly run your application. 
            Entering this here automatically sets the <code>minSdkVersion</code> attribute in the 
            <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">&lt;uses-sdk&gt;</a>
            of your Android Manifest file. If you're unsure of the appropriate <a
href="{@docRoot}guide/appendix/api-levels.html">API Level</a> to use,
            copy the API Level listed for the Build Target you selected in the Target tab.</li>
        </ul>
      </li>
    </ul>
  </li>
  <li>Click <strong>Finish</strong>.</li>
</ol>

<p class="note"><strong>Tip:</strong>
You can also start the New Project Wizard from the <em>New</em> icon in the toolbar.</p>

<p>Once you complete the New Project Wizard, ADT creates the following 
folders and files in your new project:</p>
  <dl>
    <dt><code>src/</code></dt>
      <dd>Includes your stub Activity Java file. All other Java files for your application
      go here.</dd>
    <dt><code><em>&lt;Android Version&gt;</em>/</code> (e.g., <code>Android 1.1/</code>)</dt>
      <dd>Includes the <code>android.jar</code> file that your application will build against. 
      This is determined by the build target that you have chosen in the <em>New Project
      Wizard</em>.</dd>
    <dt><code>gen/</code></dt>
      <dd>This contains the Java files generated by ADT, such as your <code>R.java</code> file
      and interfaces created from AIDL files.</dd>
    <dt><code>assets/</code></dt>
      <dd>This is empty. You can use it to store raw asset files. </dd>
    <dt><code>res/</code></dt>
      <dd>A folder for your application resources, such as drawable files, layout files, string
      values, etc. See 
      <a href="{@docRoot}guide/topics/resources/index.html">Application Resources</a>.</dd>
    <dt><code>AndroidManifest.xml</code></dt>
      <dd>The Android Manifest for your project. See 
      <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">The AndroidManifest.xml 
      File</a>.</dd>
    <dt><code>default.properties</code></dt>
      <dd>This file contains project settings, such as the build target. This files is integral
      to the project, as such, it should be maintained in a Source Revision Control system. 
      It should never be edited manually &mdash; to edit project properties, 
      right-click the project folder and select "Properties".</dd>
  </dl>


<h2 id="AVD">Creating an AVD</h2>

<p>An Android Virtual Device (AVD) is a device configuration for the emulator that
allows you to model real world devices. In order to run an instance of the emulator, you must create
an AVD.</p>

<p>To create an AVD from Eclipse:</p>

<ol>
  <li>Select <strong>Window > Android SDK and AVD Manager</strong>, or click the Android SDK and
AVD Manager icon in the Eclipse toolbar.</p>
  </li>
  <li>In the <em>Virtual Devices</em> panel, you'll see a list of existing AVDs. Click
<strong>New</strong> to create a new AVD.</li>
  <li>Fill in the details for the AVD.
    <p>Give it a name, a platform target, an SD card size, and
    a skin (HVGA is default).</p>
    <p class="note"><strong>Note:</strong> Be sure to define
    a target for your AVD that satisfies your application's Build Target (the AVD
    platform target must have an API Level equal to or greater than the API Level that your
application compiles against).</p>
  </li>
  <li>Click <strong>Create AVD</strong>.</li>
</ol>

<p>Your AVD is now ready and you can either close the SDK and AVD Manager, create more AVDs, or
launch an emulator with the AVD by selecting a device and clicking <strong>Start</strong>.</p>

<p>For more information about AVDs, read the
<a href="{@docRoot}guide/developing/tools/avd.html">Android Virtual Devices</a>
documentation.</p>


<h2 id="Running">Running Your Application</h2>

<div class="sidebox-wrapper">
<div class="sidebox">
<h2>Use the Emulator to Test Different Configurations</h2>
<p>Create multiple AVDs that each define a different device configuration with which your
application is compatible, then launch each AVD into a new emulator from the SDK and AVD Manager.
Set the target mode in your app's run configuration to manual, so that when you run your
application, you can select from the available virtual devices.</p>
</div>
</div>

<p>Running your application from Eclipse will usually require just a couple clicks, whether you're
running it on the emulator or on an attached device. The information below describes how to get
set up and run your application from Eclipse.</p>

<h3 id="RunningOnEmulator">Running on the emulator</h3>

<p>Before you can run your application on the Android Emulator,
you <strong>must</strong> <a href="#AVD">create an AVD</a>.</p>

<p>To run (or debug) your application, select <strong>Run</strong> &gt; <strong>Run</strong> (or
<strong>Run</strong> &gt; <strong>Debug</strong>) from the Eclipse menu bar. The ADT plugin
will automatically create a default launch configuration for the project. Eclipse will then perform
the following:</p>

<ol>
  <li>Compile the project (if there have been changes since the last build).</li>
  <li>Create a default launch configuration (if one does not already exist for the
project).</li>
  <li>Install and start the application on an emulator (or device), based on the Deployment
Target
    defined by the run configuration.
    <p>By default, Android run configurations use an "automatic target" mode for
    selecting a device target. For information on how automatic target mode selects a
    deployment target, see <a href="#AutoAndManualTargetModes">Automatic and manual
    target modes</a> below.</p>
  </li>
</ol>

<p>If debugging, the application will start in the "Waiting For Debugger" mode. Once the
debugger is attached, Eclipse will open the Debug perspective.</p>

<p>To set or change the launch configuration used for your project, use the launch configuration
manager.
See <a href="#launchconfig">Creating a Launch Configuration</a> for information.</p>

<p>Be certain to create multiple AVDs upon which to test your application. You should have one AVD
for each platform and screen type with which your application is compatible. For
instance, if your application compiles against the Android 1.5 (API Level 3) platform, you should
create an AVD for each platform equal to and greater than 1.5 and an AVD for each <a
href="{@docRoot}guide/practices/screens_support.html">screen type</a> you support, then test
your application on each one.</p>


<h3 id="RunningOnDevice">Running on a device</h3>

<p>Before you can run your application on a device, you must perform some basic setup for your
device:</p>

<ul>
  <li>Declare your application as debuggable in your manifest</li>
  <li>Enable USB Debugging on your device</li>
  <li>Ensure that your development computer can detect your device when connected via USB</li>
</ul>
<p>Read <a href="{@docRoot}guide/developing/device.html#setting-up">Setting up a Device for
Development</a> for more information.</p>

<p>Once set up and your device is connected via USB, install your application on the device by
selecting <strong>Run</strong> &gt; <strong>Run</strong> (or
<strong>Run</strong> &gt; <strong>Debug</strong>) from the Eclipse menu bar.</p>



<h2 id="RunConfig">Creating a Run Configuration</h2>

<p>The run configuration specifies the project to run, the Activity 
to start, the emulator or connected device to use, and so on. When you first run a project
as an <em>Android Application</em>, ADT will automatically create a run configuration.
The default run configuration will
launch the default project Activity and use automatic target mode for device selection 
(with no preferred AVD). If the default settings don't suit your project, you can 
customize the launch configuration or even create a new.</p>

<p>To create or modify a launch configuration, follow these steps as appropriate 
for your Eclipse version:</p>

<ol>
  <li>Open the run configuration manager.
        <ul>
          <li>In Eclipse 3.3 (Europa), select <strong>Run</strong> &gt; 
            <strong>Open Run Dialog</strong> (or <strong>Open Debug Dialog</strong>)
          </li>
          <li>In Eclipse 3.4 (Ganymede), select <strong>Run </strong>&gt; 
            <strong>Run Configurations</strong> (or
            <strong>Debug Configurations</strong>)
          </li>
      </ul>
  </li>
  <li>Expand the <strong>Android Application</strong> item and create a new
  configuration or open an existing one.
    <ul>
      <li>To create a new configuration:
        <ol>
          <li>Select <strong>Android Application</strong> and click the <em>New launch
configuration</em>
          icon above the list (or, right-click  <strong>Android Application</strong> and click 
          <strong>New</strong>).</li>
          <li>Enter a Name for your configuration.</li>
          <li>In the Android tab, browse and select the project you'd like to run with the
          configuration.</li>
        </ol>
      <li>To open an existing configuration, select the configuration name from the list
      nested below <strong>Android Application</strong>.</li>
    </ul>
  </li>
  <li>Adjust your desired launch configuration settings.
    <p>In the Target tab, consider whether you'd like to use Manual or Automatic mode
    when selecting an AVD to run your application.
    See the following section on <a href=#AutoAndManualModes">Automatic and manual target 
    modes</a>).</p>
    <p>You can specify any emulator options to the Additional Emulator Command
    Line Options field. For example, you could add <code>-scale 96dpi</code> to
    scale the AVD's screen to an accurate size, based on the dpi of your
    computer monitor. For a full list of emulator options, see the <a
    href="{@docRoot}guide/developing/tools/emulator.html">Android Emulator</a>
document.</p>
  </li>
</ol>


<h3 id="AutoAndManualTargetModes">Automatic and manual target modes</h3>

<p>By default, a run configuration uses the <strong>automatic</strong> target mode in order to
select an AVD. In this mode, ADT will select an AVD for the application in the following manner:</p>

<ol>
  <li>If there's a device or emulator already running and its AVD configuration
  meets the requirements of the application's build target, the application is installed
  and run upon it.</li>
  <li>If there's more than one device or emulator running, each of which meets the requirements
  of the build target, a "device chooser" is shown to let you select which device to use.</li>
  <li>If there are no devices or emulators running that meet the requirements of the build target, 
  ADT looks at the available AVDs. If one meets the requirements of the build target,
  the AVD is used to launch a new emulator, upon which the application is installed and run.</li>
  <li>If all else fails, the application will not be run and you will see a console error warning
  you that there is no existing AVD that meets the build target requirements.</li>
</ol>

<p>However, if a "preferred AVD" is selected in the run configuration, then the application 
will <em>always</em> be deployed to that AVD. If it's not already running, then a new emulator
will be launched.</p>

<p>If your run configuration uses <strong>manual</strong> mode, then the "device chooser" 
is presented every time that your application is run, so that you can select which AVD to use.</p>


<h2 id="Signing">Signing your Applications</h2>

<p>As you begin developing Android applications, understand that all
Android applications must be digitally signed before the system will install
them on an emulator or an actual device. There are two ways to do this:
with a debug key (for immediate testing on an emulator or development device)
or with a private key (for application distribution).</p>

<p>The ADT plugin helps you get started quickly by signing your .apk files with
a debug key, prior to installing them on an emulator or development device. This means that you can
quickly run your application from Eclipse without having to
generate your own private key. No specific action on your part is needed, 
provided ADT has access to Keytool.However, please note that if you intend
to publish your application, you <strong>must</strong> sign the application with your
own private key, rather than the debug key generated by the SDK tools.</p>

<p>Please read <a href="{@docRoot}guide/publishing/app-signing.html">Signing Your
Applications</a>, which provides a thorough guide to application signing on Android
and what it means to you as an Android application developer. The document also includes
a guide to exporting and signing your application with the ADT's Export Wizard.</p>


<h2 id="libraryProject">Working with Library Projects</h2>

<div class="sidebox-wrapper">
<div class="sidebox">
<h2>Library project example code</h2>

<p>The SDK includes an example application called TicTacToeMain that shows how a
dependent application can use code and resources from an Android Library
project. The TicTacToeMain application uses code and resources from an example
library project called TicTacToeLib. 

<p style="margin-top:1em;">To download the sample applications and run them as
projects in your environment, use the <em>Android SDK and AVD Manager</em> to
download the "Samples for SDK API 8" component into your SDK. </p>

<p style="margin-top:1em;">For more information and to browse the code of the
samples, see the <a
href="{@docRoot}resources/samples/TicTacToeMain/index.html">TicTacToeMain
application</a>.</p>
</div>
</div>

<p>An Android <em>library project</em> is a development project that holds
shared Android source code and resources. Other Android application projects can
reference the library project and, at build time, include its compiled sources
in their <code>.apk</code> files. Multiple application projects can reference
the same library project and any single application project can reference
multiple library projects. </p>

<p>If you have source code and resources that are common to multiple application
projects, you can move them to a library project so that it is easier to
maintain across applications and versions. Here are some common scenarios in
which you could make use of library projects: </p>

<ul>
<li>If you are developing multiple related applications that use some of the
same components, you move the redundant components out of their respective
application projects and create a single, reuseable set of the same components
in a library project. </li>
<li>If you are creating an application that exists in both free and paid
versions. You move the part of the application that is common to both versions
into a library project. The two dependent projects, with their different package
names, will reference the library project and provide only the difference
between the two application versions.</li>
</ul>

<p>Structurally, a library project is similar to a standard Android application
project. For example, it includes a manifest file at the project root, as well
as <code>src/</code>, <code>res/</code> and similar directories. The project can
contain the same types of source code and resources as a standard
Android project, stored in the same way. For example, source code in the library
project can access its own resources through its <code>R</code> class. </p>

<p>However, a library project differs from an standard Android application
project in that you cannot compile it directly to its own <code>.apk</code> or
run it on the Android platform. Similarly, you cannot export the library project
to a self-contained JAR file, as you would do for a true library. Instead, you
must compile the library indirectly, by referencing the library from a dependent
application's build path, then building that application. </p>

<p>When you build an application that depends on a library project, the SDK
tools compile the library and merge its sources with those in the main project,
then use the result to generate the <code>.apk</code>. In cases where a resource
ID is defined in both the application and the library, the tools ensure that the
resource declared in the application gets priority and that the resource in the
library project is not compiled into the application <code>.apk</code>. This
gives your application the flexibility to either use or redefine any resource
behaviors or values that are defined in any library.</p>

<p>To organize your code further, your application can add references to
multiple library projects, then specify the relative priority of the resources
in each library. This lets you build up the resources actually used in your
application in a cumulative manner. When two libraries referenced from an
application define the same resource ID, the tools select the resource from the
library with higher priority and discard the other. </p>

<p>ADT lets you add references to library projects and set their relative
priority from the application project's Properties. As shown in Figure 2,
below, once you've added a reference to a library project, you can use the
<strong>Up</strong> and <strong>Down</strong> controls to change the ordering,
with the library listed at the top getting the higher priority. At build time,
the libraries are merged with the application one at a time, starting from the
lowest priority to the highest. </p>

<p>Note that a library project cannot itself reference another library project
and that, at build time, library projects are <em>not</em> merged with each
other before being merged with the application. However, note that a library can
import an external library (JAR) in the normal way.</p>

<p>The sections below describe how to use ADT to set up and manage library your
projects. Once you've set up your library projects and moved code into them, you
can import library classes and resources to your application in the normal way.
</p>


<h3 id="libraryReqts">Development requirements</h3>

<p>Android library projects are a build-time construct, so you can use them to
build a final application <code>.apk</code> that targets any API level and is
compiled against any version of the Android library. </p>

<p>However, to use library projects, you need to update your development
environment to use the latest tools and platforms, since older releases of the
tools and platforms do not support building with library projects. Specifically,
you need to download and install the versions listed below:</p>

<p class="table-caption"><strong>Table 1.</strong> Minimum versions of SDK tools
and plaforms on which you can develop library projects.</p>

<table>
<tr>
<th>Component</th>
<th>Minimum Version</th>
</tr>
<tr>
<td>SDK Tools</td>
<td>r6 (or higher)</td>
</tr>
<tr><td>Android 2.2 platform</td><td>r1 (or higher)</td></tr>
<tr><td>Android 2.1 platform</td><td>r2 (or higher)</td></tr>
<tr><td style="color:gray">Android 2.0.1 platform</td><td style="color:gray"><em>not supported</em></td></tr>
<tr><td style="color:gray">Android 2.0 platform</td><td style="color:gray"><em>not supported</em></td></tr>
<tr><td>Android 1.6 platform</td><td>r3 (or higher)</td></tr>
<tr><td>Android 1.5 platform</td><td>r4 (or higher)</td></tr>
<tr><td>ADT Plugin</td><td>0.9.7 (or higher)</td></tr>
</table>

<p>You can download the tools and platforms using the <em>Android SDK and AVD
Manager</em>, as described in <a href="{@docRoot}sdk/adding-components.html">Adding SDK
Components</a>. To install or update ADT, use the Eclipse Updater as described
in <a href="{@docRoot}sdk/eclipse-adt.html">ADT Plugin for Eclipse</a>.</p>


<h3 id="librarySetup">Setting up a library project</h3>

<p>A library project is a standard Android project, so you can create a new one in the
same way as you would a new application project. Specifically, you can use
the New Project Wizard, as described in <a href="#CreatingAProject">Creating an
Android Project</a>, above. </p>

<p>When you are creating the library project, you can select any application
name, package, and set other fields as needed, as shown in the diagram below.
Click Finish to create the project in the workspace.</p>

<p>Next, set the project's Properties to indicate that it is a library project:</p>

<ol>
<li>In the <strong>Package Explorer</strong>, right-click the library project
and select <strong>Properties</strong>.</li>
<li>In the <strong>Properties</strong> window, select the "Android" properties
group at left and locate the <strong>Library</strong> properties at right. </li>
<li>Select the "is Library" checkbox and click <strong>Apply</strong>.</li>
<li>Click <strong>OK</strong> to close the <strong>Properties</strong> window.</li>
</ol>

<p>The new project is now marked as a library project. You can begin moving
source code and resources into it, as described in the sections below. </p>

<p>You can also convert an existing application project into a library. To do
so, simply open the Properties for the project and select the "is Library"
checkbox. Other application projects can now reference the existing project as a
library project.</p>

<img src="{@docRoot}images/developing/adt-props-isLib.png" style="margin:0;padding:0;" />
<p class="img-caption" style="margin-left:3em;margin-bottom:2em;"><strong>Figure 1.</strong>
Marking a project as an Android library project. </p>

<h4>Creating the manifest file</h4>

<p>A library project's manifest file must declare all of the shared components
that it includes, just as would a standard Android application. For more
information, see the documentation for <a
href="{@docRoot}guide/topics/manifest/manifest-intro.html">AndroidManifest.xml</a>.</p>

<p>For example, the <a
href="{@docRoot}resources/samples/TicTacToeLib/AndroidManifest.html">TicTacToeLib</a>
example library project declares the Activity <code>GameActivity</code>: </p>

<pre>&lt;manifest&gt;
  ...
  &lt;application&gt;
    ...
    &lt;activity android:name="GameActivity" /&gt;
    ...
  &lt;/application&gt;
  ...
&lt;/manifest&gt;</pre>


<h3 id="libraryReference">Referencing a library project from an application</h3>

<p>If you are developing an application and want to include the shared code or
resources from a library project, you can do so easily by adding a reference to
the library project in the application project's Properties.</p>

<p>To add a reference to a library project, follow these steps: </p>

<ol>
<li>In the <strong>Package Explorer</strong>, right-click the dependent project
and select <strong>Properties</strong>.</li>
<li>In the <strong>Properties</strong> window, select the "Android" properties group
at left and locate the <strong>Library</strong> properties at right.</li>
<li>Click <strong>Add</strong> to open the <strong>Project Selection</strong>
dialog. </li>
<li>From the list of available library projects, select a project and click
<strong>OK</strong>.</li>
<li>When the dialog closes, click <strong>Apply</strong> in the
<strong>Properties</strong> window.</li>
<li>Click <strong>OK</strong> to close the <strong>Properties</strong> window.</li>
</ol>

<p>As soon as the Properties dialog closes, Eclipse rebuilds the project,
including the contents of the library project. </p>

<p>The figure below shows the Properties dialog that lets you add library
references and move them up and down in priority. </p>

<img src="{@docRoot}images/developing/adt-props-libRef.png" style="margin:0;padding:0;" />
<p class="img-caption" style="margin-left:3em;margin-bottom:2em;"><strong>Figure 2.</strong>
Adding a reference to a library project in the properties of an application project. </p>

<p>If you are adding references to multiple libraries, note that you can set
their relative priority (and merge order) by selecting a library and using the
<strong>Up</strong> and <strong>Down</strong> controls. The tools merge the
referenced libraries with your application starting from lowest priority (bottom
of the list) to highest (top of the list). If more than one library defines the
same resource ID, the tools select the resource from the library with higher
priority. The application itself has highest priority and its resources are
always used in preference to identical resource IDs defined in libraries.</p>

<h4>Declaring library components in the the manifest file</h4>

<p>In the manifest file of the application project, you must add declarations
of all components that the application will use that are imported from a library
project. For example, you must declare any <code>&lt;activity&gt;</code>,
<code>&lt;service&gt;</code>, <code>&lt;receiver&gt;</code>,
<code>&lt;provider&gt;</code>, and so on, as well as
<code>&lt;permission&gt;</code>, <code>&lt;uses-library&gt;</code>, and similar
elements.</p>

<p>Declarations should reference the library components by their fully-qualified
package names, where appropriate. </p>

<p>For example, the <a 
href="{@docRoot}resources/samples/TicTacToeMain/AndroidManifest.html">TicTacToeMain</a>
example application declares the library Activity <code>GameActivity</code>
like this: </p>

<pre>&lt;manifest&gt;
  ...
  &lt;application&gt;
    ...
    &lt;activity android:name="com.example.android.tictactoe.library.GameActivity" /&gt;
    ...
  &lt;/application&gt;
  ...
&lt;/manifest&gt;</pre>

<p>For more information about the manifest file, see the documentation for <a
href="{@docRoot}guide/topics/manifest/manifest-intro.html">AndroidManifest.xml</a>.</p>


<h3 id="considerations">Development considerations</h3>

<p>As you develop your library project and dependent applications, keep the 
points listed below in mind.</p>

<p><strong>Resource conflicts</strong></p>

<p>Since the tools merge the resources of a library project with those of a
dependent application project, a given resource ID might be defined in both
projects. In this case, the tools select the resource from the application, or
the library with highest priority, and discard the other resource. As you
develop your applications, be aware that common resource IDs are likely to be
defined in more than one project and will be merged, with the resource from the
application or highest-priority library taking precedence.</p>

<p><strong>Using prefixes to avoid resource conflicts</strong></p>

<p>To avoid resource conflicts for common resource IDs, consider using a prefix
or other consistent naming scheme that is unique to the project (or is  unique
across all projects). </p>

<p><strong>No export of library project to JAR</strong></p>

<p>A library cannot be distributed as a binary file (such as a jar file). This
is because the library project is compiled by the main project to use the
correct resource IDs.</p>

<p><strong>One library project cannot reference another</strong></p>

<p>A library cannot depend on another library.</p>

<p><strong>A library project can include a JAR library</strong></p>

<p>You can develop a library project that itself includes a JAR library, however
you need to manually edit the dependent application project's build path and add
a path to the JAR file. </p>

<p><strong>A library project can depend on an external JAR library</strong></p>

<p>You can develop a library project that depends on an external library (for
example, the Maps external library). In this case, the dependent application
must build against a target that includes the external library (for example, the
Google APIs Add-On). Note also that both the library project and the dependent
application must declare the external library their manifest files, in a <a
href="{@docRoot}guide/topics/manifest/uses-library-element.html"><code>&lt;uses-library&gt;</code></a>
element. </p>

<p><strong>Library project can not include AIDL files</strong></p>

<p>The tools do not support the use of <a
href="{@docRoot}guide/developing/tools/aidl.html">AIDL</a> files in a library project.
Any AIDL files used by an application must be stored in the application project
itself.</p>

<p><strong>Library project can not include raw assets</strong></p>

<p>The tools do not support the use of raw asset files in a library project.
Any asset resources used by an application must be stored in the 
<code>assets/</code> directory of the application project
itself.</p>

<p><strong>Targeting different Android platform versions in library project and
application project</strong></p>

<p>A library is compiled as part of the dependent application project, so the
API used in the library project must be compatible with the version of the
Android library used to compile the application project. In general, the library
project should use an <a href="{@docRoot}guide/appendix/api-levels.html">API level</a>
that is the same as &mdash; or lower than &mdash; that used by the application.
If the library project uses an API level that is higher than that of the
application, the application project will fail to compile. It is perfectly
acceptable to have a library that uses the Android 1.5 API (API level 3) and
that is used in an Android 1.6 (API level 4) or Android 2.1 (API level 7)
project, for instance.</p>

<p><strong>No restriction on library package name</strong></p>

<p>There is no requirement for the package name of a library to be the same as
that of applications that use it.</p>

<p><strong>Multiple R classes in gen/ folder of application project</strong></p>

<p>When you build the dependent application project, the code of any libraries
is compiled and merged to the application project. Each library has its own
<code>R</code> class, named according to the library's package name. The
<code>R</code> class generated from the resources of the main project and of the
library is created in all the packages that are needed including the main
project’s package and the libraries’ packages.</p>

<p><strong>Testing a library project</strong></p>

<p>There are two recommended ways of setting up testing on code and resources in
a library project: </p>

<ul>
<li>You can set up a <a
href="{@docRoot}guide/developing/testing/testing_otheride.html">test project</a>
that instruments an application project that depends on the library project. You
can then add tests to the project for library-specific features.</li>
<li>You can set up a set up a standard application project that depends on the
library and put the instrumentation in that project. This lets you create a
self-contained project that contains both the tests/instrumentations and the
code to test.</li>
</ul>

<p><strong>Library project storage location</strong></p>

<p>There are no specific requirements on where you should store a library
project, relative to a dependent application project, as long as the application
project can reference the library project by a relative link. You can place the
library project What is important is that the main project can reference the
library project through a relative link.</p>


<h2 id="Tips">Eclipse Tips </h2>

<h3 id="arbitraryexpressions">Executing arbitrary Java expressions in Eclipse</h3>

<p>You can execute arbitrary code when paused at a breakpoint in Eclipse. For example,
    when in a function with a String argument called &quot;zip&quot;, you can get
    information about packages and call class methods. You can also invoke arbitrary
    static methods: for example, entering <code>android.os.Debug.startMethodTracing()</code> will
    start dmTrace. </p>
<p>Open a code execution window, select <strong>Window</strong> &gt; <strong>Show
        View</strong> &gt; <strong>Display</strong> from the main menu to open the
        Display window, a simple text editor. Type your expression, highlight the
        text, and click the 'J' icon (or CTRL + SHIFT + D) to run your
        code. The code runs in the context of the selected thread, which must be
        stopped at a breakpoint or single-step point. (If you suspend the thread
        manually, you have to single-step once; this doesn't work if the thread is
        in Object.wait().)</p>
<p>If you are currently paused on a breakpoint, you can simply highlight and execute
    a piece of source code by pressing CTRL + SHIFT + D. </p>
<p>You can highlight a block of text within the same scope by pressing ALT +SHIFT
    + UP ARROW to select larger and larger enclosing blocks, or DOWN ARROW to select
    smaller blocks. </p>
<p>Here are a few sample inputs and responses in Eclipse using the Display window.</p>

<table width="100%" border="1">
    <tr>
        <th scope="col">Input</th>
        <th scope="col">Response</th>
    </tr>
    <tr>
        <td><code>zip</code></td>
        <td><code>(java.lang.String) 
        /work/device/out/linux-x86-debug/android/app/android_sdk.zip</code></td>
    </tr>
    <tr>
        <td><code>zip.endsWith(&quot;.zip&quot;)</code></td>
        <td><code>(boolean) true</code></td>
    </tr>
    <tr>
        <td><code>zip.endsWith(&quot;.jar&quot;)</code></td>
        <td><code>(boolean) false</code></td>
    </tr>
</table>
<p>You can also execute arbitrary code when not debugging by using a scrapbook page.
    Search the Eclipse documentation for &quot;scrapbook&quot;.</p>


<h3>Running DDMS Manually</h3>

<p>Although the recommended way to debug is to use the ADT plugin, you can manually run 
DDMS and configure Eclipse to debug on port 8700. (<strong>Note: </strong>Be sure that you 
have first started <a href="{@docRoot}guide/developing/tools/ddms.html">DDMS</a>). </p>


<!-- TODO: clean this up and expand it to cover more wizards and features
<h3>ADT Wizards</h3>

<p>Notice that the "New Android Project" wizard has been expanded to use the multi-platform
capabilities of the new SDK.</p>

<p>There is now a "New XML File" wizard that lets you create skeleton XML resource
files for your Android projects. This makes it easier to create a new layout, a new menu, a
new strings file, etc.</p>

<p>Both wizards are available via <strong>File > New</strong> and new icons in the main
Eclipse toolbar (located to the left of the Debug and Run icons). 
If you do not see the new icons, you may need to select <strong>Window > Reset
Perspective</strong> from the Java perspective.</p>
-->
