I developed a wearable app, worked fine on my devices (Nexus 5, Samsung Gear Live and Moto 360) and put on playstore. However, when I browse the app on PlayStore, it said "No eligible devices for app install".
These are the permissions:
Phone:
<uses-feature
android:name="android.hardware.type.watch"
android:required="false" />
<uses-permission android:name="android.permission.BODY_SENSORS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE" />
Wear:
<uses-feature
android:name="android.hardware.type.watch"
android:required="false" />
<uses-permission android:name="android.permission.BODY_SENSORS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
I already tried this:
<uses-feature
android:name="android.hardware.type.watch"
android:required="true" />
For both apps, still no luck. How to solve this problem? Thanks.
Edit: if you want to try the app, here is the link
https://play.google.com/store/apps/details?id=com.sleepalert.heartrate
Edit 2:
For wear, I used this pair
minSdkVersion 20
targetSdkVersion 21
For mobile, I used this (those are defaults when I generated my project)
minSdkVersion 17
targetSdkVersion 21
Edit 3: after I remove the GET_TASKS permission as suggested, the app can be installed on my device running LolliPop 5, but not on my friend LolliPop 5.1, which is annoying since the newer one is supposed to be backwards compatible. Then if I change targetSdk to 22, it works on both. So in all, it's fine now. Hope helpful to somebody facing this crazy mess.
it seems that my phone is also not compatible. i would suggest you try to check if the app is avaliable in every country or has any restriction (being still in beta we should have acces to it ,thought), and check if all the permissions are necessary , could be that one of them , like GET_TASKS, wich is deprecated ( developer.android.com/reference/android/… ) could be blocking.
Related
Today I noticed on PlayStore console that some of Google Devices like Google Pixel 4 XL, Pixel 4a etc are not supported for my app. (My app is Cordova based)
The message for not supporting the device is Doesn't support framework version: between 21 and 31
I am not sure what this message mean. I am able to run my app app on same device emulator (Pixel 4 XL Android 12).
Here is the image for better understanding.
Here is my minSDK, targetSDK, maxSDK etc
minSdkVersion 21
targetSdkVersion 31
maxSdkVersion 31
compileSdkVersion 31
Manifest permission and features
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.front" android:required="false" />
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
<uses-permission android:name="android.permission.USE_BIOMETRIC" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CAMERA" android:required="false" />
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.hardware.location" />
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.front" android:required="false" />
How to fix this issue?
maxSDKVersion was the issue.
My build.gradle has the maxSDKVersion = 31. Because of that PlayStore was not pushing my app to users with Android 12 (SDK version 32). So I just removed the maxSdkVersion 31 from build.gradle and it worked.
What was the confusion?
I did not realize that Android 12 has two SDK version.
31 (Android 12)
32 (Android 12L)
Also in my opinion the error message on PlayStore Device Catalog was vague.
Google Play Support Team:
I contacted Google Play Store support team as well. They were able to locate the issue. They took 48 hours to respond (They usually take 24-72 hours). So it is another a good option for Android developers to reach out to Google Play Support team for PlayStore issues.
How PlayStore shows your app to users?
AFAIK: Google PlayStore filters application based on AndroidManifest.xml and build.gradle
So if your app is not compatible or visible to some devices. Then you should start looking into your AndroidManifest and build.gradle file.
For example if you defined android.hardware.camera.front as then will filter out your application for devices that do not have front camera.
I am trying to scan for Bluetooth LE devices in Android with Java. Everything worked fine and I released an update and on fresh installs it does not work. I went through every weird and funcky permission related to BLE on Android inclusive of ACCESS_FINE_LOCATION permissions.
Deeply reviewed the following:
https://developer.android.com/guide/topics/connectivity/bluetooth/permissions
I can’t see what I’m doing wrong:
My app works on older versions of Android, with a fresh install, on an S7 with Android 8.0.
does not work on Samsung S9 and S10+ running Android 9.0 and 11.0, respectively.
Location permissions is enabled. I can see this programmatically and via settings. Picture below
Screenshot of Location enabled on non-scanning S9 with Android 9.0
I can reproduce the same issue with this independent code base https://github.com/PunchThrough/ble-starter-android.
I thought I was crazy but the above code base is does the same thing for Android 10 and has all the same permissions my app has. with the same problematic results. I’m guessing this is happening for others.
28sec video of issue:
https://youtu.be/PzSZ0RnuORQ
What am I not seeing? What changed?
UPDATE WITH PERMISSIONS:
<!-- To auto-complete the email text field in the login form with the user's emails -->
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.BLUETOOTH"
android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"
android:maxSdkVersion="30" />
-->
<uses-permission android:name="android.permission.BLUETOOTH_SCAN"
android:usesPermissionFlags="neverForLocation" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
I've andorid appplication that has minSdkVersion 15 and targetSdkVersion 28 but when publish on Google Play it gives message "Your Device isn't compatible with this version" on Android 4.4.2 which shall have API 19 – 20 according to Android version history. Now what I do need to know is how to analyze the reason and how to approach to fix this situation.
My application works fine on debug and release editions on that Android 4.4.2 device
Edit:
I've found the FEATURE_CONNECTION_SERVICE is available only on API 21, How do I find the exact feature that is not work, is it a package I use inside my app or a permission tag, my manifest has theses permissions
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.READ_PROFILE" />
READ_PHONE_NUMBERS is only available in API 26.
You can find all the API levels here: https://developer.android.com/reference/android/Manifest.permission
This question have a lot of responses already but none of it helps me
I created an Android app and it says that I can't install it on tablet. If I run project from Android Studio on tablet it works perfectly.Also it doesn't find the app by name only on the tablet.
On desktop when open my app's page:
On tablet when open my app's page using a direct link:
My tablet has Android 4.4.2
in app gradle file:
minSdkVersion 16
targetSdkVersion 23
in app manifest I am using:
<!--for IMEI -> is not a must to have gsm-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-feature
android:name="android.hardware.telephony"
android:required="false" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!--is not a must to have autofocus or even camera-->
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature
android:name="android.hardware.camera"
android:required="false" />
<uses-feature
android:name="android.hardware.camera.autofocus"
android:required="false" />
<!--to support all screens-->
<supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true" />
"For your app to be showcased in the 'Designed for tablets' list in the Play Store, you need to upload at least one 7-inch and one 10-inch screenshot. If you previously uploaded screenshots, make sure to move them into the right area below." This can be found when you are setting the distribution for your app on google play. If you do not provide a screenshot for this screen, Google will set your app just for phones.
Does your tablet have gps? If not you should probably add:
<uses-feature android:name="android.permission.ACCESS_FINE_LOCATION"
android:required="false" />
And also try adding xlargeScreens to true.
Check if your tablet is set in supported devicess.
Go to Play Dev Console, then click on APK, then under supported devices click 'see list' and navigate to Samsung to check if your device is set.
Alternatively in same APK section click on your current app version and in popup, check if your language (and region) are supported in Localizations section.
Both cases might checkout to be OK, but never hurts to check :)
I am the developer of a rather popular game published on Android Play Store. Until just the latest version, most devices, if not all, were able to download and enjoy this game. However with this latest version, a lot of older devices (~2 years old?) have started seeing the game as "incompatible" with their device.
I diffed the manifest files of the two versions, and the only difference that pops up is the change to android:versionName, android:versionCode.
I related thread suggested that this might be because the APK might be too big for the devices. While it is true that we do have the APK sitting at ~49 mb, it only grew from 48.66 -> 48.68 this version, so I find it hard to believe that this is the reason.
The list of incompatible devices is quite extensive but here are some of the standouts..
galaxy nexus
samsung galaxy tab 10.1
Samsung Galaxy Tab 7.7
eeepad asus transformer tf101
Motorola XOOM
Acer Iconia Tab A700
This list is directly from our (former?) customers, but I have verified this on a Galaxy tab 10.1, and Transformer. Tab 2 and Nexus 7 are able to see it, if that helps.
Update: These devices are shown as compatible in the developer console.
Have there been any recent changes in the way these things are decided? Is there any service which tells us why the app is said to be incompatible?
The permissions section of my app is below
<permission android:name="com.nubee.japanlife.permission.C2D_MESSAGE" android:protectionLevel="signature"/>
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="com.nubee.japanlife.permission.C2D_MESSAGE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="com.android.vending.BILLING" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="7"/>
As I can see you have lots of permissions in your application which in most devices / tablets won't let you to install it via Play Store. Depending on what is actually doing your application and in what kind of device (phone / tablet) it will be used in most cases you should consider using for example :
<uses-feature
android:name="android.hardware.telephony"
android:required="false" />
First of all it's just an example! I am doing that in one of my apps where I am letting the user call certain numbers, that's why I need TELEPHONY permission, but it's not neccessary for my app. That's why I am using use_feature with required=false.
Hope this helps you!