Targeting older mobile devices in 2019 - android

Something doesn't add up:
According to Google Play’s target API level requirements new apps for Android as of June 2019 cannot target Android versions below 8. Starting with August 2019, nothing below version 9.
Yet, according to Distribution dashboard the 9's version devices share is just a bit above 10% while 9 and 8 combined get you to about 30%.
Am I correct to deduce that anyone thinking of creating a new app today (June 2019)
can only reach 30% of his Android audience (via Play Store) and
if s/he doesn't make it before August, only 10% of the whole Android users can be reached?
Apple has a similarly sounding page here, but: 1. it mentions iOS 12 share being above 80% and 2. I don't think built using iOS 12.1 SDK or later really means targeting iOS 12.1 and above.
Current Xcode still lets you target iOS 8.0 (do they still accept it into the App Store?) which still happily runs on 2011 iPhone 4S despite its minuscule market share.

The targetSdkVersion restriction was introduced to prevent app developers from using old apis like permissions to bypass runtime permissions.
An app targeting older api version was always allowed all required permissions at installation time. With the introduction of run time permissions, user has a better understanding and control of permissions in app.
The minSdkVersion is the one which actually affects from which version of Android your app runs.
API Level 21 would do good as it has near to 85% coverage of devices.

The restrictions that the Play Store imposes is on targetSdkVersion. You are confusing that with minSdkVersion. minSdkVersion controls how old of an Android device can run the code, and this is not affected by the Play Store restrictions.

Related

Is it possible to publish apps to Google Play Store that target Android devices back to KitKat?

I am new to developing Android apps, just started learning. Deciding to go with a very simple app (game), to start with, for learning purposes, I did some research on the different versions of Android devices, and found as of May 2019, KitKat (Android 4.4 / API 23) still had about 6% of the total devices (which equated at that time to roughly 172.5 million devices). My thought was this would be a good cutoff/target to build this app.
However, I have since learned that (as of August 1, 2019 for new apps, and November 1, 2019 for updates), Google Play requires a minimum level of Pie (Android 9 / API 28) to be used.
Does this mean that I can not publish an App that supports older devices back to KitKat? Or am I not understanding something?
The targetSdkVersion is completely separate from the minSdkVersion you use as per the Picking your compileSdkVersion, minSdkVersion, and targetSdkVersion blog post.
While Google Play requires that you target a recent version of Android, you can set your minSdkVersion to any value.

In appgyver, How to change app build target to 8.0 (Android)?

In August 1, Google Play requires new apps to target at least Android 8.0 (API level 26). But in appgyver, I notice the latest available version is 4.5.3. Is there any way to upgrade it? Thanks!
I having the same issue, which is the maximum API level which appgyver supports is 21 only. GooglePlay required at least API Level 26 on August 2018 onward.
AppGyver just officially answered this question here.
TL;TR AppGyver is using Crosswalk, an Intel product, to build Android apps, and Intel has shut down Crosswalk over a year ago, now it is not possible for AppGyver to update their Build Service without rewriting the entier Android part, which would cost them too much, Supersonic and Steroids being depreciated, Android is officially abandonned by AppGyver, the Build Service will stay as is for apps that are internally distributed but won't allow to build apps destinated for Play Store.
Edit: I found a solution that allow me to get the app accepted on the Play Store, but app will crash on Android 8.
I then tested to install my app from the Play Store on a Android 6 with success but as we could expect it crashes on Android 8, the edited Target SDK number dupes the Play Store so it lets the APK in, but in the end it hasn't been built with Android 8 capabilities, so it won't work on that version.
All I had to do was to import my APK in APK Icon Editor, go in the Properties tab, change the Target SDK value to 26 (be sure to keep a lower value in the Minimum SDK field as it's the one telling what Android version can actually instal your app, if it's high then older phones won't have access to your app), and click on Pack APK to generate a new signed APK that is accepted by the Play Store!
Its as easy as this:
I then tested to install my app from the Play Store on a Android 6 with success but as we could expect it crashes on Android 8, the edited Target SDK number dupes the Play Store so it lets the APK in, but in the end it hasn't been built with Android 8 capabilities, so it won't work on that version.
Edit: it seems like it also crashes on Android 7 :(
Appgyver is constantly working on their platform and bringing latest updates. hopefully soon this issue will be resolved as well.. try contacting their support

Target API level requirement from late 2018

I don't know if this is a correct place where ask the following:
I have read on the google play developer console that :
In the second half of 2018, Play will require that new apps and app
updates target a recent Android API level. This will be required for
new apps in August 2018, and for updates to existing apps in November
2018. This is to ensure apps are built on the latest APIs optimized for security and performance
and
Google Play will require that new apps target at least Android 8.0
(API level 26) from August 1, 2018, and that app updates target
Android 8.0 from November 1, 2018.
What does this mean? Does this mean that I will not be able to develop applications compatible with versions smaller than 8.0?
If so, how can bug fixings / new features be introduced within existing apps with versions other than 8.0?
This would result in a "death" of all devices with version other than 8.0 ... Or is Google thinking about releasing android oreo for all devices on the market?
*************** EDIT ***************
The doubt arises from this message on my account of google developer console:
The translation is :
Starting from August 2018, the new apps must minimum target Android 8.0.
Starting in November 2018, app updates must target version 8.0
The minumum target is :
An integer designating the minimum API Level required for the
application to run.The Android system will prevent the user from installing the application if the system's API Level is lower than the value specified in this attribute.
Bad interpretation of the message ?
What does this mean?
What it means is, you should ensure you have set targetSdkVersion to 26 in your build.gradle and your application is compatible with Android O behavior changes.
Does this mean that I will not be able to develop application compatible with versions smaller than 8.0?
You can set minSdkVersion lower than 8.0.
This would result in a "death" of all devices with version other than
8.0 ... Or is Google thinking about releasing android oreo for all devices on the market?
The distribution rate for Android O is still around 6%, which means older versions still constitute around 94%. They cannot implement drastic changes for this reason. Older OS version will be still supported until the adaptation for Android O changes drastically. It could be challenging because it involves adaptation from huge number of manufacturers.
If you are uploading your app as your first release, then you must ensure you are compatible with Android O.
For updates to existing app, the deadline is November.
onsole, Android Studio, and Firebase. Start survey
Meet Google Play's target API level requirement
Bad interpretation of the message ?
Actual statement in English from site is:
Google Play will require that new apps target at least Android 8.0
(API level 26) from August 1, 2018, and that app updates target
Android 8.0 from November 1, 2018.
You should first understand the difference between TARGET API and MINIMUM
API Levels.
As a reminder, target API level is different from minimum API level. As the name implies, minimum API level is used to declare the lowest version of Android an app supports. The target API level is technically defined as the version of the operating system an app was tested to work with; but in more practical terms, it's used to define a set of behaviors an app expects from the operating system.
Please follow this link to view the complete source of this information:
https://www.androidpolice.com/2017/12/19/play-store-require-new-updated-apps-target-recent-api-levels-distribute-native-apps-64-bit-support/
Just update your compileSdkVersion and targetSdkVersion to 26 (or better to 28).
And read about minimum api version and target api version. It`s important to understand.
https://developer.android.com/guide/topics/manifest/uses-sdk-element
What does this mean?
its means that you need to set target sdk Android 8.0 (26 API)
Does this mean that I will not be able to develop applications compatible with versions smaller than 8.0?
No it means that the end November your app must compatible with Android O (26 API)
This would result in a "death" of all devices with version other than 8.0
NO
how can bug fixings / new features be introduced within existing apps with versions other than 8.0?
it will support all features introduced within existing apps with versions other than 8.0
is Google thinking about releasing android oreo for all devices on the market?
Nobody knows the future

Getting Android app to run on more devices?

This is a beginner question, but what are the steps needed to get my app to run on more devices? I noticed that my new update (on beta) is running on fewer devices. Do I just need to update the targetminsdk version in build gradle or is there anything else I need to do? I think I should be aiming for minsdkversion 18?
My versions in gradle are here
compileSdkVersion 23
minSdkVersion 21
targetSdkVersion 22
Min sdk version : Is the earliest release of the Android SDK that your application can run on. So this is what you want to change if you want more devices supported for your app.
Target sdk version : The version your application was targeted to run on. Ideally this is because of some sort of optimal run conditions.
Android Developers forum says :
The dashboard for Platform Versions is updated regularly to show the distribution of active devices running each version of Android, based
on the number of devices that visit the Google Play Store. Generally,
it’s a good practice to support about 90% of the active devices, while
targeting your app to the latest version.
For more details, go through : Supporting Different Platform Versions
For API 18 : your app will run on approximately 76.9% of the devices that are active on Google Play Store.
For API 21 : your app will run on approximately 40.5% of the devices that are active on Google Play Store.
Now that is a huge difference, that you may not really want for your app. So you need to weigh your pros and cons of having Latest API support to getting more users. I would infact recommend you to go for API 18 instead of 21, unless you have some very important functionality that necessitates API 21 and above and can't be done without.

Does a max need to be set in android manifest?

My ionic app is targeted 24, min 16, no max in android manifest.
When I run in firebase on devices set to 24 or 25 I get fatal crashes.
Does my app need a max to avoid crashes? Or does that limit it being supported on newer API devices?
Also in Android studio when you first try to set a project and pick a target it tells you that __% of people in the play store use that target so 24 is less than 1%. So if my target is 24 does that mean only 1% of the store will be able to use my app?
Here is my API 23 app crash on a 25 device:
API 24 app crash on a 24 device:
I see you are a little bit confused, let's first clear what each of them means to Android.
android:targetSdkVersion
With this you are telling Android which SDK you are targeting. What is important about this is that it tells the system that SDK level matchs this attribute, the system doesn't need to enable any behaviour to maintain compatibility.
Your app is still able to run on older versions (down to minSdkVersion).
android:minSdkVersion
As the attribute name suggests this is the minium SDK version required in order to run the app, if the device which is trying to install the app has a lower sdk version the system will block the process.
What is important to note is that if you raise the minSdkVersion in an update, all the user which have already installed the app and no loger match this attribute will be able no longer to use the app
android:maxSdkVersion
Again, the attribute name says it all. This is the maxium Sdk version a device can have in order to run the app.
Notice this from the docs:
An application declaring maxSdkVersion="5" in its manifest is
published on Google Play. A user whose device is running Android 1.6
(API Level 4) downloads and installs the app. After a few weeks, the
user receives an over-the-air system update to Android 2.0 (API Level
5). After the update is installed, the system checks the application's
maxSdkVersion and successfully re-validates it. The application
functions as normal. However, some time later, the device receives
another system update, this time to Android 2.0.1 (API Level 6). After
the update, the system can no longer re-validate the application
because the system's own API Level (6) is now higher than the maximum
supported by the application (5). The system prevents the application
from being visible to the user, in effect removing it from the device.
That's it. Check also the DOCS here
Also in Android studio when you first try to set a project and pick a
target it tells you that __% of people in the play store use that
target so 24 is less than 1%. So if my target is 24 does that mean
only 1% of the store will be able to use my app?
Actually not, you have to consider the minium and max in order to find how many % of market will be able to use your app. That's just saying how many people (in %) have that SDK Version.
About the crashes
I am quite sure that the problem is not related to the SDKVersion, maybe you should post some log in order to give a more detailed answer to that.
Hope it helped you :)

Categories

Resources