June 2, 2010 | by Andrew Kameka
Compatibility is a major issue with Android, so Google has made it easier for developers to manage their app’s visibility to incompatible Android devices. In a post on the Google Dev blog, Compatibility Program Manager Dan Morrill points out that Android includes options that allow developers to prevent their apps from being seen by devices unable to use them.
As Google points out, some devices have a tough time displaying live wallpapers accurately, so it makes sense not to display to those users who may have a bad experience because of hardware limitations and rate the app negatively. (This is common for many apps, especially 3D games.)
Android includes an option for developers to list a certain set of features that a device must have in order to be compliant with that app. If a developer wants to include a game that taps into the accelerometer, only devices with an accelerometer present will be able to see it. This is done with the “<uses-feature>” element in the Android manifest, and will go a long way in making the Android Market easier to browse for compatible apps. It won’t be full-proof, but it will give developers more options for making their apps tailor-made for specific devices or device types.
The flipside is that “you’ll make an already fragmented OS even more fragmented” based on comments from one user who didn’t like when I suggested that Google do this three weeks ago. I would argue that the inability of apps to run on all devices already occurs in Android – be it because of legacy devices, OS version, or hardware features necessary for certain apps to function – so it makes sense to be upfront about it and end the charade of listing apps certain devices can’t use.
It’s up to developers to update their manifest, if they want to, for these changes to take place. Read the Android Guide on Compatibility for more information, and then read Dan Morrill’s original post for a longer post on compatibility and fragmentation.
Also of note, Morrill shares Rubin’s reluctance to call Android “fragmented” when he says:
The thing is, nobody ever defined “fragmentation” — or rather, everybody has a different definition. Some people use it to mean too many mobile operating systems; others to refer to optional APIs causing inconsistent platform implementations; still others use it to refer to “locked down” devices, or even to the existence of multiple versions of the software at the same time. I’ve even seen it used to refer to the existence of different UI skins. Most of these definitions don’t even have any impact on whether apps can run!
Because [fragmentation] means everything, it actually means nothing, so the term is useless. Stories on “fragmentation” are dramatic and they drive traffic to pundits’ blogs, but they have little to do with reality. “Fragmentation” is a bogeyman, a red herring, a story you tell to frighten junior developers. Yawn.