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