What criteria should a developer consider when choosing the minimum API level for his Android application?
According to the dashboard, only 3.2% of Android devices are using an API level that's less than 17. But are those devices worth accommodating for? Who is it that won't update their Android device? Are they hobbyists or test devices that will expect incompatibility with most apps?
Indeed, as a developer, you ought to decide if the number of users who would potentially download your app for those versions of Android is worth to put effort into developing the app for those versions.
Besides the distribution percentage, it depends on your target audience and the type of application you wanna create aligned with business goals.
As a matter of fact, you should take into account the compatibility of some API features you may implement such as hardware access permissions and so on.
Related
I am thinking to make an application but at the time I don't have API 21 and API 22 installed on my SDK due to some network problems and I'm unable to download any thing at the moment. I was wondering if I can make an app effective enough to target many devices without using API 21 and API 22.
Bilal, judging from your comments to others, I'm getting the impression that you don't fully understand how the API levels work in Android. Let me try and explain.
The minimum API level is pretty self-explanatory, as it refers to the minimum Android OS version that can run your app. You want to set this as low as possible to target the most devices. To determine which level you set depends entirely on your application. For example, if your app requires access to the Calendar APIs, your minimum API level would be 7, because that is when those APIs were introduced.
You almost always want to set your maximum API level to the highest possible. Google encourages this, because it allows you to take advantage of all of the new APIs that have been released. But what about the devices that are outdated? You can still enable backwards compatibility with those devices using the Support Library.
Finally, it is not necessary to download each and every API level in the SDK manager. You only need to download the most recent.
I am making an android app, and am wondering what the industry's thoughts are on supporting older android versions like GingerBread and FroYo. Should a developer like me take the extra step to make my app compatible with those older versions, or are they obsolete? I am speaking in terms of the market in 2014.
Increasing my minimum SDK version opens up some more APIs, so which option should I pick, compatibility or APIs and features?
Most of the Android devices are above the Gingerbread level. But there are still a decent number of those devices out there. You, as a developer, must decide if the number of users who would potentially download your app for those versions of Android is worth the level of effort in developing the app for those versions. For the past year, both companies I've worked at have begun to work on 4.0 and above only and have forsaken the lower versions.
To get the current information on what the ecosystem looks like for Android, check out Google's dashboard
As I write this comment, Gingerbread and below is around 15% of the total population.
2019 UPDATE: Google's dashboard states that only 0.2% of Android users are running Gingerbread (Android 2.3). Around 3% are using Jelly Bean (Android 4.1/4.2/4.3), and 7.6% are running KitKat (Android 4.4).
Generally, companies target a minimum version of KitKat, or SDK 19, for new endeavors. For personal projects, we usually choose Lollipop, or SDK 21, as it brings a number of improvements to the table, such as improved build times.
[2020 UPDATE] You need to base on Android Pie Chart . It is always updated.
here's the link of the dash board:
https://developer.android.com/about/dashboards/index.html
For the record - 2020 April
If you look at the comments, they usually set the min level to 19 since years ago. Right now, it is nonsense (also, some comments are obsolete).
We are looked at the statistics of Google, and they say, "+10% of the devices are KitKat or lower. However, it's tough (if any) to find a company that sells phones for Kitkat.
So, why Kitkat 19 is still popular? Because old smartphones simply don't go away (and they aren't updated).
Then, technically 10% of the market uses Kitkat or lower but that information is mostly useless
From then 10%, how many of them will install your application? Or any new application?. I know a lot of people that are happy with their old-and-rusty phone, but they only use for making calls and watch youtube/browser internet. So, usually, the lower 10% is not part of our target market or the target market of anybody.
Twitter said about it:
minSdkVersion ยท Nov 7, 2016 19
minSdkVersion Apr 23, 2018 21
minSdkVersion Dec 9, 2019 23
When Twitter says API=23, then Twitter is ignoring 25% of the market. It is a huge number. But again, this number means nothing without analysis. Twitter decided that this number is moot because, of the 25% of the users that use an old phone, they are not really in its market share, i.e., people that don't use Twitter on their phones using an application.
So, for the record and as for April 2020.
API = 19 who are you pleasing? Remember, we are 4 years later in comparison with Twitter.
API = 21 is a moderated number.
API = 23 sounds like a rational number.
For example, I run a windows server, and the default browser is Internet Explorer. Do you know how Internet Explorer works in the real world? It doesn't!. It works with google and a few sites, but everything else is broken. And still, developers "support" internet explorer because of the non-existence 6.97% market share (the users exist, but they are not everybody users but intranet users).
Now, if your application is for a government/public interest, then we should stick with the standard or official procedure, and sometimes it could be around API 15 or 16.
For those who are looking for an opinion to refer to, #minSdkVersion updates their Twitter account when they deem it appropriate to start using a higher minimum SDK version. They claim
The minimum SDK version for the practical, rational developer.
As others have mentioned, it's also worth checking the Android distribution dashboard. The full platform version disribution can be found in Android Studio's Create New Project wizard.
UPDATE JULY 2022
This is what Android Studio shows before creating a new Project.
I'm a developer myself. I would look into this from multiple point of view and I would use several factors to begin a project with a particular sdk as minimum.
Beside the chart, that Google is kind enough to publish, which is really helpful and informative and i believe it represents devices around the world.
These are the factors I would take under consideration:
What's my app all about? What kind of people and what kind of age range would attract. Young people tend to keep their gadgets up-to-date.
In which country I'm going to release my app? Not all countries have the same mainstream when it comes to technology.
Does the minimum sdk affects the time or the resources that are going to be used in the app? If having a high sdk as minimum is inversely proportional with the time and the struggle my developers would face in order to make everything compatible, then I would choose a higher sdk, even if I have to exclude a small proportion of users. Let's face it, this is 2016. Technology is running faster than light. Releasing early really matters. In the other hand, if it really doesn't affect that much, then just choose a version that covers most devices.
Security matters as well. Everyday new issues are being patched. Newer version is more secure.
If the idea is powerful, than I would choose as higher as I could. People will follow. Is the truth.
Many functionalities are being deprecated. And usually in older versions. Upgrading from those can be hell.
Can't think of anything else. But if you want my opinion, I would choose API 19 as minimum.
Cheers.
There were only few (~10) percent of users with Gingerbread to download our application from Play Store, so we have decided not to support it anymore. It was about 7 months ago. Froyo and Honeycomb are dead for much longer time.
We would go with Android 4.0 (API 14) as minimum for new projects. There is no real benefit from supporting older version unless you are forced to do so (client requested it, etc.).
Note the new directive from Google around the dropping of support for ICS (sdk 14 and 15). Recommended course of action is to set your minimum to 16. See https://android-developers.googleblog.com/2018/12/google-play-services-discontinuing.html
Note that existing apps will continue to work ok.
I have an Android device, apparently with API Level 10.
I'm developping an Android Application and I need to test it on API level 12.
I don't know much about Android and API levels, so my question is: Can I update my device to a higer API level ? (it says no New version available, aren't hier APIs considered new version?)
(I can't use the Emulators, as they really need a huge amount of ressources to start.)
Alternatively, is it possible to test the following code, on my API Level 10 device ?
UsbManager manager = (UsbManager) this.context.getSystemService(Context.USB_SERVICE);
I have the following warning:
Yes higher API levels = latest releases.
http://en.wikipedia.org/wiki/Android_version_history#Version_history_by_API_level makes the correlation between API and version number (2.3.4).
You should work with a device supporting latest api and high resolution because many of your users might have that and you NEED as a developer to see and test your work on these platforms.
Get yourself a nexus phone, you can upgrade these to the latest Android version.
Android version release : Google releases it --> manufacturers and Telecom Carriers checks and adjust the release before making it available to you. Hence, for old phone, the manufacturers and carriers don't make the effort and you are stuck to old versions.
If you do no want to or if you cannot find a more recent handset, you can install a custom ROM to try to reach API 12. But in any case, if you start developing, you ll need good handset soon.
good luck
You can try to see if there is a custom rom for your device that is of a higher api version. But this won't accurately test your app because there is probably a very good reason that a newer operating system was not made available for your device. As such, your app and the SDKs in the new API will probably not be able to make use of the hardware resources available, and you won't get an accurate representation of your app's performance.
You mentioned you can't use emulators but have you considered Genymotion's emulators? Although it is resource intensive it is better than Google's emulators and is faster than actual devices.
Assuming your using Eclipse ADT. You DONT have to update your device to level or API 12. All you have to do is specify the minimum required SDK, which is API 8 in most Eclipse ADT setups. and set your target SDK to API 12. That way your app will run on devices from API 8 through to API 12 Including you device. FYI the latest API is now 19 (Android 4.4) Hope this helps.
I am a beginner on android programming. I am at the first at all. I wanna learn some important point.
Now, I am installing the programs and platforms which I need to develop Android Apps. On the SDK Manager there are few options to download Android API.
Which one should I prefer? I want to that, my app will run on all android roms and versions like ICS or JellyBean.
Thanks!
In order to support as many users as you can, you should opt for the lowest version API, since apps written for an older version of Android will work for future versions as well (although they may not be optimal). Once you need a feature in a later version, you can increment your minimum SDK version.
I would look through the different SDK versions (e.g. 2.1) and see which features (and/or permissions) you need for your app.
Keep in mind that older phones may not have certain capabilities, and you may not be able to support them. Therefore you should weigh if what you're adding is worth alienating the users you will no longer be able to support. Android provides a table of market share per version.
You mention that you want to support ICS (4.0) and Jellybean (4.1 and 4.2), which together control a little less than 50% of the Android market. It is worth looking into supporting Gingerbread (2.3) as well for another 45%.
Another option of course is to branch your code depending on the user's OS version, but this requires a little more maintenance work. However, if you are supporting pre- and post-Holo-themed versions (ie for the action bar), it may not add that much overhead.
It really depends on your target market, purpose, and familiarity with Android.
Android maintains forward-compatibility which means an app designed for 2.1 for example will work on later versions (in most cases). However there are some features added in later versions which are only supported starting with a certain SDK version.
This page may be helpful for you
I'm starting to broad my developer skills also to the Android development.
I installed all the tools and configurations and every thing seem great, As a default settings I install the 3.2 SDK, but there is not too much docs on that one, mode of what is out there is on the 2.x SDKs.
Is it like IOS, does android have a good backward computability? Can I stay with the 3.x and count on it (with the features that are in the 2.x SDKs) to work on 2.x phones? What are the common version in the Android devices this days? I have lots of newbie develop questions like that, as i want to start from a good starting point and there are lots of materials and tutorials over the web that are not up to date.
Also, does any one know about a good site for this kind of Q&A?
Thank you,
Erez
As of July 5th the version with the largest market share (59.4%) is 2.2 (API Level 8) as shown here
http://developer.android.com/resources/dashboard/platform-versions.html so Consequently I would recommend using that as a starting point unless you are solely focusing on the new honeycomb tablets (<1% market share).
As for backward compatibility, android is completely backward compatible for the most part. Unless of course you use a new feature that is only available starting with a certain API level. Google's Android market is good about only allowing apps that will run on a certain API being visible to that phones user. This is enforced by the API level as recorded in the manifest file that is created with every Android app and set by the developer.
To help you with the API level, the SDK docs show what API a feature/object started with in the upper left hand corner. You can also view the specific changes in each platform and it's corresponding API level at http://developer.android.com/sdk/index.html.
As for a good website to get started I would recommend the developer site at developer.android.com and this website of course. Also the book Android Wireless Application Development by Shane Conder and Lauren Darcey (2 ed) Is very good. (I am not connected with the book just currently reading it). Make sure you get the latest edition.
Hope this helps,
George
Above is good info, but it would be advisable to develop for 2.1 and up at the moment, considering as of this answer's writing, 2.1 makes up 17.5% of the market and 2.2 makes up 59.4% of the market.
http://developer.android.com/resources/dashboard/platform-versions.html
OP should also be advised that version 3.x is specifically for tablets, so that may not be the best choice for a starting developer. My advice is to go with 2.1. Most of the documentation is up to date with that, and you won't have access to things you don't need yet (fragments, tablet-specific things)
Hope this helps!
You can read about application forward and backward compatibility in the docs.
Generally apps are forwards compatible but not backward compatible - new APIs introduced in one version are not available in an older version.
This pie chart shows distribution of devices accessing the Android Market and based on this I would try to target devices using 2.1 or newer to cover most of your users.
Your decision should be based on whether you need a feature introduced in a specific version. For example, if you want to add NFC to your app, you'll need Android 2.3.3 or newer, but otherwise there's no reason to exclude older devices.
I recommend learning about Fragments and using the compatibility package to use them on targets below 3.0. This will make it easier to reuse view elements on both tablet and phone devices. Note that if you only intend to develop for phones, 2.3.4 is the latest phone version of Android at the time of writing. Later this year, 3.0 for tablets will merge with the phone version to provide a unified OS version as with iOS.
Android 3.2 is just released publicly on friday, July 15th. You can start-off with Android 2.3.3 and 3.2 installation and development.
Android applications are mostly forward compatible. (But not always)
The best place to find all your answers is developer.android.com