If you've written an application with earlier versions of the SDK, you're going to be in for some conversion pain. It may take a few minutes to a few hours, depending on how large the project is. Luckily, Google has provided a nice document on how to migrate your code from M3 to M5, in addition to directions on installing and updating the SDK and Eclipse plug-in. (And before you ask, I don't know what happened to M4).
I really don't understand why Garett Rogers considers the Android documentation to be "sub-par". After spending countless hours pouring over it in preparation for writing an Android book, I have to say I'm more than a little impressed. There are hundreds of pages of detailed information there. For example, take a look at the Javadoc for the Activity class. Have you ever seen documentation like that in any project, let alone one that is free?
Google was kind enough to run the JDiff utility over Android M5, comparing it to the M3 version. JDiff creates a lengthy report showing what packages and classes were added, removed, or modified. According to the API diff report, the overall difference between the two versions is approximately 31%. There were nearly 4,000 changes in all. That's very high; probably the highest we'll ever see for an Android update. If you ask me, I think they waited a bit too long before refreshing M3. Hopefully smaller, incremental changes will be the norm from now on.
Many of the diffs can be traced back to renaming a couple of classes that were used all over the place. ContextURL was renamed to Uri, and Paint was replaced in the text packages with the TextPaint subclass. Some interfaces were changed to abstract classes, and a lot of things were made final.
Aside from those trivial changes, here are some of the more substantial differences I found interesting:
There are a few tantalizing glimpses of other functionality, such as documentation (but no code yet) of an AWT package that should make porting Java SE programs easier, and a mention of "velocity tracking" and "flinging" (think: put your finger on a globe and set it spinning at different speeds). But my favorite addition to M5 has to be a function called "getDataFilePath()". The documentation says:
DO NOT USE THIS FUNCTION!! Someone added this, and they shouldn't have. You do not have direct access to files inside of a content provider. Don't touch this. Go away.
Ha! M5 is still a ways off from version 1.0 so I'm sure there will be lots of surprises in future releases for us to play with. Remember, be sure to file any bugs you find in the new issue tracking system. If you don't report 'em, they won't get fixed.