Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I've spent the past few years working on iOS apps, and I'm now giving some serious consideration to creating an Android port of one of my apps.

I'm sure that complaints about fragmentation are a frustrating cliche to experienced Android programmers, but as an iOS programmer, I'm quite honestly overwhelmed by the number of configurations and devices that my app might end up running on.

There are literally thousands of Android devices in the wild, but I know there are successful Android developers in the world and I know they're not testing or developing for thousands of different devices.

So how can a relatively small company deal with fragmentation? Is it possible to pick the five or six most popular devices, focus on those and prevent the app from being installed on any other devices? Are there any other strategies for practically dealing with the number of different configurations an app will face?

share|improve this question

closed as too broad by MichaelT, durron597, gnat, GlenH7, Snowman Nov 5 '15 at 21:44

There are either too many possible answers, or good answers would be too long for this format. Please add details to narrow the answer set or to isolate an issue that can be answered in a few paragraphs.If this question can be reworded to fit the rules in the help center, please edit the question.

Just handle it the same way you would if you were developing for Windows, which has been dealing with "fragmentation" for decades now. – Mason Wheeler Nov 26 '12 at 22:00
In reality, I'll bet dollars to doughnuts (and I really like doughnuts) that dealing with fragmentation as a web developer is a far larger pain, or at least it was over the course of the entire decade ca. 2000-2010 and that didn't cause people terrible pains. Actually it did, I was there, I remember, but it was dealable. – Jimmy Hoffa Nov 26 '12 at 22:50
they develop for iOS and forget about Android, given the massive Apple AppStore sales ratios to Android app sales, this is actually a reasonable alternative. – Jarrod Roberson Nov 26 '12 at 22:57
Don't fear fragmentation... Embrace it! (According to Hugo Visser via…) – Johan Pelgrim Nov 27 '12 at 8:19
From what I've heard, the only area where fragmentation is really painful is 3D games. For everything else, decide on a minimal API level, use fluid layouts, and you have a very good chance of running on almost all devices without problems. – Michael Borgwardt Nov 28 '12 at 11:05

Android is great at dealing with flexible designs that run across multiple devices. It's a huge topic that can't be expanded in detail as an answer, but I think fragmentation has gotten a bad rap. It really isn't that bad, and isn't that hard to handle.

It's great to see your App run from small screen phones to large 10" tablets, and Android handles all the layout of the fragments for you. I think you'll find iOS development could take a thing or two from Android ;).

What I've found is the App often has an objective of what it needs to achieve. As you develop you discover that the lower Android API levels don't meet those needs. So rather then thinking about what devices you need to target. Decide first on what Android version you must use to build the App.

Also, people using older Android platforms also might have a phone that can't handle the needs of the App anyway. So dropping support for older versions isn't really a loss, because it wouldn't have worked very well for them anyway (but that depends more on the App).

share|improve this answer
And you can use this page to decide on what version(s) to support. – Izkata Nov 26 '12 at 21:54
While Gingerbread is shown to be the largest it's also possible that most Gingerbread devices are stuck at that level. Where as, the number of Honeycomb is so small because those devices were able to update. That means in my mind, that Gingerbread is hardware that can't handle more where as Honeycomb devices had the power to run Ice Cream. People using Gingerbread are more likely to replace the device then to update it to higher API level. It's the same with iPhone 3. There's a lot of them, but they aren't that great as a target. – ThinkingMedia Nov 26 '12 at 22:47
@Izkata, that's a great link - thanks! – Bill Nov 29 '12 at 0:13

I think the biggest difficulty is supporting various screen sizes, especially in very graphical interfaces. Display size can vary quite a lot and also h/w ratio and number of pixels. In Android you can specify different resources for each of these cases, and possibly for all their combinations (long/hi-res/small, square/mid-res/medium,...), which would mean a large amount of configurations - which would mean quite a mess of course.

So it might not be easy to come out with a layout and small set of resources that can support most configurations, and it's important that graphical designers learn the tools and tricks they can leverage to achieve this.

On the API side, I think Google does some good efforts in backward compatibility, also mantaining a nice backport of the most useful new features.

share|improve this answer

One resource to consider is vendor loaner or rental programs for development partners (developer partner programs). Some provide short-term access for testing purposes affordably, perhaps even free.
Most of the hardware vendors have developer programs, which offer hardware for reduced costs or even free (e.g. Samsung, Motorola, Apple, BlackBerry (for BlackBerry Alliance Members), LG). Check them out for the devices you want/need.

There are publicly accessible 'physical' test labs that you can just walk into (or reserve time). They are usually called open device labs: starting point, Google search. Check out if there are any in your neighbourhood and what devices they have.

There's the occasional 'crowdsourced' testing community like uTest that you can ask around.

Note that there are also many on-line services for testing your apps on many devices like AppThwack, TestFlight, TestObject, TestFairy, Keynote a.k.a. DeviceAnywhere, or Xamarin test cloud that maybe have the device you want to test on.
You would also use these before releasing your app, and although these are not 'definitive' testing platforms (there's much to be said for testing on real devices), any tests helps.

Note: Useful overview article

share|improve this answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.