So here is the issue with Android
fakesteve.net
fakesteve.net
I am actually an android app developer and some of the comments here make me question how many others actually are, versus relying on second-hand bullshit.
While it's slightly harder than developing for a single device, it is quite manageable. Some examples:
- different screen resolutions: this means that you must rely on UI layouts or make your pixels in your graphics code relative. This is an issue the iPhone will have in the future as well, as they WILL eventually upgrade the resolution on that screen.
- different input methods: make sure both gestures/swipes/touches and key presses both map to the correct functions
- missing features: accelerometer, cameara, etc: check and Handle gracefully or refuse to work. iPhone developers have to deal with this as well, except they can only refuse to work (by specifying minimum OS version to install).
Most of the devices I've seen are great by themselves. If I played with one in a store I'd want it. But as a group, when they're what my company has to target for distribution, things could get really ugly.
Practically; I was an early adopter for the HTC Magic. Despite that, all the apps designed for the G1 worked fine. I could even use Emacs in ConnectBot (ssh client) with the soft keyboard. Now that's abstraction!
When it comes to other features of the phone, e.g. camera or accelerometer, like one of the posters said- you'll have to do progressive enhancement. Intelligent web developers already know how to do this. You feature test, then you enable a particular feature. Its not all that difficult.
It works, but it means giving up a lot of control, and the results tend to show it.
It's quite the same for Android. You do the layout in XML, Android scales it and puts it how it fits. This works pretty well.
Second: In general every widget, button, whatever can be access by touch or buttons. There is even an android phone without a touchscreen. This list goes on and on.
One part of why android is a great platform is that it is designed from scratch to be a _modern_ mobile operating system and the developers took care of a lot of cases. Unlike some other operating systems, it's new and especially designed for modern hardware (now, look at windows, symbian, and i am wondering how mac osx would perform on a variety of devices...)
Another example. As a developer you want to have the geographical position of the phone: Easiest way to do is ask for it, regardless of it coming from GPS, WLAN or GSM cell info. But you can also put criteria in the exact same function call if you want exact positioning (say, GPS but von WLAN). Of course, if there is no geo information available the call will tell you this and you have to take care of it. But you'll have to do that anyway, because GPS/WLAN/cell info is not available everytime on a capable device. This goes on and on in the whole framework.
Last but not least: Afaik, neither iphone apps nor windows mobile nor symbian apps will run on a different CPU architecture. Android apps use a VM and can be just run on every architecture the VM runs for. Switch from ARM to x86? No problem, take the same app (not two versions compiled for two different architecures) and they will run just fine.
It's quite shocking that someone writes such a post. It doesn't look like he has even read 1 page of information about android, yet he spreads bullsh. A shame this is posted on YC, too.
You're absolutely correct that it seems like this person hasn't built a single android app.
Nevertheless, i don't want to know how many iPhone lovers will now look down (even more) on Android that, imo, is the best mobile platform out there, from a technical point of view (i'm not talking about ugly underpowered devices or the ugly standard theme, but the architecture). Don't know much about Palm Pre, though.
Second point: Most of the comments in the story now say "yeah, that's what killed Windows Mobile".. Errr, fine. But i am wondering how Nokia became world leading mobile manufacturer with a freaking lot of devices? It sure has nothing to do with screen resolution. It's just sad.. and as always i'm falling for the trolls :(
Desktop applications have shifted to the web. It's only a matter of time before mobile apps are also obsolete.
I'd like to think that users and carriers were smart enough to realize this is bad, but I've seen this before: Android, meet J2ME. You share more in common than you know.
At our company (small mobile software shop) we currently have ant scripts that churn out builds for over 100 devices with at least 10 different screen sizes and many different input methods touch/dpad/trackball. On one binary. These things can be done, it just takes work.
Your in a great position to answer the LCD question then -- I imagine some of the phones you are targeting have features that others don't. And some of those features, in the higher end phones, would be useful in your applications. So, do you just ignore them, or do you spend resources building some features that will only be beneficial to a subset of your users?
Obviously, you should design your application to reach as many people as you can with a core set of functionality. For us, this means passing on possibilities that work only on a small set of devices. (Unless that small pool can generate enormous revenue)
Further, we add nice-to-have features to our core app that can be switched on and off at build or run-time by our QA team depending on the device.
Sorry I can't be more specific. If you're looking for more information feel free to email me. :-)
What I am wondering is -- how does Google, et. al. avoid the "Lowest Common Denominator" problem. Or are they doomed?
(My opinion? doomed as far as apps are concerned)
The alternative of only having one device to rule them all is unrealistic. It's a kind of lowest common denominator approach to matching users to phones (as opposed to matching apps to phones).
And it doesn't solve the different resolution problem....
(Just playing devils advocate here -- your strategy is basically what apple has done w/ iPhone 1, 2, 3--and has been quite successful thus far. But had apple built a dozen phones in that time frame I don't think things would be playing out the same way).
It's too expensive to optimize for every device. It all sounds great until there are multiple extension APIs to access the same thing, all of which are subtlety different and none of which are common across OEMs.
What's even worse is when the API is shared, but each OEM implements it differently. For instance, one OEM's phones regularly return pictures rotated 90 degrees clockwise.
Each problem by itself seems small, but combined they're formidable.
It sucks for users too. They may hear that app X is awesome from a friend, only to find that the same app sucks on their own phone.
Agreed. The "solution" I suggest just allows you to avoid the lowest common denominator - it doesn't make it cheap, or even viable for all devices. But for the most popular devices it should be economical. I guess it depends on how fragmented things get - but I don't think a phone monoculture is any kind of solution, it just shifts the problem.
As much as I hate buzzwords, it really helps to take an MVC approach to mobile development. Different screensizes and input methods just require different views on top of the application logic.