0.9.4:
- New "Create project from sample" choice in the New Project Wizard.

0.9.3:
- New wizard to create Android JUnit Test Projects.
- New AVD wizard.
- SDK Updater
- zipalign support

0.9.1:
- Added an AVD creation wizard to ADT. It is automatically displayed during a launch if no compatible AVDs are found.
- Fixed issue with libs/ folder where files with no extension would prevent the build from finishing.
- Improved error handling during the final steps of the build to mark the project if an unexpected error prevent the build from finishing.
- Fixed issue when launching ADT on a clean install would trigger org.eclipse.swt.SWTError: Not implemented [multiple displays].


0.9.0:
- Projects now store generated Java files (R.java/Manifest.java and output from aidl) in a 'gen' source folder.
- Support for the new Android SDK with support for multiple versions of the Android platform and for vendor supplied add-ons.
    * New Project Wizard lets you choose which platform/add-on to target.
    * Project properties (right click project in Package Explorer, then "Properties"), lets you edit project target.
    * New Launch configuration option to choose debug deployment target.
- Ability to export multiple apk from one project, using resource filters. See the 'android' property for Android projects.
- Support for running JUnit tests on a device/emulator from a new "Android JUnit tests" launch configuration.

0.8.1:

- Alternate Layout wizard. In the layout editor, the "create" button is now enabled to easily create alternate versions of the current layout.
- Fixed issue with custom themes/styles in the layout editor.
- Export Wizard: To export an application for release, and sign it with a non debug key. Accessible from the export menu, from the Android Tools contextual menu, or from the overview page of the manifest editor.
- New XML File Wizard: To easily create new XML resources file in the /res directory.
- New checks on launch when attempting to debug on a device.
- Basic support for drag'n'drop in Graphical layout editor. You can add new items by drag'n'drop from the palette. There is no support for moving/resizing yet.
- Undo/redo support in all XML form editors and Graphical layout editor.

0.8.0:

- Fixed issue with using custom classes implementing Parcelable in aidl files. Right click the project and choose Android Tools > Create aidl preprocess file for Parcelable Classes.
- Added Custom Themes to theme drop down in the layout editor.
- Customizable debug signing keystore path in preferences
- Customizable HOME package name.

0.7.1:

- Layout Editor.

0.6.1:

- Fixed install issue when project name contains spaces (requires new emulator image)
- Fixed setup of the New class wizard in the manifest (when clicking on "name" for a class attribute) in the cases where the class and some of its parent packages were missing.
- Properly kill the application that is about to be reinstalled.
- Create missing android folder automatically when building application (caused a signing error)
- Manifest editor: support for uses-library node
- Fixed NPE in editors.xml.descriptors.XmlDescriptors.createPreference
- Fixed assert in MultiEditorPart.setActivePage
- Fixed "connect to debugger" button in DeviceView. Also fixed support for custom process names.

0.6.0:

- new launch option for activity. Can choose to launch default activity (finds an activity configured to show up in the home screen), or specific activity, or none.
- normal java resources (non java files placed in package folders) are now properly packaged in the final package, and can be accessed through normal java API such as ClassLoader.getResourceAsStream()
- launch configuration now has an option to wipe emulator data on launch. This always asks for confirmation.
- launch configuration now has an option to disable the boot animation. This will let the emulator start faster on older computers.
- Applications are now signed with a debug key (stored in debug.keystore in ~/.android).
- Installation of application is now more robust and will notify of installation failure. Also installation is blocking, removing issues where ADT tried to launch the activity before the app was installed.
- Tree-based resource editor + content assist in XML editor for layout, menu, preferences, values xml files. Work in progress...


0.4.0 (adt 0.4.0, ddms 0.3.0, editors 0.2.0, common 0.1.0)

- New AndroidManifest editor.
- True multiple device support allowing debugging apps on several device at the same time
- New launch modes for device selection: automatic will launch an emulator if no device are present, automatically target the device if only one exists, and prompt the user if 2+ are connected. Manual mode always prompt the user.
- New classpath container remove the dependencies on the location of android.jar making it easier to share a project through dsvn, cvs, etc... You should fix your project (right click project, choose Android > Fix Project properties)
- Fixed a case where pm would fail and would up end outputting the "usage" text, which would in turn confuse the plugin during parsing.
- Fixed an issue with compiling aidl file when they import project local files.

0.3.4 (adt 0.3.4, ddms 0.2.3, editors 0.1.0)

Internal release only.
- Enabled device support.

0.3.3 (adt 0.3.3, ddms 0.2.3, editors 0.1.0)

- Support for referenced projects.
- During launch, display if a package conflict occurs when the new application is pushed onto the device.
- You can now change the font of the logcat view. Also indentation is now properly displayed.
- Plugin generated files are now properly marked as derived. This will make Team plugins ignore them.

0.3.2

- XML Highlighting for AndroidManifest.xml (requires WebTools WST plugin)
- Custom java editor for R.java/Manifest.java to make those files non editable. This is to replace the current locking mechanism which causes issues on Mac OS.
- Fixed some issue in the "Restart adb" feature in the device view of ddms.
- Better handling of aidl files and the java files generated from them.
- Plugin now retries to launch the app on the emulator if it fails due to timing issues.
- Skin dropdown in the Emulator/Target tabs is now build from the content of the skin directory, to support developer made skins.
- Emulator control panel. This is a UI on top of the emulator console. it allows you to change the state of the network and gsm connection, and to initiate incoming voice call.

0.3.1

- Fixed issue on winXP/Eclipse 3.2 where errors in the New Project Wizard would not display.
- Added missing intent definition in the AndroidManifest.xml file created by the New Project Wizard.
- Fixed possible NPE in the debug action from the Process View
- Support for Eclipse 3.4

0.2.6 / 0.3.0

- New Project Wizard now makes it easy to open Android sample code
- Plugin will output a warning if the build id of the device/emulator does not match the sdk build id.
- Java/Debug/ddms perspective now contains direct menus to open some of the ddms views, and to create a new android project. This will require you to reset your perspectives.
- Error during builds now put an error marker on the project instead of displaying an (annoying) dialog box.
- Custom builders now remember their build state when restarting eclipse.
- Properly parse some aapt warnings and don't abort the build when they happen.
- Abort launch and prompt the user if the project contains errors.
- New silent/normal/verbose build output.

0.2.5

- Check compiler compliance level before compilation and abort if different from 1.5
- Fix Project Properties will fix the project compiler compliance if needed.
- Fixed an issue with multiple source folders.
- Added support for new Manifest.java class (it is automatically generated with R.java if the content of the AndroidManifest.xml requires it)
- Fixed an issue that could result in not packaging code changes.
- Automatic fix of the Launch Configurations when the java package in the manifest is changed. Also improved Launch Config dialog and error alert for erroneous activity names in the Launch Configuration.
- Support for external jars that are not under the project root directory.
- New projects have a default layout.
- Misc fixes for Windows support.

0.2.4

- fixed large resource corruption issue.

0.2.3

- fixed issue related to the integration of dx.
- fixed issue related to the package generation that was modified for windows support. 

0.2.2

- Changing the SDK location in the Preferences does not require to restart Eclipse anymore.
- New SDK-Project sync mode in Android preference pane. Default value set to true. If true, all android projects are automatically sync'ed to the SDK defined in the preferences.
- Cases where no emulator is running but a dialog still says "An emulator is running..." should be less frequent.
- Projects do not reference the standard desktop JRE anymore, as android.zip contains the core java library. This will solve the case where using a core class non present on the platform would not generate a compilation error.
- Changing the package defined in the manifest now deletes the R.java class from its previous location. This will require 1 build after upgrading the plugin, before it works.
- Project selection in the Launch Config Dialog now only shows Android projects.
- Launching a debug/run session now checks that the project uses the SDK set in the preferences (This is for the non automatic sync mode).
- Removed obsolete wallpaper mode in the New Project Creation Wizard.
- dx (dalvik code conversion tool) now embedded instead of calling the external version.
- improvements in the parsing of the aapt errors.
- some fixes for windows support.

0.2.1

- fixed bug in logcat search where invalid regexp would cause a crash
- minor improvements to the build/launch process.

0.2.0

- Logcat view.
- File Explorer view.
- Custom options for emulator. In the Launch configuration dialog you can specify custom command line emulator options. See "emulator -help" for available options.
- Android Tools > Export Application Package is now implemented.
- Misc incremental builder fixes.
- Including static .jar files as library in your project will automatically include them in the final APK. Warning: only the .class content is included.

0.1.10

- res and assets folders now fully refresh before the build, ensuring R.java and packaged resources are always up to date. This can be disabled in the preferences under "Android" if this becomes slow due to too many files.

0.1.9

- New Action in the "Processes" view to debug an application that is already running. The source project for this application MUST be opened in the current workspace.
- Building the project now force refreshes the res folder. This should help rebuilding the resources when only binary files were changed from outside eclipse.
- Clean/full builds now compile all aidl files found in the build path (previously only incremental builds would compile them). Also, misc improvements to the incremental builders.
- Starting a run/debug session now asks to save the files and forces a new build to ensure that the latest package is pushed on the device.
- Plugin should be less aggressive when waiting for the emulator to be ready. This should translate in fewer failed launches.

0.1.8

- Fixed Debugger issue introduced in 0.1.6
- Added Log level preferences for DDMS. Look under Android > DDMS > Advanced. Default error level is Error.

0.1.7

- Fixed issue where java warnings wouldn't trigger a new package. Now only errors stop the packaging like it should be.
- Added more error output in the console during launch.

0.1.6

- New "Android" Console. It receives the error output from external tools such and aidl, dx, and aapt (only when they can't be parsed). Any error force the console to be displayed.
- The Activity Manager on the device/emulator now outputs some messages in the "Android" console when asked to start an activity. This should help you figure out what is wrong if the application doesn't start.
- Fixed a case where the .apk file would be updated with broken code. Now if there are java compile error, the .apk is not touched.
- Added support for manifest with non fully qualified activity java name, yet not starting with a dot.
- Fixed creation of manifest files (through New Project wizard) to use proper namespace for attributes.
- Better error reporting for namespace issue in the manifest.
- "Reset Adb" action from the device view. Use this is the plugin tells you  an emulator is running when there are none.
- New "ddms" Console which receives the standard output of ddms.

0.1.5

- Support for new activity declaration inside AndroidManifest.xml
- fixed issue that prevented bin/ to be removed from the buildpath when converting project.

0.1.4

- Changes in the Manifest, now properly trigger a new package of the resources.

0.1.3

- Fixed the "fix project properties" action to remove old framework libraries, just not add new ones.

0.1.2

- aidl builder. The Android Resources PreBuilder now also converts aidl files into java files.
- New Project wizard now allows to make Wallpaper activities instead of gadgets (which are obsolete.)
- Launch shortcuts. Right click in the package explorer allow you to launch the application in debug or run mode directly without creating launch configurations.
- New project wizard and Project conversion now sets up the java doc path for android.zip
- Package builder now supports custom application assets placed in assets/ (which is now created automatically by the New Project Wizard).
- New action: Android Tools > Fix Project Properties, in the package explorer contextual menu. This allows you to fix the framework path (and its javadoc path) in case you change the sdk location.

0.1.1

- Fixed project convertor to add the framework library if missing.

0.1.0

- New project wizard.
- Python script-generated project convertor.
- Incremental builders.
- XML validation for resource files.
- Android Launch Configuration.
