If you're serious about developing Android apps, there's only one platform to build and test them on, and that's the Samsung Nexus S. Why? Because first and foremost, the Nexus S runs pure Android. Not only is Samsung's Nexus S, released in December, one of the most beautiful phones on the market, and the only one with a curved glass screen, it also contains no add-ons, overlays or UI enhancements of any kind.
Yes, the Nexus S is all Android. There are no carrier-specific or Samsung-specific apps, drivers or features. That means that if your app runs here, it's reasonable to expect that it will run on other devices, as long as those devices don't require any hardware-specific trickery or have body parts surgically grafted on (Sony Xperia Super Bowl ad).
And in the world of mobile-device app building, that is huge. Because the alternative is to build and test on all the specific platforms and devices that you intend to target. Do you have that kind of time? And while targeting Apple devices also gives you the benefit if homogeneity, I hear that Apple's AppStore restrictions are a bit more stringent than Google's for the Android Market.
The Nexus S also is the first phone to ship with Android 2.3, also known as Gingerbread, and both the phone and the OS (of course) were developed with help from Google. I've been using a Nexus S phone since early January and have found Android 2.3 to be a huge improvement from the version 1.6 that was running my previous phone, HTC.
The Nexus S is built around Samsung's 1GHz Hummingbird (with ARM Cortex core) processor, 512MB system memory and 16GB user memory. Communications capabilities include 2.5G, 3G (HSDPA 7.2 Mb/s HSUPA 5.76 Mb/s), WiFi 802.11 b/g/n, Bluetooth 2.1 +EDR, Near Field Communications, A-GPS, and USB 2.0. Its supports MP3, AAC, AAC+, eAAC+, AMR and AMR-NB audio decoding.
Capable yes, but not particularly unusual. What makes the Android stand out is its development model for Java, which is the language for all user (non-system) apps. According to android.developer.com:
Every Android application runs in its own process, with its own instance of the Dalvik virtual machine. Dalvik has been written so that a device can run multiple VMs efficiently. The Dalvik VM executes files in the Dalvik Executable (.dex) format which is optimized for minimal memory footprint. The VM is register-based, and runs classes compiled by a Java language compiler that have been transformed into the .dex format by the included "dx" tool.
Further setting Android apart is the way it separates Java apps into their functional elements so that other apps (with permission) can make use of them. Again quoting android.developer.com:
A central feature of Android is that one application can make use of elements of other applications (provided those applications permit it). For example, if your application needs to display a scrolling list of images and another application has developed a suitable scroller and made it available to others, you can call upon that scroller to do the work, rather than develop your own. Your application doesn't incorporate the code of the other application or link to it. Rather, it simply starts up that piece of the other application when the need arises.
For this to work, the system must be able to start an application process when any part of it is needed, and instantiate the Java objects for that part. Therefore, unlike applications on most other systems, Android applications don't have a single entry point for everything in the application (no main() function, for example). Rather, they have essential components that the system can instantiate and run as needed.
For developers seeking a platform that's pure and free of carrier-built functions, the Nexus S is the ideal choice, but it'll cost ya. Without a contract, the Samsung Nexus S sells for around $529 at Best Buy, and is available for AT&T and T-Mobile networks.