[Android Software Development] g313:
Hello

Asking all developers to start a discussion on what the minimum API level is that you support, and have you decided to drop support for older APIs and if so what the reasons are. The reason for starting this discussion comes from the frustrations caused by having to support older API levels. Yes it's important to support as many users as possible - not everybody has access to the latest and greatest devices / Android versions, my own day to day device is a Samsung Galaxy S6 with Android 6.0.1. Although I have access to a device with Android 7.1 and one with Lollipop. However there is only so far back you can go in terms of support before development starts to get frustrating and in the end the question has to be asked if it is really worth it.

Please first take a look at https://developer.android.com/about/dashboards/index.html for the latest device stats.

For some background, I'm the developer of this app http://xdaforums.com/android/apps-games/quick-gallery-photo-editor-t3394976 and https://play.google.com/store/apps/details?id=com.mobato.gallery. Currently min API 16 is supported, but I am thinking of making this 19 (KitKat), or dropping JellyBean support all together and just supporting Lollipop onwards. I will aim to explain why.

Recently I have added SD Card support. Anybody who has implemented proper SD Card support in their apps knows how frustrating this can be, especially with the new permissions required from the user in Lollipop onwards as part of the storage access framework (this is so bad that I even made a tutorial with screenshots showing the user how to grant access the SD Card, I have seen real users get confused by the SAF permissions activity). On KitKat it is impossible to write to the SD Card unless the device is rooted. This resulted in lots of negative reviews for apps when this limitation was introduced. Prior to KitKat all that was required was the write access permission to be declared in the application manifest. As you can see there are three different scenarios to write code for and test (pre-KitKat, KitKat and Lollipop onwards) which adds to development time/costs and bug fixing can become extremely cumbersome having to do full regression tests. However KitKat is still very popular. Since I don't even own a KitKat device it's impossible to test this scenario, let alone a rooted version (emulators only go so far).

Here are some additional facts:

KitKat devices account for 24% of checkins to Google Play

The 24% of KitKat users combined with older API levels (down to API 2.2) account for a whopping 39.3% of users checking in to Google Play.

Memory management for bitmaps just isn't great prior to Lollipop (lots of OOM can occur even with careful memory management as I have seen from crash reports).

JellyBean 4.4.4 got released in October 31, 2013. That's just over 3 years ago. In the world of mobile, that's equivalent to an entire period of geology such as the Jurassic Period.

JellyBean is discontinued according to https://en.wikipedia.org/wiki/Android_version_history

Fact: most of the bad reviews for my app are coming from users with low-end devices running older versions of Android, Lollipop onwards users generally leave more favourable reviews.

So in conclusion I am thinking about dropping support for KitKat and older at some point unless anybody believes it is worth supporting still? The question is how likely are those users ever going to make in-app purchases, although from a perspective of just showing adverts it might be worth it.

Please share your experiences with your apps and contribute your ideas.