On the heels of my Android Developer Experience article, Google released a major update to its Android mobile operating system in late April 2009. Version 1.5 corrected a number of shortcomings with the initial launch of the OS along with providing some exciting new enhancements.
A number of additions have been included in the 1.5 release to not only bring it to parity with its closest technical competitor, the Apple iPhone, but also to exceed the iPhone's capabilities in key hardware feature sets. Some of the most notable improvements include:
- Onscreen soft-keyboard that rotates in both portrait and landscape mode, just like the iPhone's touch screen keyboard.
- A2DP support for high quality stereo Bluetooth audio reproduction.
- Camcorder application and API for capturing 15 fps videos with the ability to save, email and directly upload to YouTube.
- AppWidgets and its associated API designed to expose and extend dynamic application functionality to the Android desktop.
- Live Folders provide dynamic shortcuts to application data like contact lists, video file inventory, emails, documents and more.
Additionally, there are a number of other improvements peppered throughout the existing API's as well as the SDK and Eclipse plug-ins. For example, the new SDK allows the easy creation of profiled Android devices, running a particular version of the OS (1.0, 1.1 or 1.5) or allowing for the automatic creation of a virtual SD card up to 64 MB in size. Such an operation in earlier SDK's was an error-prone chore but the 1.5 SDK release via the version 0.9.1.v200905011822-1621 Android Development Tools and Editors add-ons transform this into a simple painless dialog box.
Design-time form rendering is also now available While one can still not ‘paint' a form by dragging and dropping controls onto a design surface, the updated Eclipse Android editor plug-ins accurately pre-render the layout XML code. This considerably speeds up development time, though until a robust design-time layout editor is fully baked into the Eclipse plug-ins, an external designer like the free DroidDraw is still quite helpful and sometimes even necessary.
No More Root for You
Android Developer Phone users will have an unfortunate surprise waiting for them after they download the 1.5 radio and system images from HTC. For developers and their unlocked developer phones, Google also chose to bow to the pressures of the mobile telecoms by removing local root access. As such, the section of my original article covering the ability to su to root-level file access no longer applies when running 1.5. The only legitimate way to gain root-level access to the file system in the 1.5 release is to tether the developer phone to a Apple OSX, Linux or Windows desktop running the Android SDK, executing the adb shell command from a terminal window and then su'ing from that connection. While Google claims it removed root access on the phone for security reasons, it seems obvious to me that they did so in response to hacks that were appearing in the Android Marketplace (like the WiFi Tether for Root Users application) that effectively transformed the phone into a WiFi access point. While I can understand the business reasons for Google appeasing the telecomms, this does prevent legitimate uses of root access (i.e., killing hidden and/or unauthorized background application processes). It also backpedals on Google's marketing of Android as a truly open, developer-friendly platform.
If Google wanted to advise secure practices while appeasing the developer community, it could have instead simply added a adb switch (ex: tether the phone to a SDK-enabled PC, open a terminal window and execute something like a adb unlock command) to open the phone's root access back up if the developer required it. Alas, at least for the 1.5 release, the only other way to obtain root access on the phone is to load a recompiled, unsigned and unsupported kernel such as the ‘netfilter-enabled' kernel the developers of the WiFi Tether for Root Users compiled, available Stickcam, Ustream, and others come to mind.