I actually didn't think I'd see the day when I'd find a system that's worse than Symbian. But yesterday the day came: Google released the first SDK and information about Android. And I can say it's horrible.
The whole "open" system is programmable with Java. Well, we do have JavaME etc, so it's not that big of a deal. Especially if you get more functionality out of it. But wait! It's not really Java! It's Java compiled to Java Bytecode compiled to Google's own bytecode. Great.
The classes available, terminology (Intents, whattaheckarethey?) and coding style is extremely perverted and horrible (yes, that's my opinion, but I've heard other people say so too).
You want to make a user interface? Cool. Write an XML resource and use that. Want to get the object that represents a button? Use findViewById(R.id.buttonid). Want to know when the user clicks on the button? Use an instance of the class OnClickListener and implement a method there and then find a way to tell other classes what's happening and...
What about security? Surely Google has seen what Symbian and others have done and made a nice cool security API? In our dreams. The same "on install time show user what the app wants to do, after that don't care about anything." Cool. So if I get to inject code into the system (in which all applications have the same permissions), you can do whatever you want. Cool. Security by... not enforcing any?
And how about sandboxing applications? Well, since it's Linux running under the UI, let's create separate user accounts for each application! This way applications can't share data. But... I'd like to share data between my applications, how do I do that?
All this is the result of ~30 minutes of checking out the samples and documentation on Google's Android site. But that was enough to ensure me that this is going to be such a mess. But since Google has lots of money, they are getting people to develop apps for Android by offering $10 millions in prizes. Why make a cool platform that really works and solves the problems in current ones, let's just hack something together and use the market hype and pocket change to get the ball rolling, right?
Just go ahead, check the NoteEditor sample from the Android site. See how the onCreate method works. getIntent(), get some URIs, get a note by the highly logical mCursor = managedQuery(mURI, PROJECTION, null, null); call etc. Could you understand this without reading lots of docs first? At least with JavaME, Symbian, Win32API etc you can understand most of the things just by the method, function and class names. But what is managedQuery, what is PROJECTION, what URIs are used and why there are nulls everywhere? (Yes, I know. Java+virtual machine+multiple methods with different parameters calling each other == slow, let's not do those).
Argh. That's all I can say.