Google today released a lot more details on its Android mobile operating system, including the software development kit. It looks like it would be fun to write apps for Android. The most interesting news is that Android puts a heavy emphasis on component software, encouraging developers to create software modules that can be shared with other developers and reused across applications. It's similar in spirit to what happened with mashups in the web apps world, although the technology involved is quite different.
If the developers follow through, this could make Android a very attractive and flexible development environment.
Google is offering $10 million in prizes to the best Android applications. That's an astonishing amount of money for the mobile apps space, where developers are used to living on stale bread with an occasional beef jerky chaser. For comparison, $10 million is probably more than the total marketing program budget in my last year at PalmSource.
It must be nice to work at a company that has limitless financial resources.
The price also says something about Google's business strategy for Android: Collect a lot of compelling applications that will generate user demand for Android phones. I think they can get the apps, but whether those will generate user demand remains to be seen. Having a big apps base didn't help us as much as you'd expect at PalmSource.
The other interesting news is that this is an entirely Java-based development environment, with a lot of extensions provided by Google for things like multimedia and font management. Although Android is based on Linux, as far as I can tell it's being used strictly as plumbing; the applications can't access it directly (at least not in this version). Data exchange between apps, and application access to phone features, can be locked out by the operator or handset manufacturer.
This should make Android a pretty secure operating system, although it won't be much fun for developers who like to mess around with the low levels of an OS.
Can Android become a standalone runtime? The reliance on Java raises the possibility that the Android applications layer could be ported to other operating systems. I think this would be a pretty cool strategy for Google, as it would enable it to drive the applications experience on a lot of different phones. But it wouldn't be a lightweight layer -- Google has built a huge amount of middleware on top of Linux that would probably have to be ported as well. Unless Google designed the Android apps layer to be portable, something they haven't mentioned, I think the port would be pretty difficult.
Some other tidbits about the OS:
--Features supported in the OS include a built-in browser, 2D and 3D graphics, SQLite database, video and audio playback, GSM, Bluetooth, WiFi, 3G wireless, camera, compass, GPS, and accelerometer (if the appropriate hardware is included in the phone). That's a pretty standard feature list.
--There's also a set of optional APIs that can be excluded by an operator or handset manufacturer. They include mapping APIs and peer to peer messaging between phones. Google positioned the peer messaging as a way to let two users play checkers, but you could also use it to create an instant messaging application that bypasses SMS. I'll be interested to see if any operators allow it on their networks.
--The development environment is a plug-in to Eclipse, another standard approach. The SDK includes an emulator so you can test your apps before the hardware ships. That's essential, since Android phones are about a year away.
--Core apps included with the OS include mail, SMS, calendar, browser, contacts, and maps. The mapping app is the only unusual one.
--There is support for multitasking threads, and an application can run in the background (this should enable things like MP3 playback while you're browsing).
--Each application runs in a separate Linux process. This helps with security. Apps remain running until they're no longer needed and the system decides that it wants their memory. This feature seemed slightly weird. Windows Mobile also tends to leave code running until the space is needed, and that has resulted in performance and stability problems. Presumably Android will handle things better.
The other thing Google warns you about is that if your application doesn't use the proper calls to explain what it's doing, the OS may assume it's not important and shut it off arbitrarily. That can also happen to a properly-written application if the system runs low on memory. This is kind of spooky, and could result in lost user data, especially if the user loads up a lot of applications.
Call me old fashioned, but I prefer applications that quit only when I push the quit button.
--The security model is heavily sandboxed (meaning applications are isolated from each other). To reach outside the sandbox (to exchange data with another app, read the address book, or access the phone's features), applications have to ask permission at the time they are installed. Permissions are based on "trusted authorities and interaction with the user." In other words, an operator or handset vendor can lock them down, and if not then the user will be asked to grant permission. Users will not be asked again when the application is run; if permission was not granted at install, the app will just fail. I believe this is going to be a serious support problem -- it means the same application may work on a phone when it's on one network, but may not work on that same phone on another network. Good luck explaining that to the user.
Google may be counting on user complaints to force the operators to turn on permissions.
--The user interface needs work. Google says it's still working on the final user interface for Android, and that's a good thing. Engadget nicely posted a bunch of screen shots from the current interface today, and they have problems (link).
The first thing that bothers me is the icon carousel at the bottom of the screen.
I think it's a great design, but it's awfully reminiscent of the interface in Yahoo Go. Maybe that's just a coincidence, but Google lately has shown a disturbingly Microsoftian tendency to borrow ideas from others.
The overall interface design is relatively clean, at least compared to the overdesigned clutter that you see on a lot of smartphones. But it's optimized to look pretty on a computer screen rather than be usable on a real-world phone.
The giveaway is contrast. Most computers are used indoors, in a room with moderate lighting. By comparison, mobile phones are used in all sorts of settings, including outdoors in bright sunlight. In those conditions, subtle differences in contrast between text and background can easily be lost. For a good example, check out the screen shot below:
Looks nice on your computer, huh? But let's reduce that screen image to about what it would be on a real phone:
Already the text gets hard to read. Now take your computer outside into the direct sunlight. Go ahead, I'll wait for you to get back...
Done already? What you saw is that the words "Call Back," "Done," and so on pretty much disappeared because they're written in dark gray on a black background. You can find a lot of other examples like this in the Google screen shots.
A recommendation to everyone who creates phone interfaces: White on black. Black on white. Large fonts. It may not be the most beautiful design, but at least people will be able to use it.
What it means to the industry. I continue to think that the ultimate success of Android will depend on the creativity of the devices built on it, and we can't judge that until those devices ship. But in the meantime, I'll be very interested to see what sort of applications appear. Google can definitely excite developers, especially when it shovels money at them. This is an immediate challenge to Microsoft and especially Symbian, which has struggled to get developers to work with its very complex native APIs. The more that Android sucks up developer activity, the harder it will be for other platforms to get developer support. Android is a much cleaner design than older platforms like Symbian, and the component development model might drive the rapid creation of a lot of interesting applications.
Will Android be limited to the mobile space? That's the other key question. There's nothing in the Android development model that limits it to mobile phones, and in fact Google says openly that it's appropriate for use on all sorts of devices. Let's wait a few years for the Android applications base to mature. If it does well, we might eventually see Android devices that seek to directly challenge PCs.
PS: Thanks to Ubiquitous Thoughts for featuring last week's post on the Android announcement in the latest Carnival of the Mobilists.