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/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/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>
-->
