I work on an Android app aimed at the North American market.
Android O, P and Q are 88% of our Android devices. By far and large, fragmentation is something I _never_ have to think about.
Jetpack libraries are here to handle it for us, as an abstraction layer between the OS and third party apps.
I would have mentioned that e.g. camera apps are an exception : here hardware fragmentation can be a pain. I was half surprised to see that Google is also working on that one with the camera x library.
There have been cases where the fragmentation bites us; and there might be in the future (although in all fainess my iOS colleagues sometimes have to create specific fixes as well) but the last time I had to scratch my head because of a device specific bug was years ago.
And at the time, I was already finding these articles deeply ridiculous.
It sounds like you're rolling with whatever Google's latest 'solution' to fragmentation is, so of course it's not going to be an issue: Google is dropping old devices for you so they never even appear in your console stats.[1] This is a perfectly valid business decision to take on your end, but it doesn't mean that the problem doesn't still exist... only that you aren't having to deal with it. I've got several still functional 4.x-5.x devices (thanks to stellar upgrade policies) that can't even use the market anymore (so much for compatibility libraries being the solution)[2] I've also done Android development and years ago stopped believing that the real solution they have to offer is anything other than throw your devices away after a few years. Me bitter? Only when I read posts saying fragmentation is a solved problem on Android ;-)
[1] You say that O/P/Q are 88% of your devices but they only represent 38.7% of devices accessing the market (Q doesn't even show up) per https://developer.android.com/about/dashboards. Likely the solution Google has provided ignores a significant chunk of devices out there. When they announce these new initiatives, they tend to support the most widely-used and recent devices while quietly ignoring the rest. A valid strategy, but hardly comprehensive. (yeah, yeah... this time is different)
[2] Technically, they can still access the market, they just can't download anything. Probably either some web API breakage or no longer supported version of something on the device.
>It sounds like you're rolling with whatever Google's latest 'solution' to fragmentation
> You say that O/P/Q are 88% of your devices but they only represent 38.7% of devices accessing the market
NO !!
That's the issue with these articles. They just read the android dashboard and pretend that:
- it applies everywhere
- many different devices = difficulty for the devs or users
The dashboard reports the global figures. These figures are heavily skewed by third world countries where old versions of Android are still shipping.
"The market" ... this is absolutely meaningless. If you work for let's say Lyft, the market is wherever lyft can operate, that's not the whole world, so whatever the Android version dashboard tells is meaningless for you or your users.
For our market 88% of the users are O or superior. 6 months ago we stopped supporting devices older than lollipop for this particular app (IIRC it was because they don't support TLS 1.3 and it was giving us some security concerns). For the app I worked on before, we had legacy apks : apks that are still distributed on the play store but that we don't maintain. Basically when we decided to stop "supporting" an old Android version. And by old; I mean Android Eclair; this was a pretty popular app with tons of users on various devices. So we take our current app that still support that old API level. We make sure that it is as stable as we can get it (since we always launch new features, we always have new corner cases, we make sure these are handled). And when it is ok; we set this apk as a legacy one on the play store : if you have one of these old Android versions, you are going to be able to continue using or even installing that older apk. Technically we can update it if we want to, but unless there is suddenly a wave of crashes or complaints we just leave it be.
Even for that app, the figures were roughly the same (and that's while being available in 150 countries, that was for a pretty popular app). For these legacy apks, we often had something like 10k installs, while the main app is in the dozens of millions (but since that app had a paid subscription, make the service work even for old device was a must do).
And yeah, even for that job where we had an app available on API 7+ (Android 2.3 eclair IIRC), the figures were still pretty similar and fragmentation was something I read about in stupid articles, not a part of my daily job. I am not working for Google, if I had to solve fragmentation issues everyday, I would be the first to complain about it. I am here to build an app, not maintain random OEMs hacks.
> I've got several still functional 4.x-5.x devices [...] that can't even use the market anymore
4.4.x and 5.x can certainly use the Play Store. I use both of those versions regularly, and they still works well (in fact, I keep 4.4.x support, and do not plan on stopping soon).
In Europe, a few manufacturers still sell 5.x devices. In particular, my manufacturer of choice only recently decided to finally upgrade the small tablet / low cost option to give us the chance of having an OS that's not 5 years old on purchase /sarcasm.
May I mention that contrary to iPads, older devices allow to side-load older app versions (that you can easily find online). I recently re-used a 4.0.2 device and installed VLC and Firefox on it (all it will ever need). And for 4.2+, you can just use F-Droid, most apps are going to be compatible.
+1 I have a few hobby apps on the app store that gave had a few thousand downloads. Not a huge sample but generally speaking it's N+ that has the vast majority of users. My apps are fairly standard or are games - most API levels since M seem to basically cover everything I need 99% of the time.
I have no interest AT ALL in the manufacturer of the device.
Fragmentation simply doesn't feel like an issue, at least to me.
Fragmentation becomes an issue when you're either building services that run in the background or interact with hardware (BT, WiFi, WiFi-direct, Camera, GNSS, Gyro/Accel). I feel fragmentation hard with my app.
I’ve been doing iOS since 2008 and the “specific fixes” are definitely more common these days! iOS used to be a simple platform with one standard phone size and tablet size but it started to increase in complexity with all the new devices today (I’m looking at you iPhone X). iOS 6 -> iOS 7-8 was such a pain to main backward compatibility because of all the navigation/status bar changes.
I still find iOS to be my preferred platform but the “it just works” feeling is no longer there.
In my experience, iOS is still pretty close to, “it just works” if one sticks to recommended practices (autolayout, etc). Not perfect, but not bad either.
Of course if you’re writing manual frame code or using some third party UI library, that’s a very different story…
...then you're fine and fragmentation is most likely a non-issue. OTOH, if you require
- openGL or 3D graphics calls
- read/write to removable storage
- video streaming, HLS streaming, or even local video file playback
- downloads/network fetches of larger amounts of files/data
- multi-touch UX
- rear and/or front or any specific camera access
- actually any hardware sensor/broadcaster/receiver access (gyro, accel, flashlight, bluetooth)
- OS manipulation (custom keyboard, replace default telephony/texting, modify native modals such as share view, register with the OS as a share-target, etc)
...then enjoy lopping off a chunk of your userbase (which you may have to specify manually, although Google helps with this) or struggling to write lots of OS detection switch statements with custom logic for handling each of these things. Working on an app that does 4+ of the things from the latter list, Android fragmentation has been and will continue to be a problem, even if it isn't really at any given point.
If we just want apps which move blobs of text back and forth between views and across the network, then yes fragmentation is not an issue.
The Q is of course: how many do you need to support. This is the same as with browsers. If you have to code for blind people using IE6 with JS off, you are coding for the lowest common denominator. This happens.
If you can just code for "The 90% with a reasonably modern browser, at least one working eye and JS enablded" then you are in a different situation.
Fragmentation hurts the people in the first camp that need to support 99% or more, for example if you are coding an app for a government service and not for a startup.
> I would have mentioned that e.g. camera apps are an exception : here hardware fragmentation can be a pain. I was half surprised to see that Google is also working on that one with the camera x library.
The irony, is that Android was originally designed to be a Camera OS. So its still fragmented in the thing it set out to do.
That's taken way out of context - according to your linked article, Android was pitched as a Camera OS in 2004, but almost immediately changed gears to an "open-source handset solution" a few months later that year. This was still years before iPhone was announced.
Sure. Plenty of people can ignore the cheaper devices. But if you work for a government agency, you may not be able to. Or a bank. Or a utility. Or a telecom provider. Or a 1000 other businesses.
It's been awhile since I've done Android development, but are you including the Kindle devices in your numbers? Best I can tell the latest FireOS is based on Nougat.
"O, P and Q are 88% of our Android devices" - this is problematic because you're therefore serving only a fraction of the market.
A considerably number of companies have to actually deal with this fragmentation, for example, we have a product that integrates with a device via Blutooth, and we have to deal with this issue. We can't just 'not serve' a bunch of customers.
Well, if you remove all iOS versions with <3.42% penetration, then you should remove the same from the Android table and use 2 decimals for Android like for iOS.
My point being: there ARE other iOS versions in use. I have a backup working iPhone 4 turned on right now. It won't upgrade beyond iOS 5 (I think it's iOS 5). But somehow the author ignores all those 0.1% iOS versions, yet shows them for Android (with 4 decimals no less).
This. I'm happily using JuiceSSH in Android Q beta even though it was last updated in 2017 and was targeting Android L. Android maintained reasonably good backward compatibility just like Windows did.
So many iOS app developers would use new SDK as soon as newer iOS is out, and abandon existing users who chose to use old iOS. Worse, those app developers would choose to drop old version, release a new version that requires you to purchase again.
If apps ever had a version that worked as of iOS 5, you can still download “the last compatible version”. I’ve downloaded older streaming apps recently on a first generation iPad running iOS 5.
Any iPhone released since 2013 - with the exception of the 5C can run the latest OS.
I'm not sure why the GP said his iPhone 4 won't upgrade past iOS 5, but it's worth noting: while an iPhone 4 can be upgraded to iOS 7, actually doing so is a bad idea unless you want your phone to run slow as molasses. You'll be much better off on iOS 6 or 5.
(I suppose there may be a security argument for upgrading as far as possible, but it's not like iOS 7 is up-to-date either. If you're concerned about security, you shouldn't be using an iPhone 4.)
Correct, sorry, didn't bother to look at the time. It is 7.1.2. The point still stands, it's old and I'm probably in 0.1% that the article left out in iOS markets.
The article concludes, as far as I can tell, it isn't fragmented, it just has a bunch of recent enough versions on similar enough devices to run most apps.
Apps don't care what version of Android you run, they care what API support you have, and apps can detect API support at runtime and adapt.
OTOH, the article fails to mention that Apple refuses to let you support devices after EOL, and even some of the oldest Android devices in existence can run even the newest Android, as long as you're willing to upgrade the ROM yourself.
Phone hardware typically is literally falling apart after 3-5 years, any truly old phones are ones that users have chose to keep on life support but not upgrade their ROMs (or made the mistake of buying a phone from a consumer-hostile brand, which is, ultimately, the only valid argument for Android fragmentation).
The only company that is truly consumer hostile is Samsung. And, frankly, I don't know why anyone would buy Samsung or Apple or even Google's own Pixel series... OnePlus charged me $550 for a phone (the 6T) that has the same size screen (and its an AMOLED too), literally same parts, but with more RAM and storage, and a bigger battery, that is otherwise identical to a Pixel 3XL or a Samsung S9+ or whatever top tier extra large phone that costs $800-1300; and that new 7 Pro? Still an amazing deal, and OnePlus supports Android on their phones ridiculously long times.
What makes Samsung phones consumer hostile? Their ridiculous prices? Because I wouldn't call that hostile, rather simply overpriced. And I would agree that they are.
However, I still have every galaxy note I have ever owned, working, and in great condition (Note 2, 5, and now 8). My dad is actually using the 5. All of them got upgraded at least once to a newer Android OS and they are still solid devices.
Granted, other than Note, I've only owned a Startosphere for the hw keyboard, so I can't compare it to others, but even after I realized that the Note 8 was crazy expensive and made me double think what my next phone will be, I worry if the longevity can be matched.
Samsung phones ship with ROMs that try to remove as much of the native Android experience as possible, and tend to eat battery life for no good reason. Swapping ROMs to AOSP-like experiences vastly improves battery life and performance on many Samsung phones.
Several Galaxy and Note devices also cannot ROM swap at all due to locked bootloaders, which makes that the most consumer hostile thing of all. I'm not sure which models this effects, but it is enough to put Samsung on my forever shitlist.
The upgrades that make the phone slower and slower and remove pre-existing functionality. The removal of Android native features, with replacements that stop working after some time. The severe locking of the phone.
But then, Samsung is far from the only ones doing this. I've personally stopped buying their phones because it's better to buy cheaper stuff and just switch after the manufacturer starts with the shenanigans.
How about physical buttons that can't be remapped to anything other than their proprietary Bixby service? If you don't like it you can turn it off and have a useless button.
Nope. 6T's low light performance is on par with the Pixel 3's, and Apple's gen equivalent of the Xs doesn't seem to perform as well, and the S9 also had slightly worse night performance.
The only way people can beat the 6T and Pixel 3's camera is with the newer phones: the 7 Pro, S10, Honor 20, Mi 9, the Pixel 4 (when it finally comes out) all use the same sensor: the Sony IMX586.
You may be just simply stating you don't like the 6T's camera app... it does low light differently. Not worse, but different, and in my opinion, more accurately. People have put a copy of Google Camera on their 6Ts and enabled the Pixel 3 low light mode (it's entirely in software and not a function of the hardware; change a prop, and any phone gets the Pixel 3 enhancements), and the 6T either performed essentially identically, or slightly better.
I buy Samsung, and now a Pixel, because I like their design better. (Much prefer the experience of the Pixel now) The price difference is a non-issue for me because I don't feel the need for the latest model, so I get last year's model at > 50% off the premium price. I'm with you: I'm astounded that so many people pay such a premium for the absolute bleeding edge. It would be like if enormous segments of PC buyers purchased massively high end gaming rigs just because. Marketing, I guess?
OTOH, the article fails to mention that Apple refuses to let you support devices after EOL, and even some of the oldest Android devices in existence can run even the newest Android, as long as you're willing to upgrade the ROM yourself.
The 2012 iPhone 5 is the newest unsupported iPhone. Would you really want to support a phone that old and have to support both a 32 bit and a 64 bit version of your app?
> OnePlus supports Android on their phones ridiculously long times.
I would challenge that. I'm still waiting for Android Pie (August 2018) on my OnePlus 3T (November 2016). That's not even two years, and while OnePlus have promised to eventually bring Pie to this phone, it's already almost 9 months late. By the time the 3T is updated to Pie, Android Q will be out.
Something that doesn't get talked about as much is the differences between how manufacturers customize their OS. It has been talked about a fair bit on HN (https://dontkillmyapp.com/), but it really is a huge problem.
I can be listening to music on my phone and One+ will just kill Pandora, or Spotify. I have to manually "lock" music apps and workout apps in One+'s task switching UI to keep them from being randomly killed while in use.
Hilariously enough I have one game on my phone that will always run in the background and never be killed, sucking down a lot power. Somehow even when not in the foreground it consumes massive CPU. I don't think it is even malicious, just oddly programmed. I wish my music apps could pull off the same trick though!
I had a similar problem with my OP6T. My hike tracking app would constantly turn off randomly in the middle of a hike. Having used Android for years I went through all the typical battery optimization settings, but nothing worked. I contacted the app developer and they had no idea what was causing it.
Eventually I stumbled on the "Lock" feature, which as far as I know is specific to OP, and that solved everything. I'm pretty annoyed with OP about it to be honest. Android has app-specific battery optimization settings built in but they just completely ignored them.
I don't think a lot of people understand how apps run in the background on Android. I know having worked on one recently, coming from iOS, I had a lot of assumptions about what it would or wouldn't be doing... and they were all wrong (of course).
Turns out Android, at least however this app is setup, maybe by default, leaves the app fully running. Like zero effort to suspend it automatically. A part of the UI crashed and a hunt to find the bug made me realize this... I fixed the bug, but still haven't really looked into how to really suspend it.
You should try disabling deep battery optimization in Settings -> Battery -> Battery optimization -> Advanced optimization. Unfortunately that feature is known to cause these kind of problems on OnePlus devices.
These articles rarely go over what, if any, practical concerns there are. The Wintel market is even more fragmented, but that's not really an issue in practice because the abstractions are more or less in the right place.
You can install stock Win 10 on any machine you buy, or most Linux distros with the same boot image thanks to UEFI and the PC spec. Android ARMs are NOT an architecture. They're random pins soldered to random shit with little upstreamable in their hacked to hell kernels.
Oreo and the /vendor partition may help with this some. Still, it's a far cry from the Linux/PCs days of the 90s. I've written about this before:
> They're random pins soldered to random shit with little upstreamable in their hacked to hell kernels.
Sounds like arcade cabinets. Maybe we need something that does for Android ARM devices what MAME does for those: specifies each device as an abstract wiring diagram of pins to bits of patched kernel acting as ROMs. And then make that whole thing into a kernel virtualization-provider module, which uses the stock kernel for anything not masked over by ROMs.
Wintel is something that could be taken down a notch, but it seems everything outside of the x86 family is even worse.
If I buy a Dell laptop or a Lenovo laptop, it will come with a bunch of useless junk installed that nobody in their right mind would ever want, like Lenovo's useless gigantic Wi-Fi icon in Windows (last observed by me in a T520). But not only can I uninstall all of that junk software, I am still running real Windows. And that means I can update it normally.
Compare that to an Android device. You get a phone from a company like Samsung and you cannot uninstall the Facebook app no matter what you do. You get a phone from HTC and maybe they decide to push an update from 7.something to 8.0 and 8.0 introduces a new issue. That is fixed in 8.1 but you can never actually upgrade to 8.1 because it's not the real version of Android it's the HTC version of Android and they have ordained that your device shall never go past 8.0 and they pushed some firmware "security" update that prevents you from installing any other OS on your device. Additionally, some software seems to be dictated by your mobile carrier, which would be like allowing Comcast to control what you run on your PC.
So whatever fragmentation there is on Wintel (or LinAmd), it is not nearly as hostile to the user as the Android ecosystem.
That's a good point. Imagine Microsoft allowed third-party computer manufacturers to ship custom-built versions of Windows with modifications and third-party drivers that didn't have to be released in any publicly usable format. We'd have a real mess!
To be clear, I don't think this is a failing of open source. The problem is that Google allowed phone manufacturers to release practically anything they wanted based on the Android code base under the name "Android" and to ship with the common market (Google Play).
Frankly I don't think they should have allowed any modifications, making Android closer to how Firefox is distributed. (Anyone can edit the source code of Firefox, and even release a fully built binary based on that edited code, but you can't call it Firefox.) Maybe fewer manufacturers would have bought in at the outset, or maybe some would have tried to fork Android, but it's easy to forget what a desperate situation they were in. Outside of Apple and maybe Blackberry, the mobile OS market was in shambles because nobody was ready with high quality smartphone software. Android was a huge win and probably saved multiple companies from bankruptcy, and I think they would have eventually bought in to a more strictly defined OS out of necessity.
The articles states the vast majority of android phones do not receive any updates but Google is able to collect valuable data from these devices. I beleieve this is a practical concern.
> My POV is ... Apple leads the Mobile OS market share ... by a huge margin.
I'm having a really hard time understanding this statement. Does the author mean with respect to how updates are handled? It clearly cannot mean in terms of sheer number of installs, Android is clearly _leagues_ ahead of iOS in that regard.
Android doesn't brag it has 75% share. Actual data is that 85% of smartphones run Android and that's market share. Fact that they are not updated to the latest version doesn't change the market share.
"Addressable" market share maybe? A developer can target iOS current version and current version-1, and cover the large majority of iOS devices. How far back does an Android developer have to target? Maybe it doesn't matter since the Android marketshare is so much larger that targeting current - 1 stills gets more devices than iOS.
And if you want to compare "updating to the latest version", we should be comparing Pixel phones to iPhones. I'm sure Pixel's have a very similar rate of conversion, if not better.
He’s basically claiming that latest iOS has higher market share than latest Android version (which may be true), and from that concludes that the rest of the android versions in the market somehow don’t count, so iOS is biggest.
Android has its issues, but “math” like this isn’t the answer. This is drivel, really.
Also: See Wintel for fragmentation. Everywhere in nature and tech diversity is good. But somehow not for mobile phone OSes.
It depends on what the cause is. If I have no option to update to a recent version and causing diversity that way, it is bad. If I can choose to install a custom version, it is good. So in Android's case, the diversity is just a symptom of the underlying fragmentation of responsibility for updates.
However, phone manufacturers might see this a bit differently.
The fault of fragmentation lies at many levels, including distributors. The bookstore at my alma mater in the Midwest is normally great at promoting modern tech products, but they recently started pushing two models of a phone with KitKat at $100+ pricepoints. That's Android 4.4, which was deprecated in 2015. Who are these phones for? They're not even suitable for computer science students, because trying to learn Android development with a KitKat device is incredibly suboptimal.
A google search on 100$ android phones returned a "best cheap android phones" list. The first entry is the Nokia 2 (never tried one but I heard good things).
For 85$ it ships with Oreo.
That's kind of amazing : for a relatively modest sum, you get a lot of technology.
It makes me wonder why anybody would recommend a costlier device shipping with 4.4
I know this post is about Android versions but I recently launched a new service and have been watching user agents and I’ve been pleasantly surprised to see no matter the Android version, it’s almost always running Chrome 73/Firefox 66. I have a user running Android 5.5.1, another on some version of 4! Yet they’re on modern browsers. This isn’t true for anyone on an old iOS. Those users are stuck with old browsers, which is quite sad for the user and developer.
Android O, P and Q are 88% of our Android devices. By far and large, fragmentation is something I _never_ have to think about.
Jetpack libraries are here to handle it for us, as an abstraction layer between the OS and third party apps.
I would have mentioned that e.g. camera apps are an exception : here hardware fragmentation can be a pain. I was half surprised to see that Google is also working on that one with the camera x library.
There have been cases where the fragmentation bites us; and there might be in the future (although in all fainess my iOS colleagues sometimes have to create specific fixes as well) but the last time I had to scratch my head because of a device specific bug was years ago.
And at the time, I was already finding these articles deeply ridiculous.
[1] You say that O/P/Q are 88% of your devices but they only represent 38.7% of devices accessing the market (Q doesn't even show up) per https://developer.android.com/about/dashboards. Likely the solution Google has provided ignores a significant chunk of devices out there. When they announce these new initiatives, they tend to support the most widely-used and recent devices while quietly ignoring the rest. A valid strategy, but hardly comprehensive. (yeah, yeah... this time is different)
[2] Technically, they can still access the market, they just can't download anything. Probably either some web API breakage or no longer supported version of something on the device.
He said he targets North America. Those stats you referenced are global.
If he was supporting parts of Asia, Latin America, etc then I have a feeling his team would have to be more careful.
> You say that O/P/Q are 88% of your devices but they only represent 38.7% of devices accessing the market
NO !!
That's the issue with these articles. They just read the android dashboard and pretend that:
- it applies everywhere
- many different devices = difficulty for the devs or users
The dashboard reports the global figures. These figures are heavily skewed by third world countries where old versions of Android are still shipping.
"The market" ... this is absolutely meaningless. If you work for let's say Lyft, the market is wherever lyft can operate, that's not the whole world, so whatever the Android version dashboard tells is meaningless for you or your users.
For our market 88% of the users are O or superior. 6 months ago we stopped supporting devices older than lollipop for this particular app (IIRC it was because they don't support TLS 1.3 and it was giving us some security concerns). For the app I worked on before, we had legacy apks : apks that are still distributed on the play store but that we don't maintain. Basically when we decided to stop "supporting" an old Android version. And by old; I mean Android Eclair; this was a pretty popular app with tons of users on various devices. So we take our current app that still support that old API level. We make sure that it is as stable as we can get it (since we always launch new features, we always have new corner cases, we make sure these are handled). And when it is ok; we set this apk as a legacy one on the play store : if you have one of these old Android versions, you are going to be able to continue using or even installing that older apk. Technically we can update it if we want to, but unless there is suddenly a wave of crashes or complaints we just leave it be.
Even for that app, the figures were roughly the same (and that's while being available in 150 countries, that was for a pretty popular app). For these legacy apks, we often had something like 10k installs, while the main app is in the dozens of millions (but since that app had a paid subscription, make the service work even for old device was a must do).
And yeah, even for that job where we had an app available on API 7+ (Android 2.3 eclair IIRC), the figures were still pretty similar and fragmentation was something I read about in stupid articles, not a part of my daily job. I am not working for Google, if I had to solve fragmentation issues everyday, I would be the first to complain about it. I am here to build an app, not maintain random OEMs hacks.
4.4.x and 5.x can certainly use the Play Store. I use both of those versions regularly, and they still works well (in fact, I keep 4.4.x support, and do not plan on stopping soon).
In Europe, a few manufacturers still sell 5.x devices. In particular, my manufacturer of choice only recently decided to finally upgrade the small tablet / low cost option to give us the chance of having an OS that's not 5 years old on purchase /sarcasm.
May I mention that contrary to iPads, older devices allow to side-load older app versions (that you can easily find online). I recently re-used a 4.0.2 device and installed VLC and Firefox on it (all it will ever need). And for 4.2+, you can just use F-Droid, most apps are going to be compatible.
Just like the "deal of the day" ones that are still being sold across German consumer stores at shopping malls.
I have no interest AT ALL in the manufacturer of the device.
Fragmentation simply doesn't feel like an issue, at least to me.
Then you can't just ignore large percentages of the market.
I still find iOS to be my preferred platform but the “it just works” feeling is no longer there.
Of course if you’re writing manual frame code or using some third party UI library, that’s a very different story…
- native UI elements (labels, text fields, images, listviews, etc)
- images in any standard format (png, jpeg, etc)
- network requests that doesn't fetch more than a few 100kb of data at a time
- simple touch interaction (single item tap/drag/swipe/slide)
- read/write to internal storage
- play audio
...then you're fine and fragmentation is most likely a non-issue. OTOH, if you require
- openGL or 3D graphics calls
- read/write to removable storage
- video streaming, HLS streaming, or even local video file playback
- downloads/network fetches of larger amounts of files/data
- multi-touch UX
- rear and/or front or any specific camera access
- actually any hardware sensor/broadcaster/receiver access (gyro, accel, flashlight, bluetooth)
- OS manipulation (custom keyboard, replace default telephony/texting, modify native modals such as share view, register with the OS as a share-target, etc)
...then enjoy lopping off a chunk of your userbase (which you may have to specify manually, although Google helps with this) or struggling to write lots of OS detection switch statements with custom logic for handling each of these things. Working on an app that does 4+ of the things from the latter list, Android fragmentation has been and will continue to be a problem, even if it isn't really at any given point.
If we just want apps which move blobs of text back and forth between views and across the network, then yes fragmentation is not an issue.
Yes. The backwards sensors in the Nexus 5x and 6 were particularly amusing/irritating: https://www.theverge.com/2015/11/9/9696774/google-nexus-5x-u....
If you can just code for "The 90% with a reasonably modern browser, at least one working eye and JS enablded" then you are in a different situation.
Fragmentation hurts the people in the first camp that need to support 99% or more, for example if you are coding an app for a government service and not for a startup.
The irony, is that Android was originally designed to be a Camera OS. So its still fragmented in the thing it set out to do.
https://www.pcworld.com/article/2034723/android-founder-we-a...
A considerably number of companies have to actually deal with this fragmentation, for example, we have a product that integrates with a device via Blutooth, and we have to deal with this issue. We can't just 'not serve' a bunch of customers.
This is a huge exception that suppresses third party innovation.
https://i.imgur.com/0Ar0ta5.png
My point being: there ARE other iOS versions in use. I have a backup working iPhone 4 turned on right now. It won't upgrade beyond iOS 5 (I think it's iOS 5). But somehow the author ignores all those 0.1% iOS versions, yet shows them for Android (with 4 decimals no less).
So many iOS app developers would use new SDK as soon as newer iOS is out, and abandon existing users who chose to use old iOS. Worse, those app developers would choose to drop old version, release a new version that requires you to purchase again.
Any iPhone released since 2013 - with the exception of the 5C can run the latest OS.
(I suppose there may be a security argument for upgrading as far as possible, but it's not like iOS 7 is up-to-date either. If you're concerned about security, you shouldn't be using an iPhone 4.)
Yes, I realize that as a developer, fragmentation can be more of a pain on Android, but comparing it directly to iOS is comparing Apples to oranges.
Apps don't care what version of Android you run, they care what API support you have, and apps can detect API support at runtime and adapt.
OTOH, the article fails to mention that Apple refuses to let you support devices after EOL, and even some of the oldest Android devices in existence can run even the newest Android, as long as you're willing to upgrade the ROM yourself.
Phone hardware typically is literally falling apart after 3-5 years, any truly old phones are ones that users have chose to keep on life support but not upgrade their ROMs (or made the mistake of buying a phone from a consumer-hostile brand, which is, ultimately, the only valid argument for Android fragmentation).
The only company that is truly consumer hostile is Samsung. And, frankly, I don't know why anyone would buy Samsung or Apple or even Google's own Pixel series... OnePlus charged me $550 for a phone (the 6T) that has the same size screen (and its an AMOLED too), literally same parts, but with more RAM and storage, and a bigger battery, that is otherwise identical to a Pixel 3XL or a Samsung S9+ or whatever top tier extra large phone that costs $800-1300; and that new 7 Pro? Still an amazing deal, and OnePlus supports Android on their phones ridiculously long times.
However, I still have every galaxy note I have ever owned, working, and in great condition (Note 2, 5, and now 8). My dad is actually using the 5. All of them got upgraded at least once to a newer Android OS and they are still solid devices.
Granted, other than Note, I've only owned a Startosphere for the hw keyboard, so I can't compare it to others, but even after I realized that the Note 8 was crazy expensive and made me double think what my next phone will be, I worry if the longevity can be matched.
Several Galaxy and Note devices also cannot ROM swap at all due to locked bootloaders, which makes that the most consumer hostile thing of all. I'm not sure which models this effects, but it is enough to put Samsung on my forever shitlist.
The upgrades that make the phone slower and slower and remove pre-existing functionality. The removal of Android native features, with replacements that stop working after some time. The severe locking of the phone.
But then, Samsung is far from the only ones doing this. I've personally stopped buying their phones because it's better to buy cheaper stuff and just switch after the manufacturer starts with the shenanigans.
The only way people can beat the 6T and Pixel 3's camera is with the newer phones: the 7 Pro, S10, Honor 20, Mi 9, the Pixel 4 (when it finally comes out) all use the same sensor: the Sony IMX586.
You may be just simply stating you don't like the 6T's camera app... it does low light differently. Not worse, but different, and in my opinion, more accurately. People have put a copy of Google Camera on their 6Ts and enabled the Pixel 3 low light mode (it's entirely in software and not a function of the hardware; change a prop, and any phone gets the Pixel 3 enhancements), and the 6T either performed essentially identically, or slightly better.
The 2012 iPhone 5 is the newest unsupported iPhone. Would you really want to support a phone that old and have to support both a 32 bit and a 64 bit version of your app?
For a developer, there is no difference between a 32-bit and 64-bit.
Deleted Comment
I would challenge that. I'm still waiting for Android Pie (August 2018) on my OnePlus 3T (November 2016). That's not even two years, and while OnePlus have promised to eventually bring Pie to this phone, it's already almost 9 months late. By the time the 3T is updated to Pie, Android Q will be out.
I can be listening to music on my phone and One+ will just kill Pandora, or Spotify. I have to manually "lock" music apps and workout apps in One+'s task switching UI to keep them from being randomly killed while in use.
Hilariously enough I have one game on my phone that will always run in the background and never be killed, sucking down a lot power. Somehow even when not in the foreground it consumes massive CPU. I don't think it is even malicious, just oddly programmed. I wish my music apps could pull off the same trick though!
Eventually I stumbled on the "Lock" feature, which as far as I know is specific to OP, and that solved everything. I'm pretty annoyed with OP about it to be honest. Android has app-specific battery optimization settings built in but they just completely ignored them.
Turns out Android, at least however this app is setup, maybe by default, leaves the app fully running. Like zero effort to suspend it automatically. A part of the UI crashed and a hunt to find the bug made me realize this... I fixed the bug, but still haven't really looked into how to really suspend it.
If I switch from a game to a browser to look something up, being able to switch back to the (paused) game 5 minutes later is a feature, not a bug.
Apps that obey backgrounding and stop doing work (e.g. burning CPU/Power) are fine.
Oreo and the /vendor partition may help with this some. Still, it's a far cry from the Linux/PCs days of the 90s. I've written about this before:
https://penguindreams.org/blog/android-fragmentation/
Sounds like arcade cabinets. Maybe we need something that does for Android ARM devices what MAME does for those: specifies each device as an abstract wiring diagram of pins to bits of patched kernel acting as ROMs. And then make that whole thing into a kernel virtualization-provider module, which uses the stock kernel for anything not masked over by ROMs.
(Also, Wintel machines are very much random pins soldered to random crap, they just do a better job papering over it with ACPI AML bytecode)
If I buy a Dell laptop or a Lenovo laptop, it will come with a bunch of useless junk installed that nobody in their right mind would ever want, like Lenovo's useless gigantic Wi-Fi icon in Windows (last observed by me in a T520). But not only can I uninstall all of that junk software, I am still running real Windows. And that means I can update it normally.
Compare that to an Android device. You get a phone from a company like Samsung and you cannot uninstall the Facebook app no matter what you do. You get a phone from HTC and maybe they decide to push an update from 7.something to 8.0 and 8.0 introduces a new issue. That is fixed in 8.1 but you can never actually upgrade to 8.1 because it's not the real version of Android it's the HTC version of Android and they have ordained that your device shall never go past 8.0 and they pushed some firmware "security" update that prevents you from installing any other OS on your device. Additionally, some software seems to be dictated by your mobile carrier, which would be like allowing Comcast to control what you run on your PC.
So whatever fragmentation there is on Wintel (or LinAmd), it is not nearly as hostile to the user as the Android ecosystem.
To be clear, I don't think this is a failing of open source. The problem is that Google allowed phone manufacturers to release practically anything they wanted based on the Android code base under the name "Android" and to ship with the common market (Google Play).
Frankly I don't think they should have allowed any modifications, making Android closer to how Firefox is distributed. (Anyone can edit the source code of Firefox, and even release a fully built binary based on that edited code, but you can't call it Firefox.) Maybe fewer manufacturers would have bought in at the outset, or maybe some would have tried to fork Android, but it's easy to forget what a desperate situation they were in. Outside of Apple and maybe Blackberry, the mobile OS market was in shambles because nobody was ready with high quality smartphone software. Android was a huge win and probably saved multiple companies from bankruptcy, and I think they would have eventually bought in to a more strictly defined OS out of necessity.
I'm having a really hard time understanding this statement. Does the author mean with respect to how updates are handled? It clearly cannot mean in terms of sheer number of installs, Android is clearly _leagues_ ahead of iOS in that regard.
Android doesn't brag it has 75% share. Actual data is that 85% of smartphones run Android and that's market share. Fact that they are not updated to the latest version doesn't change the market share.
Android has its issues, but “math” like this isn’t the answer. This is drivel, really.
Also: See Wintel for fragmentation. Everywhere in nature and tech diversity is good. But somehow not for mobile phone OSes.
It depends on what the cause is. If I have no option to update to a recent version and causing diversity that way, it is bad. If I can choose to install a custom version, it is good. So in Android's case, the diversity is just a symptom of the underlying fragmentation of responsibility for updates.
However, phone manufacturers might see this a bit differently.
Deleted Comment
For 85$ it ships with Oreo.
That's kind of amazing : for a relatively modest sum, you get a lot of technology.
It makes me wonder why anybody would recommend a costlier device shipping with 4.4
For WebView, Android 4.4 is stuck on Chrome 30/33 and anything older still uses AOSP.
Samsung users often use the Samsung browser, which is often a very obsolete version that came with the phone.
1. https://www.xda-developers.com/google-chrome-android-droppin...
chrome on android is dead to me. so many antifeatures it's maddening.