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.
