blob: 66379a3945d2cc52fc9031b325b475da64046777 [file] [log] [blame]
Scott Main9d8dd802009-04-21 19:17:59 -07001page.title=Developing In Eclipse, with ADT
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002@jd:body
3
Scott Main9d8dd802009-04-21 19:17:59 -07004<div id="qv-wrapper">
5 <div id="qv">
6 <h2>In this document</h2>
7 <ol>
8 <li><a href="#CreatingAProject">Creating an Android Project</a></li>
Scott Main01979992010-04-05 17:42:17 -07009 <li><a href="#AVD">Creating an AVD</a></li>
Scott Main9d8dd802009-04-21 19:17:59 -070010 <li><a href="#Running">Running Your Application</a>
11 <ol>
Scott Main01979992010-04-05 17:42:17 -070012 <li><a href="#RunningOnEmulator">Running on the emulator</a></li>
13 <li><a href="#RunningOnDevice">Running on a device</a></li>
Scott Main9d8dd802009-04-21 19:17:59 -070014 </ol>
15 </li>
16 <li><a href="#RunConfig">Creating a Custom Run Configuration</a></li>
17 <li><a href="#Signing">Setting Up Application Signing</a></li>
Dirk Doughertya3245642010-05-11 19:09:53 -070018 <li><a href="#libraryProject">Working with Library Projects</a>
19 <ol>
20 <li><a href="#libraryReqts">Development requirements</a></li>
21 <li><a href="#librarySetup">Setting up a library project</a></li>
22 <li><a href="#libraryReference">Referencing a library project</a></li>
23 <li><a href="#considerations">Development considerations</a></li>
24 </ol>
25 </li>
Scott Main9d8dd802009-04-21 19:17:59 -070026 <li><a href="#Tips">Eclipse Tips</a></li>
27 </div>
28</div>
29
30
31<p>The Android Development Tools (ADT) plugin for Eclipse adds powerful extensions to the Eclipse
32integrated development environment. It allows you to create and debug Android applications easier
33and faster. If you use Eclipse, the ADT plugin gives you an incredible boost in developing Android
34applications:</p>
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080035
36<ul>
Scott Main9d8dd802009-04-21 19:17:59 -070037 <li>It gives you access to other Android development tools from inside the Eclipse IDE. For
38example, ADT lets you access the many capabilities of the DDMS tool: take screenshots, manage
Scott Main01979992010-04-05 17:42:17 -070039port-forwarding, set breakpoints, and view thread and process information directly from
40Eclipse.</li>
Scott Main9d8dd802009-04-21 19:17:59 -070041 <li>It provides a New Project Wizard, which helps you quickly create and set up all of the
42basic files you'll need for a new Android application.</li>
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080043 <li>It automates and simplifies the process of building your Android application.</li>
Scott Main9d8dd802009-04-21 19:17:59 -070044 <li>It provides an Android code editor that helps you write valid XML for your Android
45manifest and resource files.</li>
46 <li>It will even export your project into a signed APK, which can be distributed to users.</li>
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080047</ul>
48
Scott Main9d8dd802009-04-21 19:17:59 -070049<p>To begin developing Android applications in the Eclipse IDE with ADT, you first need to
50download the Eclipse IDE and then download and install the ADT plugin. To do so, follow the
Dirk Doughertyee58d1b2009-10-16 15:25:15 -070051steps given in <a href="{@docRoot}sdk/eclipse-adt.html#installing">Installing
Scott Main9d8dd802009-04-21 19:17:59 -070052the ADT Plugin</a>.</p>
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080053
Scott Main9d8dd802009-04-21 19:17:59 -070054<p>If you are already developing applications using a version of ADT earlier than 0.9, make
55sure to upgrade to the latest version before continuing. See the guide to
Dirk Doughertyee58d1b2009-10-16 15:25:15 -070056<a href="{@docRoot}sdk/eclipse-adt.html#updating">Updating Your ADT Plugin</a>.</p>
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080057
Scott Main9d8dd802009-04-21 19:17:59 -070058<p class="note"><strong>Note:</strong> This guide assumes you are using the latest version of
Dirk Dougherty3f9de8b2009-05-22 16:04:18 -070059the ADT plugin. While most of the information covered also applies to previous
Scott Main9d8dd802009-04-21 19:17:59 -070060versions, if you are using an older version, you may want to consult this document from
61the set of documentation included in your SDK package (instead of the online version).</p>
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080062
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080063
Scott Main9d8dd802009-04-21 19:17:59 -070064<h2 id="CreatingAProject">Creating an Android Project</h2>
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080065
Scott Main9d8dd802009-04-21 19:17:59 -070066<p>The ADT plugin provides a New Project Wizard that you can use to quickly create a new
67Android project (or a project from existing code). To create a new project:</p>
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080068
69<ol>
Scott Main9d8dd802009-04-21 19:17:59 -070070 <li>Select <strong>File</strong> &gt; <strong>New</strong> &gt; <strong>Project</strong>.</li>
71 <li>Select <strong>Android</strong> &gt; <strong>Android Project</strong>, and click
72 <strong>Next</strong>.</li>
73 <li>Select the contents for the project:
74 <ul>
75 <li>Enter a <em>Project Name</em>. This will be the name of the folder where your
76 project is created.</li>
77 <li>Under Contents, select <strong>Create new project in workspace</strong>.
78 Select your project workspace location.</li>
79 <li>Under Target, select an Android target to be used as the project's Build Target.
80 The Build Target
81 specifies which Android platform you'd like your application built against.
82 <p>Unless you know that you'll be using new APIs introduced in the latest SDK, you should
Scott Main01979992010-04-05 17:42:17 -070083 select a target with the lowest platform version possible.</p>
Scott Main9d8dd802009-04-21 19:17:59 -070084 <p class="note"><strong>Note:</strong> You can change your the Build Target for your
85 project at any time: Right-click the project in the Package Explorer, select
86 <strong>Properties</strong>, select <strong>Android</strong> and then check
87 the desired Project Target.</p>
88 </li>
89 <li>Under Properties, fill in all necessary fields.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080090 <ul>
Scott Main9d8dd802009-04-21 19:17:59 -070091 <li>Enter an <em>Application name</em>. This is the human-readable title for your
92 application &mdash; the name that will appear on the Android device.</li>
93 <li>Enter a <em>Package name</em>. This is the package namespace (following the same rules
94 as for packages in the Java programming language) where all your source code
95 will reside.</li>
96 <li>Select <em>Create Activity</em> (optional, of course, but common) and enter a name
97 for your main Activity class.</li>
98 <li>Enter a <em>Min SDK Version</em>. This is an integer that indicates
99 the minimum API Level required to properly run your application.
100 Entering this here automatically sets the <code>minSdkVersion</code> attribute in the
101 <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">&lt;uses-sdk&gt;</a>
Scott Main01979992010-04-05 17:42:17 -0700102 of your Android Manifest file. If you're unsure of the appropriate <a
103href="{@docRoot}guide/appendix/api-levels.html">API Level</a> to use,
Scott Main9d8dd802009-04-21 19:17:59 -0700104 copy the API Level listed for the Build Target you selected in the Target tab.</li>
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800105 </ul>
Scott Main9d8dd802009-04-21 19:17:59 -0700106 </li>
107 </ul>
108 </li>
109 <li>Click <strong>Finish</strong>.</li>
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800110</ol>
111
Scott Main9d8dd802009-04-21 19:17:59 -0700112<p class="note"><strong>Tip:</strong>
113You can also start the New Project Wizard from the <em>New</em> icon in the toolbar.</p>
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800114
Scott Main9d8dd802009-04-21 19:17:59 -0700115<p>Once you complete the New Project Wizard, ADT creates the following
116folders and files in your new project:</p>
117 <dl>
118 <dt><code>src/</code></dt>
119 <dd>Includes your stub Activity Java file. All other Java files for your application
120 go here.</dd>
121 <dt><code><em>&lt;Android Version&gt;</em>/</code> (e.g., <code>Android 1.1/</code>)</dt>
122 <dd>Includes the <code>android.jar</code> file that your application will build against.
123 This is determined by the build target that you have chosen in the <em>New Project
124 Wizard</em>.</dd>
125 <dt><code>gen/</code></dt>
126 <dd>This contains the Java files generated by ADT, such as your <code>R.java</code> file
127 and interfaces created from AIDL files.</dd>
128 <dt><code>assets/</code></dt>
Dirk Doughertya3245642010-05-11 19:09:53 -0700129 <dd>This is empty. You can use it to store raw asset files. </dd>
Scott Main9d8dd802009-04-21 19:17:59 -0700130 <dt><code>res/</code></dt>
131 <dd>A folder for your application resources, such as drawable files, layout files, string
132 values, etc. See
Dirk Doughertya3245642010-05-11 19:09:53 -0700133 <a href="{@docRoot}guide/topics/resources/index.html">Application Resources</a>.</dd>
Scott Main9d8dd802009-04-21 19:17:59 -0700134 <dt><code>AndroidManifest.xml</code></dt>
135 <dd>The Android Manifest for your project. See
136 <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">The AndroidManifest.xml
137 File</a>.</dd>
138 <dt><code>default.properties</code></dt>
139 <dd>This file contains project settings, such as the build target. This files is integral
140 to the project, as such, it should be maintained in a Source Revision Control system.
141 It should never be edited manually &mdash; to edit project properties,
142 right-click the project folder and select "Properties".</dd>
143 </dl>
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800144
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800145
Scott Main01979992010-04-05 17:42:17 -0700146<h2 id="AVD">Creating an AVD</h2>
Scott Main9d8dd802009-04-21 19:17:59 -0700147
Scott Main01979992010-04-05 17:42:17 -0700148<p>An Android Virtual Device (AVD) is a device configuration for the emulator that
149allows you to model real world devices. In order to run an instance of the emulator, you must create
150an AVD.</p>
Scott Main9d8dd802009-04-21 19:17:59 -0700151
Scott Main01979992010-04-05 17:42:17 -0700152<p>To create an AVD from Eclipse:</p>
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800153
154<ol>
Scott Main01979992010-04-05 17:42:17 -0700155 <li>Select <strong>Window > Android SDK and AVD Manager</strong>, or click the Android SDK and
156AVD Manager icon in the Eclipse toolbar.</p>
Scott Main9d8dd802009-04-21 19:17:59 -0700157 </li>
Scott Main01979992010-04-05 17:42:17 -0700158 <li>In the <em>Virtual Devices</em> panel, you'll see a list of existing AVDs. Click
159<strong>New</strong> to create a new AVD.</li>
160 <li>Fill in the details for the AVD.
161 <p>Give it a name, a platform target, an SD card size, and
Scott Main75f7a262009-08-05 19:31:00 -0700162 a skin (HVGA is default).</p>
Scott Main01979992010-04-05 17:42:17 -0700163 <p class="note"><strong>Note:</strong> Be sure to define
164 a target for your AVD that satisfies your application's Build Target (the AVD
165 platform target must have an API Level equal to or greater than the API Level that your
166application compiles against).</p>
Scott Main9d8dd802009-04-21 19:17:59 -0700167 </li>
Scott Main75f7a262009-08-05 19:31:00 -0700168 <li>Click <strong>Create AVD</strong>.</li>
Scott Main9d8dd802009-04-21 19:17:59 -0700169</ol>
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800170
Scott Main01979992010-04-05 17:42:17 -0700171<p>Your AVD is now ready and you can either close the SDK and AVD Manager, create more AVDs, or
172launch an emulator with the AVD by selecting a device and clicking <strong>Start</strong>.</p>
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800173
Scott Main01979992010-04-05 17:42:17 -0700174<p>For more information about AVDs, read the
Scott Main8a4c53a2009-04-24 13:41:44 -0700175<a href="{@docRoot}guide/developing/tools/avd.html">Android Virtual Devices</a>
176documentation.</p>
Scott Main9d8dd802009-04-21 19:17:59 -0700177
178
Scott Main01979992010-04-05 17:42:17 -0700179<h2 id="Running">Running Your Application</h2>
Scott Main9d8dd802009-04-21 19:17:59 -0700180
Scott Main01979992010-04-05 17:42:17 -0700181<div class="sidebox-wrapper">
182<div class="sidebox">
183<h2>Use the Emulator to Test Different Configurations</h2>
184<p>Create multiple AVDs that each define a different device configuration with which your
185application is compatible, then launch each AVD into a new emulator from the SDK and AVD Manager.
186Set the target mode in your app's run configuration to manual, so that when you run your
187application, you can select from the available virtual devices.</p>
188</div>
189</div>
Scott Main9d8dd802009-04-21 19:17:59 -0700190
Scott Main01979992010-04-05 17:42:17 -0700191<p>Running your application from Eclipse will usually require just a couple clicks, whether you're
192running it on the emulator or on an attached device. The information below describes how to get
193set up and run your application from Eclipse.</p>
Scott Main9d8dd802009-04-21 19:17:59 -0700194
Scott Main01979992010-04-05 17:42:17 -0700195<h3 id="RunningOnEmulator">Running on the emulator</h3>
196
197<p>Before you can run your application on the Android Emulator,
198you <strong>must</strong> <a href="#AVD">create an AVD</a>.</p>
199
200<p>To run (or debug) your application, select <strong>Run</strong> &gt; <strong>Run</strong> (or
201<strong>Run</strong> &gt; <strong>Debug</strong>) from the Eclipse menu bar. The ADT plugin
202will automatically create a default launch configuration for the project. Eclipse will then perform
203the following:</p>
Scott Main9d8dd802009-04-21 19:17:59 -0700204
205<ol>
206 <li>Compile the project (if there have been changes since the last build).</li>
Scott Main01979992010-04-05 17:42:17 -0700207 <li>Create a default launch configuration (if one does not already exist for the
208project).</li>
209 <li>Install and start the application on an emulator (or device), based on the Deployment
210Target
211 defined by the run configuration.
212 <p>By default, Android run configurations use an "automatic target" mode for
213 selecting a device target. For information on how automatic target mode selects a
214 deployment target, see <a href="#AutoAndManualTargetModes">Automatic and manual
Scott Main9d8dd802009-04-21 19:17:59 -0700215 target modes</a> below.</p>
216 </li>
217</ol>
218
Scott Main01979992010-04-05 17:42:17 -0700219<p>If debugging, the application will start in the "Waiting For Debugger" mode. Once the
Scott Main9d8dd802009-04-21 19:17:59 -0700220debugger is attached, Eclipse will open the Debug perspective.</p>
221
Scott Main01979992010-04-05 17:42:17 -0700222<p>To set or change the launch configuration used for your project, use the launch configuration
223manager.
Scott Main9d8dd802009-04-21 19:17:59 -0700224See <a href="#launchconfig">Creating a Launch Configuration</a> for information.</p>
225
Scott Main01979992010-04-05 17:42:17 -0700226<p>Be certain to create multiple AVDs upon which to test your application. You should have one AVD
227for each platform and screen type with which your application is compatible. For
228instance, if your application compiles against the Android 1.5 (API Level 3) platform, you should
229create an AVD for each platform equal to and greater than 1.5 and an AVD for each <a
230href="{@docRoot}guide/practices/screens_support.html">screen type</a> you support, then test
231your application on each one.</p>
232
233
234<h3 id="RunningOnDevice">Running on a device</h3>
235
236<p>Before you can run your application on a device, you must perform some basic setup for your
237device:</p>
238
239<ul>
240 <li>Declare your application as debuggable in your manifest</li>
241 <li>Enable USB Debugging on your device</li>
242 <li>Ensure that your development computer can detect your device when connected via USB</li>
243</ul>
244<p>Read <a href="{@docRoot}guide/developing/device.html#setting-up">Setting up a Device for
245Development</a> for more information.</p>
246
247<p>Once set up and your device is connected via USB, install your application on the device by
248selecting <strong>Run</strong> &gt; <strong>Run</strong> (or
249<strong>Run</strong> &gt; <strong>Debug</strong>) from the Eclipse menu bar.</p>
250
251
Scott Main9d8dd802009-04-21 19:17:59 -0700252
253<h2 id="RunConfig">Creating a Run Configuration</h2>
254
255<p>The run configuration specifies the project to run, the Activity
Scott Main01979992010-04-05 17:42:17 -0700256to start, the emulator or connected device to use, and so on. When you first run a project
Scott Main9d8dd802009-04-21 19:17:59 -0700257as an <em>Android Application</em>, ADT will automatically create a run configuration.
258The default run configuration will
259launch the default project Activity and use automatic target mode for device selection
Dirk Doughertya6602f12009-08-27 16:26:43 -0700260(with no preferred AVD). If the default settings don't suit your project, you can
Scott Main9d8dd802009-04-21 19:17:59 -0700261customize the launch configuration or even create a new.</p>
262
263<p>To create or modify a launch configuration, follow these steps as appropriate
264for your Eclipse version:</p>
265
266<ol>
267 <li>Open the run configuration manager.
268 <ul>
269 <li>In Eclipse 3.3 (Europa), select <strong>Run</strong> &gt;
270 <strong>Open Run Dialog</strong> (or <strong>Open Debug Dialog</strong>)
271 </li>
272 <li>In Eclipse 3.4 (Ganymede), select <strong>Run </strong>&gt;
273 <strong>Run Configurations</strong> (or
274 <strong>Debug Configurations</strong>)
275 </li>
276 </ul>
277 </li>
278 <li>Expand the <strong>Android Application</strong> item and create a new
279 configuration or open an existing one.
280 <ul>
281 <li>To create a new configuration:
282 <ol>
Scott Main01979992010-04-05 17:42:17 -0700283 <li>Select <strong>Android Application</strong> and click the <em>New launch
284configuration</em>
Scott Main9d8dd802009-04-21 19:17:59 -0700285 icon above the list (or, right-click <strong>Android Application</strong> and click
286 <strong>New</strong>).</li>
287 <li>Enter a Name for your configuration.</li>
288 <li>In the Android tab, browse and select the project you'd like to run with the
289 configuration.</li>
290 </ol>
291 <li>To open an existing configuration, select the configuration name from the list
292 nested below <strong>Android Application</strong>.</li>
293 </ul>
294 </li>
295 <li>Adjust your desired launch configuration settings.
296 <p>In the Target tab, consider whether you'd like to use Manual or Automatic mode
297 when selecting an AVD to run your application.
298 See the following section on <a href=#AutoAndManualModes">Automatic and manual target
299 modes</a>).</p>
Dirk Doughertya6602f12009-08-27 16:26:43 -0700300 <p>You can specify any emulator options to the Additional Emulator Command
301 Line Options field. For example, you could add <code>-scale 96dpi</code> to
302 scale the AVD's screen to an accurate size, based on the dpi of your
303 computer monitor. For a full list of emulator options, see the <a
304 href="{@docRoot}guide/developing/tools/emulator.html">Android Emulator</a>
305document.</p>
Scott Main9d8dd802009-04-21 19:17:59 -0700306 </li>
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800307</ol>
308
309
Scott Main9d8dd802009-04-21 19:17:59 -0700310<h3 id="AutoAndManualTargetModes">Automatic and manual target modes</h3>
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800311
Scott Main01979992010-04-05 17:42:17 -0700312<p>By default, a run configuration uses the <strong>automatic</strong> target mode in order to
Dirk Doughertya3245642010-05-11 19:09:53 -0700313select an AVD. In this mode, ADT will select an AVD for the application in the following manner:</p>
Scott Main9d8dd802009-04-21 19:17:59 -0700314
315<ol>
316 <li>If there's a device or emulator already running and its AVD configuration
317 meets the requirements of the application's build target, the application is installed
318 and run upon it.</li>
319 <li>If there's more than one device or emulator running, each of which meets the requirements
320 of the build target, a "device chooser" is shown to let you select which device to use.</li>
321 <li>If there are no devices or emulators running that meet the requirements of the build target,
322 ADT looks at the available AVDs. If one meets the requirements of the build target,
323 the AVD is used to launch a new emulator, upon which the application is installed and run.</li>
324 <li>If all else fails, the application will not be run and you will see a console error warning
325 you that there is no existing AVD that meets the build target requirements.</li>
326</ol>
327
328<p>However, if a "preferred AVD" is selected in the run configuration, then the application
329will <em>always</em> be deployed to that AVD. If it's not already running, then a new emulator
330will be launched.</p>
331
332<p>If your run configuration uses <strong>manual</strong> mode, then the "device chooser"
333is presented every time that your application is run, so that you can select which AVD to use.</p>
334
335
336<h2 id="Signing">Signing your Applications</h2>
337
338<p>As you begin developing Android applications, understand that all
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800339Android applications must be digitally signed before the system will install
Scott Main9d8dd802009-04-21 19:17:59 -0700340them on an emulator or an actual device. There are two ways to do this:
341with a debug key (for immediate testing on an emulator or development device)
342or with a private key (for application distribution).</p>
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800343
344<p>The ADT plugin helps you get started quickly by signing your .apk files with
Scott Main9d8dd802009-04-21 19:17:59 -0700345a debug key, prior to installing them on an emulator or development device. This means that you can
346quickly run your application from Eclipse without having to
347generate your own private key. No specific action on your part is needed,
348provided ADT has access to Keytool.However, please note that if you intend
349to publish your application, you <strong>must</strong> sign the application with your
350own private key, rather than the debug key generated by the SDK tools.</p>
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800351
Scott Main9d8dd802009-04-21 19:17:59 -0700352<p>Please read <a href="{@docRoot}guide/publishing/app-signing.html">Signing Your
353Applications</a>, which provides a thorough guide to application signing on Android
354and what it means to you as an Android application developer. The document also includes
355a guide to exporting and signing your application with the ADT's Export Wizard.</p>
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800356
357
Dirk Doughertya3245642010-05-11 19:09:53 -0700358<h2 id="libraryProject">Working with Library Projects</h2>
359
360<div class="sidebox-wrapper">
361<div class="sidebox">
362<h2>Library project example code</h2>
363
364<p>The SDK includes an example application called TicTacToeMain that shows how a
365dependent application can use code and resources from an Android Library
366project. The TicTacToeMain application uses code and resources from an example
367library project called TicTacToeLib.
368
369<p style="margin-top:1em;">To download the sample applications and run them as
370projects in your environment, use the <em>Android SDK and AVD Manager</em> to
371download the "Samples for SDK API 8" component into your SDK. </p>
372
373<p style="margin-top:1em;">For more information and to browse the code of the
374samples, see the <a
375href="{@docRoot}resources/samples/TicTacToeMain/index.html">TicTacToeMain
376application</a>.</p>
377</div>
378</div>
379
380<p>An Android <em>library project</em> is a development project that holds
381shared Android source code and resources. Other Android application projects can
382reference the library project and, at build time, include its compiled sources
383in their <code>.apk</code> files. Multiple application projects can reference
384the same library project and any single application project can reference
385multiple library projects. </p>
386
387<p>If you have source code and resources that are common to multiple application
388projects, you can move them to a library project so that it is easier to
389maintain across applications and versions. Here are some common scenarios in
390which you could make use of library projects: </p>
391
392<ul>
393<li>If you are developing multiple related applications that use some of the
394same components, you move the redundant components out of their respective
395application projects and create a single, reuseable set of the same components
396in a library project. </li>
397<li>If you are creating an application that exists in both free and paid
398versions. You move the part of the application that is common to both versions
399into a library project. The two dependent projects, with their different package
400names, will reference the library project and provide only the difference
401between the two application versions.</li>
402</ul>
403
404<p>Structurally, a library project is similar to a standard Android application
405project. For example, it includes a manifest file at the project root, as well
406as <code>src/</code>, <code>res/</code> and similar directories. The project can
407contain the same types of source code and resources as a standard
408Android project, stored in the same way. For example, source code in the library
409project can access its own resources through its <code>R</code> class. </p>
410
411<p>However, a library project differs from an standard Android application
412project in that you cannot compile it directly to its own <code>.apk</code> or
413run it on the Android platform. Similarly, you cannot export the library project
414to a self-contained JAR file, as you would do for a true library. Instead, you
415must compile the library indirectly, by referencing the library from a dependent
416application's build path, then building that application. </p>
417
418<p>When you build an application that depends on a library project, the SDK
419tools compile the library and merge its sources with those in the main project,
420then use the result to generate the <code>.apk</code>. In cases where a resource
421ID is defined in both the application and the library, the tools ensure that the
422resource declared in the application gets priority and that the resource in the
423library project is not compiled into the application <code>.apk</code>. This
424gives your application the flexibility to either use or redefine any resource
425behaviors or values that are defined in any library.</p>
426
427<p>To organize your code further, your application can add references to
428multiple library projects, then specify the relative priority of the resources
429in each library. This lets you build up the resources actually used in your
430application in a cumulative manner. When two libraries referenced from an
431application define the same resource ID, the tools select the resource from the
432library with higher priority and discard the other. </p>
433
434<p>ADT lets you add references to library projects and set their relative
435priority from the application project's Properties. As shown in Figure 2,
436below, once you've added a reference to a library project, you can use the
437<strong>Up</strong> and <strong>Down</strong> controls to change the ordering,
438with the library listed at the top getting the higher priority. At build time,
439the libraries are merged with the application one at a time, starting from the
440lowest priority to the highest. </p>
441
442<p>Note that a library project cannot itself reference another library project
443and that, at build time, library projects are <em>not</em> merged with each
444other before being merged with the application. However, note that a library can
445import an external library (JAR) in the normal way.</p>
446
447<p>The sections below describe how to use ADT to set up and manage library your
448projects. Once you've set up your library projects and moved code into them, you
449can import library classes and resources to your application in the normal way.
450</p>
451
452
453<h3 id="libraryReqts">Development requirements</h3>
454
455<p>Android library projects are a build-time construct, so you can use them to
456build a final application <code>.apk</code> that targets any API level and is
457compiled against any version of the Android library. </p>
458
459<p>However, to use library projects, you need to update your development
460environment to use the latest tools and platforms, since older releases of the
461tools and platforms do not support building with library projects. Specifically,
462you need to download and install the versions listed below:</p>
463
464<p class="table-caption"><strong>Table 1.</strong> Minimum versions of SDK tools
465and plaforms on which you can develop library projects.</p>
466
467<table>
468<tr>
469<th>Component</th>
470<th>Minimum Version</th>
471</tr>
472<tr>
473<td>SDK Tools</td>
474<td>r6 (or higher)</td>
475</tr>
476<tr><td>Android 2.2 platform</td><td>r1 (or higher)</td></tr>
477<tr><td>Android 2.1 platform</td><td>r2 (or higher)</td></tr>
478<tr><td style="color:gray">Android 2.0.1 platform</td><td style="color:gray"><em>not supported</em></td></tr>
479<tr><td style="color:gray">Android 2.0 platform</td><td style="color:gray"><em>not supported</em></td></tr>
480<tr><td>Android 1.6 platform</td><td>r3 (or higher)</td></tr>
481<tr><td>Android 1.5 platform</td><td>r4 (or higher)</td></tr>
482<tr><td>ADT Plugin</td><td>0.9.7 (or higher)</td></tr>
483</table>
484
485<p>You can download the tools and platforms using the <em>Android SDK and AVD
486Manager</em>, as described in <a href="{@docRoot}sdk/adding-components.html">Adding SDK
487Components</a>. To install or update ADT, use the Eclipse Updater as described
488in <a href="{@docRoot}sdk/eclipse-adt.html">ADT Plugin for Eclipse</a>.</p>
489
490
491<h3 id="librarySetup">Setting up a library project</h3>
492
493<p>A library project is a standard Android project, so you can create a new one in the
494same way as you would a new application project. Specifically, you can use
495the New Project Wizard, as described in <a href="#CreatingAProject">Creating an
496Android Project</a>, above. </p>
497
498<p>When you are creating the library project, you can select any application
499name, package, and set other fields as needed, as shown in the diagram below.
500Click Finish to create the project in the workspace.</p>
501
502<p>Next, set the project's Properties to indicate that it is a library project:</p>
503
504<ol>
505<li>In the <strong>Package Explorer</strong>, right-click the library project
506and select <strong>Properties</strong>.</li>
507<li>In the <strong>Properties</strong> window, select the "Android" properties
508group at left and locate the <strong>Library</strong> properties at right. </li>
509<li>Select the "is Library" checkbox and click <strong>Apply</strong>.</li>
510<li>Click <strong>OK</strong> to close the <strong>Properties</strong> window.</li>
511</ol>
512
513<p>The new project is now marked as a library project. You can begin moving
514source code and resources into it, as described in the sections below. </p>
515
516<p>You can also convert an existing application project into a library. To do
517so, simply open the Properties for the project and select the "is Library"
518checkbox. Other application projects can now reference the existing project as a
519library project.</p>
520
521<img src="{@docRoot}images/developing/adt-props-isLib.png" style="margin:0;padding:0;" />
522<p class="img-caption" style="margin-left:3em;margin-bottom:2em;"><strong>Figure 1.</strong>
523Marking a project as an Android library project. </p>
524
525<h4>Creating the manifest file</h4>
526
527<p>A library project's manifest file must declare all of the shared components
528that it includes, just as would a standard Android application. For more
529information, see the documentation for <a
Scott Main1c8b6ca2010-07-02 11:11:34 -0700530href="{@docRoot}guide/topics/manifest/manifest-intro.html">AndroidManifest.xml</a>.</p>
Dirk Doughertya3245642010-05-11 19:09:53 -0700531
532<p>For example, the <a
533href="{@docRoot}resources/samples/TicTacToeLib/AndroidManifest.html">TicTacToeLib</a>
534example library project declares the Activity <code>GameActivity</code>: </p>
535
536<pre>&lt;manifest&gt;
537 ...
538 &lt;application&gt;
539 ...
540 &lt;activity android:name="GameActivity" /&gt;
541 ...
542 &lt;/application&gt;
543 ...
544&lt;/manifest&gt;</pre>
545
546
547<h3 id="libraryReference">Referencing a library project from an application</h3>
548
549<p>If you are developing an application and want to include the shared code or
550resources from a library project, you can do so easily by adding a reference to
551the library project in the application project's Properties.</p>
552
553<p>To add a reference to a library project, follow these steps: </p>
554
555<ol>
556<li>In the <strong>Package Explorer</strong>, right-click the dependent project
557and select <strong>Properties</strong>.</li>
558<li>In the <strong>Properties</strong> window, select the "Android" properties group
559at left and locate the <strong>Library</strong> properties at right.</li>
560<li>Click <strong>Add</strong> to open the <strong>Project Selection</strong>
561dialog. </li>
562<li>From the list of available library projects, select a project and click
563<strong>OK</strong>.</li>
564<li>When the dialog closes, click <strong>Apply</strong> in the
565<strong>Properties</strong> window.</li>
566<li>Click <strong>OK</strong> to close the <strong>Properties</strong> window.</li>
567</ol>
568
569<p>As soon as the Properties dialog closes, Eclipse rebuilds the project,
570including the contents of the library project. </p>
571
572<p>The figure below shows the Properties dialog that lets you add library
573references and move them up and down in priority. </p>
574
575<img src="{@docRoot}images/developing/adt-props-libRef.png" style="margin:0;padding:0;" />
576<p class="img-caption" style="margin-left:3em;margin-bottom:2em;"><strong>Figure 2.</strong>
577Adding a reference to a library project in the properties of an application project. </p>
578
579<p>If you are adding references to multiple libraries, note that you can set
580their relative priority (and merge order) by selecting a library and using the
581<strong>Up</strong> and <strong>Down</strong> controls. The tools merge the
582referenced libraries with your application starting from lowest priority (bottom
583of the list) to highest (top of the list). If more than one library defines the
584same resource ID, the tools select the resource from the library with higher
585priority. The application itself has highest priority and its resources are
586always used in preference to identical resource IDs defined in libraries.</p>
587
588<h4>Declaring library components in the the manifest file</h4>
589
590<p>In the manifest file of the application project, you must add declarations
591of all components that the application will use that are imported from a library
592project. For example, you must declare any <code>&lt;activity&gt;</code>,
593<code>&lt;service&gt;</code>, <code>&lt;receiver&gt;</code>,
594<code>&lt;provider&gt;</code>, and so on, as well as
595<code>&lt;permission&gt;</code>, <code>&lt;uses-library&gt;</code>, and similar
596elements.</p>
597
598<p>Declarations should reference the library components by their fully-qualified
599package names, where appropriate. </p>
600
601<p>For example, the <a
602href="{@docRoot}resources/samples/TicTacToeMain/AndroidManifest.html">TicTacToeMain</a>
603example application declares the library Activity <code>GameActivity</code>
604like this: </p>
605
606<pre>&lt;manifest&gt;
607 ...
608 &lt;application&gt;
609 ...
610 &lt;activity android:name="com.example.android.tictactoe.library.GameActivity" /&gt;
611 ...
612 &lt;/application&gt;
613 ...
614&lt;/manifest&gt;</pre>
615
Scott Main1c8b6ca2010-07-02 11:11:34 -0700616<p>For more information about the manifest file, see the documentation for <a
617href="{@docRoot}guide/topics/manifest/manifest-intro.html">AndroidManifest.xml</a>.</p>
Dirk Doughertya3245642010-05-11 19:09:53 -0700618
619
620<h3 id="considerations">Development considerations</h3>
621
622<p>As you develop your library project and dependent applications, keep the
623points listed below in mind.</p>
624
625<p><strong>Resource conflicts</strong></p>
626
627<p>Since the tools merge the resources of a library project with those of a
628dependent application project, a given resource ID might be defined in both
629projects. In this case, the tools select the resource from the application, or
630the library with highest priority, and discard the other resource. As you
631develop your applications, be aware that common resource IDs are likely to be
632defined in more than one project and will be merged, with the resource from the
633application or highest-priority library taking precedence.</p>
634
635<p><strong>Using prefixes to avoid resource conflicts</strong></p>
636
637<p>To avoid resource conflicts for common resource IDs, consider using a prefix
638or other consistent naming scheme that is unique to the project (or is unique
639across all projects). </p>
640
641<p><strong>No export of library project to JAR</strong></p>
642
643<p>A library cannot be distributed as a binary file (such as a jar file). This
644is because the library project is compiled by the main project to use the
645correct resource IDs.</p>
646
647<p><strong>One library project cannot reference another</strong></p>
648
649<p>A library cannot depend on another library.</p>
650
651<p><strong>A library project can include a JAR library</strong></p>
652
653<p>You can develop a library project that itself includes a JAR library, however
654you need to manually edit the dependent application project's build path and add
655a path to the JAR file. </p>
656
657<p><strong>A library project can depend on an external JAR library</strong></p>
658
659<p>You can develop a library project that depends on an external library (for
660example, the Maps external library). In this case, the dependent application
661must build against a target that includes the external library (for example, the
662Google APIs Add-On). Note also that both the library project and the dependent
663application must declare the external library their manifest files, in a <a
664href="{@docRoot}guide/topics/manifest/uses-library-element.html"><code>&lt;uses-library&gt;</code></a>
665element. </p>
666
667<p><strong>Library project can not include AIDL files</strong></p>
668
669<p>The tools do not support the use of <a
670href="{@docRoot}guide/developing/tools/aidl.html">AIDL</a> files in a library project.
671Any AIDL files used by an application must be stored in the application project
672itself.</p>
673
674<p><strong>Library project can not include raw assets</strong></p>
675
676<p>The tools do not support the use of raw asset files in a library project.
677Any asset resources used by an application must be stored in the
678<code>assets/</code> directory of the application project
679itself.</p>
680
681<p><strong>Targeting different Android platform versions in library project and
682application project</strong></p>
683
684<p>A library is compiled as part of the dependent application project, so the
685API used in the library project must be compatible with the version of the
686Android library used to compile the application project. In general, the library
687project should use an <a href="{@docRoot}guide/appendix/api-levels.html">API level</a>
688that is the same as &mdash; or lower than &mdash; that used by the application.
689If the library project uses an API level that is higher than that of the
690application, the application project will fail to compile. It is perfectly
691acceptable to have a library that uses the Android 1.5 API (API level 3) and
692that is used in an Android 1.6 (API level 4) or Android 2.1 (API level 7)
693project, for instance.</p>
694
695<p><strong>No restriction on library package name</strong></p>
696
697<p>There is no requirement for the package name of a library to be the same as
698that of applications that use it.</p>
699
700<p><strong>Multiple R classes in gen/ folder of application project</strong></p>
701
702<p>When you build the dependent application project, the code of any libraries
703is compiled and merged to the application project. Each library has its own
704<code>R</code> class, named according to the library's package name. The
705<code>R</code> class generated from the resources of the main project and of the
706library is created in all the packages that are needed including the main
707project’s package and the libraries’ packages.</p>
708
709<p><strong>Testing a library project</strong></p>
710
711<p>There are two recommended ways of setting up testing on code and resources in
712a library project: </p>
713
714<ul>
715<li>You can set up a <a
716href="{@docRoot}guide/developing/testing/testing_otheride.html">test project</a>
717that instruments an application project that depends on the library project. You
718can then add tests to the project for library-specific features.</li>
719<li>You can set up a set up a standard application project that depends on the
720library and put the instrumentation in that project. This lets you create a
721self-contained project that contains both the tests/instrumentations and the
722code to test.</li>
723</ul>
724
725<p><strong>Library project storage location</strong></p>
726
727<p>There are no specific requirements on where you should store a library
728project, relative to a dependent application project, as long as the application
729project can reference the library project by a relative link. You can place the
730library project What is important is that the main project can reference the
731library project through a relative link.</p>
732
733
Scott Main9d8dd802009-04-21 19:17:59 -0700734<h2 id="Tips">Eclipse Tips </h2>
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800735
Scott Main9d8dd802009-04-21 19:17:59 -0700736<h3 id="arbitraryexpressions">Executing arbitrary Java expressions in Eclipse</h3>
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800737
Scott Main9d8dd802009-04-21 19:17:59 -0700738<p>You can execute arbitrary code when paused at a breakpoint in Eclipse. For example,
739 when in a function with a String argument called &quot;zip&quot;, you can get
740 information about packages and call class methods. You can also invoke arbitrary
741 static methods: for example, entering <code>android.os.Debug.startMethodTracing()</code> will
742 start dmTrace. </p>
Scott Main01979992010-04-05 17:42:17 -0700743<p>Open a code execution window, select <strong>Window</strong> &gt; <strong>Show
744 View</strong> &gt; <strong>Display</strong> from the main menu to open the
Scott Main9d8dd802009-04-21 19:17:59 -0700745 Display window, a simple text editor. Type your expression, highlight the
746 text, and click the 'J' icon (or CTRL + SHIFT + D) to run your
747 code. The code runs in the context of the selected thread, which must be
748 stopped at a breakpoint or single-step point. (If you suspend the thread
749 manually, you have to single-step once; this doesn't work if the thread is
750 in Object.wait().)</p>
751<p>If you are currently paused on a breakpoint, you can simply highlight and execute
752 a piece of source code by pressing CTRL + SHIFT + D. </p>
753<p>You can highlight a block of text within the same scope by pressing ALT +SHIFT
754 + UP ARROW to select larger and larger enclosing blocks, or DOWN ARROW to select
755 smaller blocks. </p>
756<p>Here are a few sample inputs and responses in Eclipse using the Display window.</p>
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800757
Scott Main9d8dd802009-04-21 19:17:59 -0700758<table width="100%" border="1">
759 <tr>
760 <th scope="col">Input</th>
761 <th scope="col">Response</th>
762 </tr>
763 <tr>
764 <td><code>zip</code></td>
765 <td><code>(java.lang.String)
766 /work/device/out/linux-x86-debug/android/app/android_sdk.zip</code></td>
767 </tr>
768 <tr>
769 <td><code>zip.endsWith(&quot;.zip&quot;)</code></td>
770 <td><code>(boolean) true</code></td>
771 </tr>
772 <tr>
773 <td><code>zip.endsWith(&quot;.jar&quot;)</code></td>
774 <td><code>(boolean) false</code></td>
775 </tr>
776</table>
777<p>You can also execute arbitrary code when not debugging by using a scrapbook page.
778 Search the Eclipse documentation for &quot;scrapbook&quot;.</p>
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800779
780
Scott Main9d8dd802009-04-21 19:17:59 -0700781<h3>Running DDMS Manually</h3>
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800782
Scott Main9d8dd802009-04-21 19:17:59 -0700783<p>Although the recommended way to debug is to use the ADT plugin, you can manually run
784DDMS and configure Eclipse to debug on port 8700. (<strong>Note: </strong>Be sure that you
785have first started <a href="{@docRoot}guide/developing/tools/ddms.html">DDMS</a>). </p>
786
787
788<!-- TODO: clean this up and expand it to cover more wizards and features
789<h3>ADT Wizards</h3>
790
791<p>Notice that the "New Android Project" wizard has been expanded to use the multi-platform
792capabilities of the new SDK.</p>
793
794<p>There is now a "New XML File" wizard that lets you create skeleton XML resource
795files for your Android projects. This makes it easier to create a new layout, a new menu, a
796new strings file, etc.</p>
797
798<p>Both wizards are available via <strong>File > New</strong> and new icons in the main
799Eclipse toolbar (located to the left of the Debug and Run icons).
800If you do not see the new icons, you may need to select <strong>Window > Reset
801Perspective</strong> from the Java perspective.</p>
802-->