Though-out ionic 2's development iv been building my app and testing it in the BETA channel of Google Play and everything's been going fine, today I updating to ionic 2 final and passed it to ionic package to build an APK for me...
ionic package build android --profile android --release
I have since uploaded it to Google Play and I'm getting...
A device with API levels in range 17+ is eligible to receive version 76, which is optimised for higher API levels, but actually receives version 3000328 because it has a higher version code. This would occur when Release track containing any of [BETA] and Screen layouts containing any of [small, normal, large, xlarge] and Native platforms containing any of [arm64-v8a, armeabi, armeabi-v7a, x86, x86_64] and Features containing all of [android.hardware.FAKETOUCH, android.hardware.LOCATION, android.hardware.location.GPS, android.hardware.location.NETWORK, android.hardware.screen.PORTRAIT].
A device upgrading from API levels = 16 to API levels in range 17+ would become eligible to receive version 76, which is optimised for higher API levels, but would actually receive version 3000328 because it has a higher version code. This would occur when Release track containing any of [BETA] and Screen layouts containing any of [small, normal, large, xlarge] and Native platforms containing any of [arm64-v8a, armeabi, armeabi-v7a, x86, x86_64] and Features containing all of [android.hardware.FAKETOUCH, android.hardware.LOCATION, android.hardware.location.GPS, android.hardware.location.NETWORK, android.hardware.screen.PORTRAIT].
A device with API levels in range 17+ is eligible to receive version 76, which is optimised for higher API levels, but actually receives version 3000258 because it has a higher version code. This would occur when Release track containing any of [BETA] and Screen layouts containing any of [small, normal, large, xlarge] and Features containing all of [android.hardware.FAKETOUCH, android.hardware.LOCATION, android.hardware.location.GPS, android.hardware.location.NETWORK, android.hardware.screen.PORTRAIT].
A device upgrading from API levels = 16 to API levels in range 17+ would become eligible to receive version 76, which is optimised for higher API levels, but would actually receive version 3000258 because it has a higher version code. This would occur when Release track containing any of [BETA] and Screen layouts containing any of [small, normal, large, xlarge] and Features containing all of [android.hardware.FAKETOUCH, android.hardware.LOCATION, android.hardware.location.GPS, android.hardware.location.NETWORK, android.hardware.screen.PORTRAIT].
Some devices are eligible to run multiple APKs. In such a scenario, the device will receive the APK with the higher version code.
76 is my current production version from 20 Aug 2015 (API Level 16+)
3000258 is an old BETA from Dec (API Level 16+)
3000328 is my latest BETA build from Today (API Level 16+)
I just want to use 3000328, but Google Play won't let me deactivate 3000258, when I do it says...
It is forbidden to downgrade devices which previously used M permissions (target SDK 23 and above) to APKs which use old style permissions (target SDK 22 and below). This occurs in the change from version 3000258 (target SDK 23) to version 76 (target SDK 0).
Any ideas why I can't deactivate 3000258? Thanks
I see that you have listed the API levels that were used (API Level 16+), I am assuming that this is the minSdkVersion but the important attribute to check, and set in this case is the targetSdkVersion.
It's an issue caused by Google/Androids new permission system as of Android 6. Essentially if the app has been released with a targetSdkVersion of 23 there is a newer method of permissions management, that is not backward compatible. Google therefor will not allow you to downgrade the users who currently use the older permissions system, part of sdkVersion 23+, to a lower version.
It seems that the ionic build --release selects the highest available sdk version by default, which may be the reason that you have submitted a version in the past at a higher SDK version without explicitly stating it in your config.xml. For some reason now, your builds are using a lesser sdk version, and resulting in the errors you are seeing.
The quick solution, is to enforce the targetSdkVersion for SDK v23 to ensure that it will pass the activation process. It will, however, mean that only Android 6+ devices can download and use the app.
You can enforce this sdk version config.xml in the root of your Ionic project by adding
<preference name="android-targetSdkVersion" value="23" />
After re-running the build process, double check the android manifest to ensure that it propagates correctly in this format:
<uses-sdk android:minSdkVersion="16"
android:targetSdkVersion="23"
android:maxSdkVersion="23" />
Failing all of that, a StackOverflow user has reported a potential workaround that involves disabling beta testing altogether.
Problem is not about 3000258. There is a problem about 76, probably about Target SDK version of that so you have to focus on 76, solve SDK Target problem and then you can disable 3000258 i quess.
I wrote this just in case if you trying to change 3000258 SDK Version. If you already tried to change SDK Target of 76, Don't mind this answer.
Related
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
I have one version of app uploaded on Playstore with different architecture and now I want to upload my app with new version but getting.
Error:
You can't rollout this release because it doesn't allow any existing users to upgrade to the newly added APKs.
And also getting some warning error like
Device support removed
Warning
Deactivation of this APK will result in your app being available for
new installs on fewer types of devices.
Tip
If this is an unintended change, then retain this APK in the new
release or ensure that your new APKs support all currently supported
devices.
Right now,
Minimum API level : 16
Maximum API level : 26
and Earlier, it was
Minimum API level : 11
Maximum API level : 21
Anyone have any idea how to resolve this error ?
It is because you increased minimum api level from 11 to 16, so some of your potential users with android 16- can not update their application.
Update
I cannot decrease the api level due to some library used Is there any solution to resolve this error
To answer your question, you can upload multiple apk in play store. One with old libraries that support minSdk 11 and one with new libraries and possibly new functionalities that supports minSdk 16. You can find the required guides here
I developed an app a while ago for phones and tablets. A few weeks ago i also create a different APK for Android TV's and uploaded it as beta. The TV app was rejected for some reasons (not relevant here).
A few days ago I created a single APK for both phone and TV, and got the following error while trying to upload it in google play:
- It is forbidden to downgrade devices which previously used M permissions (target SDK 23 and above) to APKs which use old style permissions (target SDK 22 and below). This occurs in the change from version 33 (target SDK 23) to version 35 (target SDK 22).
- A device with API levels in range 21+ is eligible to receive version 13, which is optimized for higher API levels, but actually receives version 15 because it has a higher version code. This would occur when
Release track containing any of [BETA] and Screen layouts containing any of [small, normal, large, xlarge] and Features containing all of [android.hardware.MICROPHONE, android.hardware.screen.LANDSCAPE, android.hardware.screen.PORTRAIT, android.software.LEANBACK].
- A device upgrading from API levels in range 9-20 to API levels in range 21+ would become eligible to receive version 33, which is optimized for higher API levels, but would actually receive version 35 because it has a higher version code. This would occur when
Release track containing any of [BETA] and Screen layouts containing any of [small, normal, large, xlarge] and
Features containing all of [android.hardware.MICROPHONE, android.hardware.screen.LANDSCAPE, android.hardware.screen.PORTRAIT, android.software.LEANBACK].
- Some devices are eligible to run multiple APKs. In such a scenario, the device will receive the APK with the higher version code.
I understood that it was a problem that my tv APK was using targetSDK = 23, while the new APK was using targetSDK = 22.
So now i deactivated the beta APK for TV's, but is still get the following errors:
It is forbidden to downgrade devices which previously used M permissions (target SDK 23 and above) to APKs which use old style permissions (target SDK 22 and below). This occurs in the change from version 33 (target SDK 23) to version 35 (target SDK 22).
Some devices are eligible to run multiple APKs. In such a scenario, the device will receive the APK with the higher version code.
With reference to Requesting Permissions at Run Time:
On all versions of Android, your app needs to declare both the normal and the dangerous permissions it needs in its app manifest. However, the effect of that declaration is different depending on the system version and your app's target SDK level:
You should update your new build if you'll use targetSdkVersion 23:
<uses-sdk android:targetSdkVersion="23" />
I've faced the problem uploading app to Play Store. The old "19" version was available for API versions 10 and above. New "20" version specified maxSDKVersion=22 (not higher Android 5.1).
An error message, when trying to upload "20", says:
"it is forbidden that a device upgrading from API levels in the range
10-22 to API levels in the range of 23+ should downgrade from version
20 to version 19, which could happen if...".
This situation clearly specified in documentation:
...future versions of Android (beyond Android 2.0.1) will no longer
check or enforce the maxSdkVersion attribute during installation or
re-validation. Google play will continue to use the attribute as a
filter, however, presenting users with applications available for
download.
Our application not working properly on Android 6, so we should somehow to prevent installs on those devices.
So, there is an answer from Google support:
...
The error message is stating that if a user updates the Android
version on their device, the configuration of your APKs would cause
them to become ineligible for the version they currently have.
To resolve this issue, always make sure the APK that supports the
higher API level always has a higher version code. For example, if an
APK with API levels 14 - 17 was version 3 then an APK with API level
18 would have to have version 4.
In other cases, you can simply remove the max SDK declaration from
your app’s manifest.
...
And there is no way to add maxSDKVersion limitation in existing app.
There is a line in the AndroidManifest.xml
android:minSdkVersion="10" android:targetSdkVersion="19"
Does it mean that if I include minimum and maximum SDK version in the AndroidManifest.xml file and build the APK using phonegap/cordova CLI (Command Line Inteface),
than a SINGLE APK file generated can be installed on ALL Android Devices ranging from Android 2.3.4 to Android 4.4
I have read posts that developing using Android SDK(native APP) it enables the APP to work on the range of devices.
Is it true for PhoneGap/Cordova generated APK file as well? (Note: I am not planning to use Google Play services for distributing the APP.)
Do we need to generate APK file for each SDK version?
The implications of these two variables is the same for both native apps and PhoneGap/Cordova apps.
minSdkVersion will set the minimum version of Android required to run your application. If a user is running any version below this, they will not be able to install your application (regardless of whether or not you are distributing via the Play Store).
targetSdkVersion specifies the latest version of Android that you have tested for. It will not change who can install your app, but it will change the behavior of your application. For example, if this is less than 14, you won't have an action bar. If it is less than 19, then users running KitKat and above will not see your content in a Chrome-backed WebView (it will be the older WebView implementation).
Generally you just set targetSdkVersion to the latest available version of Android.
Do we need to generate APK file for each SDK version?
No. You need one APK with mindSdkVersion set to the minimum version you support and targetSdkVersion to the latest version of Android you have tested against.
You can specify a maxSdkVersion, which will actually limit the maximum version you support, but you generally should not do this unless you have a good reason to.
android:minSdkVersion is the minimum API level that device needs for run your app.
android:targetSdkVersion is the latest tested API that works with your app, and you should set there the latest API version.
Following useful data about the number of devices running API versions: https://developer.android.com/about/dashboards/index.html?utm_source=ausdroid.net