Why Android Market Has No Games
After a few days of Nexus One ownership I began looking for games, preparing to be hypnotized by games as amazing as the Nexus One itself. After my first search, the list of games I found was the following: Robo Defense Lite (an ok tower defense game), Labyrinth Lite, Poke A Mole, Pinball and BreakTheBlocks Lite. The list of games after the top five were similar and included many more brick breaker, whack-a-mole, snake and pong games.
Underwhelmed hardly describes how I felt.
Being a computer programmer with notable skillz, I thought “I will make an amazing 3d game on Android and show these other Android developers how its done!”. After a weekend of tinkering, researching and compiling code, I can with 100% certainty say the reason why there are so few good games for Android is because it is nearly impossible to program good games without losing your sanity. I felt like the Charles Bukowski of computer programming by the time I was done.
While Iphone, webOS and windows mobile all have openGL ES 2.0 available, Android is stuck with openGL ES 1.0. The recommended way to write a string onto a 3d object is to make the text you want to draw a texture. So “game over” could be one texture and “press start to continue” would be another. But to display something that changes, like your score, onto the side of a rotating cube you need to write your own text renderer (ugh).
Android exposes OpenGL ES 2.0 which makes drawing text easier, but you need the NDK (Native Development Kit) to do that. Working with the NDK reminded me of working with Symbian v3 five years ago; lots of config files and directory structuring, like it was designed by engineers who spend far too much time in a terminal and think GUI’s are “nice to have”. Because I was running Windows, I needed to install Cygwin to build the native libraries.
After an hour or so setting up the NDK and prepping and catching up on this Java JNI business, I was ready to run the openGL ES 2.0 demo that came with the NDK on the emulator. But for some reason, I kept getting an error that simply said “The application xyz has stopped unexpectedly. Please try again”. After the relatively tedious process of setting up the NDK and running the sample app and getting vague errors, I retraced my steps. I thought I screwed up my NDK during install or I somehow screwed up the sample’s build process. I spent hours trying to resolve this only to find on a forum that the emulator doesn’t do openGL ES 2.0. I had to test the app on my Nexus. No debugging and a longer than necessary process getting my .apk onto my phone (not to mention the number of times I would crash the phone testing my .apk).
That was bad enough, but the kicker was that after hours of hair pulling frustration, the sample app only showed a static 2d green triangle and a background that went from black to white. A 2d sample to demonstrate openGL ES 2.0, the defacto mobile 3d library. It would be nice to have a few Nehe demos included instead (though props to INsanityDesign for putting some together for openGL ES 1.0)
Am I going to be developing an amazing 3d game that is going to make people feel like they were punched in the face because it’s so amazing? Not on Android anytime soon.








Thanks for the props. I am currently preparing the first OpenGL ES 2.0 based on Android NDK but through JNI (to stay true to my Java roots). It will probably be one NeHe and on other for the moment. Unfortunately, because of some greater changes this year I didn’t have much time to do anything, but I hope I finish both simultaneously in two weeks latest.
Greets
Sweet! I look forward to going through them!
awesome writeup. this article needs more visibility to get someone to kick andy rubin the balls for another fuckup.
1. trackball colors
2. trackball blink frequency
3. fucked up battery life
4. fucked up contact management on gmail android
5. no desktop sync
6. fucked up calendar invite handling (does not even open .ics at all)
7. b/g/n screw-up after 2 months of dogfooding
8. no sd card installation (just 191mb internal storage – this is 2010 y’all!)
9. no front camera but was planned for europe release
10. for coming up with something as stupid as ’super phone’ during lunch – an act which is usually reserved for bill gates.
11. no gif animation in browser
12. can’t playback videos from picasaweb
seriously wtf? one day with the pre-release nexus should have made these obvious.
Seriously. Android dogs on the iOS platform and Apple for it’s closed ecosystem, bit Androids market sucks. For something so open and having a higher market share than Apple, you’d think developers would flock by the dozens!
The cold truth is, Android is so fragmented and for developers, it’s hard to even get the simplest task done.
Well, I don’t really know a good deal about that, though it reminds me of a tale my employer at Intel once told us: supposedly, this 13th century German alchemist attempted (in vain) to produce precious metal out of lead. He analyzed those resources so attentively, he grew to become an expert on both, and became wealthy as an official advisor to the king. Data was tricky to find in the past, as opposed to today with computer handiness, and committed drivers and so on. back then, if you revealed something good, you could keep counseling for life. Yet I digress. What I’m saying is that on occasion you stumble upon riches by simply trying out (as well as staying focused on) something different, and this is exactly what happened to me when I unintentionally got here. I was in fact hunting for some technological records on driver updates when I began scouring the web, and got carried away….
“lots of config files and directory structuring, like it was designed by engineers who spend far too much time in a terminal and think GUI’s are “nice to have”.”
i am a command line dweeb, but i think there is a difference between ‘command line’ and ‘crappy design’. a good command line tool, like cmake, makes things easier, and it makes GUIs easier to program to wrap around it.
i am traumatized by the 27 level ‘Eclipse installation instructions’ for android, telling me to click on a bunch of menus that dont exist because i have version 2.4.1.3.2 instead of version 2.4.4.52.3.