Thoughts on Android and the HTC Dream
I recently signed up as to the Android Market as a developer so I could buy a "Google Dev Phone 1" which is an unlocked HTC Dream/G1. I've been interested in Android as an open-source competitor to the iPhone for a while, and given that the Dream has officially launched in Australia, and Australian developers are now able to submit (free only) apps to the Market, I thought I'd get a device to evaluate and maybe hack some apps on.
I'm quite interested in Palm's Pre OS too so I hope I don't end up with a Pre as well, "just to play with" :\
When the G1 was first announced I was very underwhelmed. It looked decidedly average. I maintained this opinion for a long time until I had a play with one in person a little while back. It's actually not a bad device. It fits comfortably in your hand (at least when held vertically) and though it's a bit bulky the rubberised finish is nice to hold. Specs-wise it has all the nice things — wifi, GPS, compass, QWERTY keyboard and of course a touch screen.
Unfortunately though after actually using one for even a little while it becomes clear that it's definitely a developer phone, a reference implementation. The battery life is fairly poor. The "chin" of the device gets in the way when using the keyboard and makes typing harder than it should be. It's been around a week since I got mine and already I can feel a bit of travel between the front half (the screen) and the rest of the device, which is especially annoying when touching the screen. The clicks and scrapes are not something that I should be hearing from a week-old phone.
Also, I'm not sure about Android's hardware button spec, which requires a "menu" button in addition to call, end, home and back buttons. I still maintain that on-screen soft keys or some other on-screen input would make more sense. Moving from the touch screen to the menu button so frequently doesn't feel right to me. Having said that, I couldn't propose anything resoundingly better off the top of my head, so maybe it's just something that's tough to get right. It's unfortunate though that as long as Google want to maintain backwards-compatibility, they're stuck requiring and supporting these hardware keys. I'd much rather see a move towards an iPhone-like interface where options are presented on-screen as required.
Another hardware niggle is switching from portrait to landscape to enter data — this is my first "side-slide" QWERTY phone so maybe it's a common issue — but it is quite jarring having to flip, open, wait for the UI to catch up, and when done close the keyboard and switch back. The upcoming Android release will introduce a virtual keyboard that negates this issue somewhat, but in the future I'd much rather a candybar form factor (like my SE M600i, which was candybar QWERTY. I'd love to hack that to run Android). Again, this is possibly personal preference, but it does make the experience jarring and interrupts flow.
The dithering on the screen also annoys me, but the screen itself can be seen easily from almost every angle, so maybe that was a fair tradeoff.
It boils down to this: just not as good. You know what I'm talking about. It's like GNOME or KDE versus Windows (let's leave OS X out of this one) — the fonts aren't quite right, things just aren't pixel perfect. That's how Android feels. Screen items feel like they take up more space than they need to (although bizarrely they're harder to press than on an iPhone). Input items like textboxes and checkboxes just lack... something. Certain subtleties are missed. It's not bad, and definitely not anywhere near Windows Mobile, but it does have a lot of catching up to do.
I think what it boils down to is that Android and the iPhone appeal to different markets, satisfy different needs. It's PC vs Mac all over again. Android's aim is to be ubiquitous, lowest-common-denominator stuff. The iPhone OS is designed lovingly, to great detail, for one device only. Observe their differences:
Because Android is in its infancy, it really does just feel like a call-out to geeks at the moment, both in the hardware and the software. The functionality is higher, it does some 'cooler' stuff, but it just doesn't look as pretty. I guess Google figure that the polish can come later, once they've gathered a following of developers and a large enough platform of devices.
However, there are good things. The home screen that in the next release will be able to display widgets (other than the built in clock and Google search) will be more immediately useful than the iPhone home screen, and its shortcuts allows you to separate commonly used apps from the full menu of the rest. It's a shame you can't arrange those menu items, though, because I'd love to be able to order them according to most used/useful rather than alphabetically.
I'm really struggling to think of other nifty UI innovations. Everything here fits into the "almost-iPhone" category, and that's just not worth writing about. Scrolling isn't as fluid either but it's hard to say whether that's software or hardware related.
Programming and cool stuff
Android apps are written in Java and run on Dalvik, a modified J2ME VM. Each app has its own VM which can be paused or pushed onto the history stack. This appeals much more to me, coming from a Java background, than the lower-level syntax-oddities of Objective-C.
The API is reasonably thorough and there seems to be a lot of support, tutorials, and code examples out there which should make the app-writing process easier. Having said that, there a few deficiencies I discovered straight off, like no way to write straight to the audio output buffer, thus limiting you to playing pre-generated sounds. This sort of thing is technically possible, of course, just not part of the API, meaning it should be added in eventually. Still, it shows that there are still rough edges on the whole package.
The cool stuff is really the integration with the OS, things the iPhone can't do yet. Notifications are a nifty example of this. Any app can create a background process and provide notifications of new events — for example, the Twitter client Twitdroid can keep running even after it's been "closed" and notify you when there are new tweets in your timeline. Any app can take advantage of this and it makes things like GPS tracking much more useful — turn on the tracker and then forget about it, go back to doing something else.
The other nifty thing is "intents" — basically certain system activities that other apps can view and act on. Apps can be "intent receivers" and be notified of things like new SMSes, etc. as they occur. Also they can register themselves as handlers of a specific intent. This means if you need to browse your photo gallery from one app (say, adding a pic to a tweet) you can choose from any number of apps that say they support that intent, which once you've picked a photo, then gracefully deliver you back to the main app issuing the request. Things like SMS inbox, email, music, all can be handled by third-party apps as long as they have the appropriate interface for that intent.
That's pretty cool.
Not much to see here. At the moment Australia only supports free apps, so I can't remark on the quality of paid apps, but the free ones I've played with are fairly average, especially games. There are very few games (in fact, only two I can think of) with that high sheen of quality you see on the average iPhone game. I can only assume this will get better over time but at the moment it's almost an embarrassment.
Speaking of no paid app access, it'd be nice if Google just announced paid app support for all countries in which the device has officially launched. Lord knows they're big enough to have the capacity to coordinate it.
Everyone knows it, but it needs to be said again: Android just doesn't come close to the iPhone as an overall experience. Every point I have covered above subtly or not-so-subtly drives this home.
Android has a long, long way to go. Fortunately it seems development of the OS is still going ahead solidly and I imagine most of the deficiencies I've addressed here will be resolved in time. What's really cool to me is Google's goal of making it the de-facto "device" operating system. Android is going to be powering the 17" touch-screen in the new Tesla Model S, and hopefully that's just the beginning — I think Android has a solid foundation that will make it work well as a device OS in all sorts of places. We might be well on the way to a "unified computing experience" across all our computers and devices, rather than the fragmented experience we currently have. And when that happens, people will hopefully be playing my ridiculously addictive Android games anywhere they go, and paying for the privilege ;)