| Subject: How to build use a Cupcake Android SDK & ADT Eclipse plugin. | 
 | Date:    2009/03/27 | 
 |  | 
 |  | 
 | Table of content: | 
 |   0- License | 
 |   1- Foreword | 
 |   2- Installation steps | 
 |   3- For Eclipse users | 
 |   4- For Ant users | 
 |   5- Targets, AVDs, Emulator changes | 
 |   6- Conclusion | 
 |  | 
 |  | 
 |  | 
 | ---------- | 
 | 0- License | 
 | ---------- | 
 |  | 
 |  Copyright (C) 2009 The Android Open Source Project | 
 |  | 
 |  Licensed under the Apache License, Version 2.0 (the "License"); | 
 |  you may not use this file except in compliance with the License. | 
 |  You may obtain a copy of the License at | 
 |  | 
 |       http://www.apache.org/licenses/LICENSE-2.0 | 
 |  | 
 |  Unless required by applicable law or agreed to in writing, software | 
 |  distributed under the License is distributed on an "AS IS" BASIS, | 
 |  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
 |  See the License for the specific language governing permissions and | 
 |  limitations under the License. | 
 |  | 
 |  | 
 |  | 
 | ----------- | 
 | 1- Foreword | 
 | ----------- | 
 |  | 
 | This explains how to use the "new" SDK provided starting with cupcake. | 
 | The new SDK has as a different structure than the pre-cupcake ones. | 
 |  | 
 | This means: | 
 | - The new SDK does not work with older Eclipse plugins (ADT 0.8) | 
 | - The old SDKs (1.0 and 1.1) do NOT work with this Eclipse plugin (ADT 0.9) | 
 |  | 
 |  | 
 |  | 
 | ---------------------- | 
 | 2- Installation steps | 
 | ---------------------- | 
 |  | 
 | First you will need to grab the zip of the SDK for your platform or build it | 
 | yourself. Please refer to the accompanying document "howto_build_SDK.txt" if | 
 | needed. | 
 |  | 
 | Unzip the SDK somewhere. We'll call that directory "SDK" in command-line | 
 | examples. | 
 |  | 
 | Grab the new ADT Eclipse plugin zip file or build it yourself. Keep it | 
 | somewhere (no need to unzip). | 
 |  | 
 |  | 
 |  | 
 | -------------------- | 
 | 3- For Eclipse users | 
 | -------------------- | 
 |  | 
 |  | 
 | Below we'll explain how you can upgrade your Eclipse install to the new plugin. | 
 | If you already have a working Eclipse installation with a pre-0.9 ADT, | 
 | another suggestion is to simply install a new copy of Eclipse and create a | 
 | new empty workspace. This is just a precaution. The update process should | 
 | be otherwise harmless. | 
 |  | 
 |  | 
 |  | 
 | A- Setting up Eclipse | 
 | --------------------- | 
 |  | 
 | - You must have Eclipse 3.3 or 3.4. Eclipse 3.2 is not longer supported. | 
 |  | 
 |   There are many flavors, or "editions", of Eclipse. To develop, we'd recommend | 
 |   the "Java" edition. The "RCP" one is totally suitable too. The J2EE one is | 
 |   probably overkill. | 
 |  | 
 |  | 
 | - If updating an existing Eclipse, use Help > Software Update and please | 
 |   uninstall the two features of the previous ADT: the "editors" feature and the | 
 |   ADT feature itself. | 
 |  | 
 |   => If you don't you will get a conflict on editors when installing | 
 |      the new one. | 
 |  | 
 | - Using Help > Software Update, add a new "archived site", point it to the new | 
 |   adt.zip (e.g. android-eclipse-<some-id>.zip), select the "Install" button at | 
 |   the top right and restart eclipse as needed. | 
 |  | 
 | - After it restarts, please use Window > Preferences > Android and select | 
 |   the new SDK folder that you unzipped in paragraph 2. | 
 |  | 
 |  | 
 |  | 
 | B- Updating older projects | 
 | -------------------------- | 
 |  | 
 | If you have pre-0.9 projects in your Eclipse workspace, or if you import them | 
 | from your code repository, these projects will fail to build at first. | 
 |  | 
 | First right-click on the project and select "Properties": | 
 |  | 
 | - In the properties, open the Android panel and select the platform to use. | 
 |   The SDK comes with a 1.5 platform. Select it and close the properties panel. | 
 | - Do a clean build. | 
 |  | 
 |  | 
 | The new plugin creates a "gen" folder in your project where it puts the R.java | 
 | and all automatically generated AIDL java files. If you get an error such as: | 
 |  | 
 |   "The type R is already defined" | 
 |  | 
 | that means you must check to see if your old R.java or your old auto-generated | 
 | AIDL Java files are still present in the "src" folder. If yes, remove them. | 
 |  | 
 | Note: this does not apply to your own hand-crafted parcelable AIDL java files. | 
 |  | 
 | Note: if you want to reuse the project with an older Eclipse ADT install, | 
 |       simply remove the "gen" folder from the build path of the project. | 
 |  | 
 |  | 
 | C- New Wizards | 
 | -------------- | 
 |  | 
 | The "New Android Project" wizard has been expanded to use the multi-platform | 
 | capabilities of the new SDK. | 
 |  | 
 | 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 strings file, etc. | 
 |  | 
 | Both wizard are available via File > New... as well as new icons in the main | 
 | icon bar. If you do not see the new icons, you may need to use Window > Reset | 
 | Perspective on your Java perspective. | 
 |  | 
 |  | 
 | Please see step 5 "Emulator changes" below for important details on how to run | 
 | the emulator. | 
 |  | 
 |  | 
 |  | 
 | ---------------- | 
 | 4- For Ant users | 
 | ---------------- | 
 |  | 
 |  | 
 | A- build.xml has changed | 
 | ------------------------ | 
 |  | 
 | You must re-create your build.xml file. | 
 |  | 
 | First if you had customized your build.xml, make a copy of it: | 
 |  | 
 |   $ cd my-project | 
 |   $ cp build.xml build.xml.old | 
 |  | 
 |  | 
 | Then use the new "android" tool to create a new build.xml: | 
 |  | 
 |   $ SDK/tools/android update project --path /path/to/my-project | 
 |  | 
 | or | 
 |  | 
 |   $ cd my-project | 
 |   $ SDK/tools/android update project --path . | 
 |  | 
 |  | 
 | A "gen" folder will be created the first time you build and your R.java and | 
 | your AIDL Java files will be generated in this "gen" folder. You MUST remove | 
 | the old R.java and old auto-generated AIDL java files manually. (Note: this | 
 | does not apply to your own hand-crafted parcelabe AIDL java files.) | 
 |  | 
 |  | 
 | B- Where is activitycreator? | 
 | ---------------------------- | 
 |  | 
 | Note that the "activitycreator" tool has been replaced by the new "android" | 
 | tool too. Example of how to create a new Ant project: | 
 |  | 
 |   $ SDK/tools/android create project --path /path/to/my/project --name ProjectName | 
 |       --package com.mycompany.myapp --activity MyActivityClass | 
 |       --target 1 --mode activity | 
 |  | 
 |  | 
 | Please see paragraph 5 below for important details on how to run the emulator | 
 | and the meaning of that "--target 1" parameter. | 
 |  | 
 |  | 
 |  | 
 | ---------------------------------- | 
 | 5- Targets, AVDs, Emulator changes | 
 | ---------------------------------- | 
 |  | 
 | This applies to BOTH Eclipse and Ant users. | 
 |  | 
 | One major change with the emulator is that now you must pre-create an "Android | 
 | Virtual Device" (a.k.a "AVD") before you run the emulator. | 
 |  | 
 |  | 
 |  | 
 | A- What is an AVD and why do I need one? | 
 | ---------------------------------------- | 
 |  | 
 | What is an "AVD"? If you forget, just run: | 
 |  | 
 |   $ SDK/tools/emulator -help-virtual-device | 
 |  | 
 |   An Android Virtual Device (AVD) models a single virtual device running the | 
 |   Android platform that has, at least, its own kernel, system image and data | 
 |   partition. | 
 |  | 
 | There is a lot more explanation given by the emulator. Please run the help | 
 | command given above to read the rest. | 
 |  | 
 | The bottom line is that you can create many emulator configurations, or "AVDs", | 
 | each with their own system image and most important each with their own user | 
 | data and SD card data. Then you tell Eclipse or the emulator which one to use | 
 | to debug or run your applications. | 
 |  | 
 |  | 
 | Note for Eclipse users: eventually there will be a user interface to do all of | 
 | these operations. For right now, please use the command line interface. | 
 |  | 
 |  | 
 | B- Listing targets and AVDs | 
 | --------------------------- | 
 |  | 
 | There is a new tool called "android" in the SDK that lets you know which | 
 | "target" and AVDs you can use. | 
 |  | 
 | A target is a specific version of Android that you can use. By default the SDK | 
 | comes with an "Android 1.5" target, codenamed "cupcake". In the future there | 
 | will be more versions of Android to use, e.g. "Android 2.0" or specific add-ons | 
 | provided by hardware manufacturers. When you want to run an emulator, you need | 
 | to specify a given flavor of Android: this is the "target". | 
 |  | 
 |  | 
 | To learn about available targets in your SDK, use this command: | 
 |  | 
 |   $ SDK/tools/android list targets | 
 |  | 
 | This will give you an output such as: | 
 |  | 
 |   Available Android targets: | 
 |   [1] Android 1.5 | 
 |        API level: 3 | 
 |        Skins: HVGA (default), HVGA-L, HVGA-P, QVGA-L, QVGA-P | 
 |  | 
 | Note the "[1]". Later you will need to reference this as "--target 1" on the | 
 | command line. | 
 |  | 
 |  | 
 | Similarly you can list the available AVDs: | 
 |  | 
 |   $ SDK/tools/android list avds | 
 |  | 
 | Which might output something as: | 
 |  | 
 |   Available Android Virtual Devices: | 
 |       Name: my_avd | 
 |       Path: C:\Users\<username>\.android\avd\my_avd.avd | 
 |     Target: Android 1.5 (API level 3) | 
 |       Skin: 320x480 | 
 |     Sdcard: 16M | 
 |  | 
 |  | 
 |  | 
 | C- Creating an AVD | 
 | ------------------ | 
 |  | 
 | To create a configuration: | 
 |  | 
 |   $ SDK/tools/android create avd --name my_avd_name --target 1 | 
 |  | 
 |  | 
 | where "target 1" is the index of a target listed by "android list targets". | 
 |  | 
 | The AVD name is purely an identifier used to refer to the AVD later. | 
 | Since it is used as directory name, please avoid using shell or path specific | 
 | characters. | 
 |  | 
 | To learn the various options available when creating an AVD, simply type: | 
 |  | 
 |   $ SDK/tools/android create avd | 
 |  | 
 | The android tool will automatically print an explanation of required arguments. | 
 |  | 
 |  | 
 |  | 
 | D- Invoking an AVD from the command-line | 
 | ---------------------------------------- | 
 |  | 
 | To use this AVD in the emulator from the command-line, type: | 
 |  | 
 |   $ SDK/tools/emulator @my_avd_name | 
 |  | 
 |  | 
 | For more options, please consult the emulator help: | 
 |  | 
 |   $ SDK/tools/emulator -help-virtual-device | 
 |  | 
 |  | 
 |  | 
 | E- Invoking an AVD from Eclipse | 
 | ------------------------------- | 
 |  | 
 | By default Android projects in Eclipse have an "automatic target" mode. | 
 | In this mode, when a project is deployed in debug or run, it checks: | 
 | - If there's one running device or emulator, this is used for deployment. | 
 | - If there's more than one running device or emulator, a "device chooser" is | 
 |   shown to let the user select which one to use. | 
 | - If there are no running devices or emulators, ADT looks at available AVDs. | 
 |   If one matches the project configuration (e.g. same API level), it is | 
 |   automatically used. | 
 |  | 
 | Alternatively you can edit the "launch configuration" on your Android project | 
 | in Eclipse by selecting the menu Run > Run Configurations. In the "target" tab | 
 | of the configuration, you can choose: | 
 |  | 
 | - Manual or automatic targetting mode. | 
 |  | 
 |   - Manual means to always present the device chooser. | 
 |   - Automatic is the behavior explained above. | 
 |  | 
 | - In automatic mode, which AVD is preferred. If none is selected, the first | 
 |   suitable is used. | 
 |  | 
 |  | 
 | F- AVD concurrency | 
 | ------------------ | 
 |  | 
 | You can no longer run several emulators at the same time on the same | 
 | configuration. | 
 |  | 
 | Before this used to put the second or more emulators in a transient read-only | 
 | mode that would not save user data. | 
 |  | 
 | Now you just need to create as many AVDs as you want to run emulators. | 
 |  | 
 | For example if you are working on a client/server application for Android, you | 
 | could create a "client" AVD and a "server" AVD then run them both at once. The | 
 | emulator window will show you the AVD name so that you know which one is which. | 
 |  | 
 | Example: | 
 |  | 
 |   $ SDK/tools/android create avd --name client --target 1 --sdcard 16M --skin HVGA | 
 |   $ SDK/tools/android create avd --name server --target 1 --sdcard 32M --skin HVGA-P | 
 |   $ SDK/tools/emulator @server & | 
 |   $ SDK/tools/emulator @client & | 
 |  | 
 |  | 
 |  | 
 | ------------- | 
 | 6- Conclusion | 
 | ------------- | 
 |  | 
 | This completes the howto guide on how to use the new Cupcake SDK. | 
 | Feedback is welcome on the public Android Open Source forums: | 
 |   http://source.android.com/discuss | 
 |  | 
 | -end- | 
 |  |