If I set in the Manifest.xml and try to install the .apk with ecclipse, the install fails with a missing library error showing logcat. Thats ok for me as developer.
But how will be the behaviour in Google Play?
Simply writing a failure to logcat is not useful for normal users. Useful would be if an appropriate error dialog would appear, informing the user about the error, why and how to fix it (In this case, ideally a link to the missing app in Google Play, so the user can install the missing app easily)
Does anyone know, how exactly the error is handled, if a user try to install the .apk via android market (or other market places)?
Is there a way to costumise that handling?
But how will be the behaviour in Google Play?
The app will not show up in the Google Play Store, if the device does not have the firmware library you require. Hence, the user will not have an opportunity to install it.
This is covered in the Filters on Google Play section of the docs.
Based on the uses-library documentation you can use reflection to determine if a particular class is available. I haven't done this myself but here is a blog spot in which reflection is used to determine if the device support's live wallpapers Using Reflection to test if an Android device is using 'Live Wallpapers'.
It must not be very hard to adapt it for other libraries.
Also, from API 7 there is a android:required value for tag that allows the application to be installed from Google Play even if the library is not present in the user's device.
Hope this helps...
Related
Our Wear OS application, which is not a standalone application (it is a companion app of our smartphone app, it cannot be used without the smartphone app) keeps getting rejected by Google Play Policy team for the following reason : "Your application requires phone interaction for the watch version to function." even if we have clearly explained in our Play Store description that it is not a standalone application and cannot work when the smartphone app is not available.
Our application was previously accepted and published on the Play Store but we suspect a Google policy change even if we haven't found it clearly anywhere (we have only found recommendations which encourage standalone apps).
=> Are not-standalone Wear OS apps still allowed for Play Store submission or must our Wear OS app include at least a standalone feature ?
Thanks in advance for your help.
TLDR for those who don't want to read the whole message: I had to set the following flag in the watch app's manifest to get my watch app approved:
<meta-data
android:name="com.google.android.wearable.standalone"
android:value="false" />
The longer story
I don't believe that what they forced me to do makes any sense. My application is semi-independent according to Google's own documentation:
A watch app can be considered as one of the following:
Completely independent of a phone app Semi-independent (a phone app is
not required and would provide only optional features) Dependent on a
phone app If a watch app is completely independent or
semi-independent, it is in the standalone category. You must indicate
this categorization to the Google Play store by setting the value of
this meta-data element to true:
My app requires an initial initialization of 2FA accounts, which can be done from an Android phone or from an iPhone. In the second case the Android phone is not required. Google requested to write a "disclaimer", which I've added to the app's description, but that didn't have any effect, they continued rejecting the app. I've asked three times about what was wrong with the disclaimer, but the best answer I've got was:
As much as I'd like to help, I’m not able to provide any more detail
or a better answer to your question.
I've asked one more time about what's wrong with the disclaimer, didn't get any answer, set 'standalone' flag to false and got approved two days later.
The problem that Google created for me and my users was that going forward installing the watch app would be possible from an Android phone only and not from a watch directly. It means that iPhone users would either need to find an Android device to install the watch app or to use ADB, and I'm sure, the users will hate me for this change.
Once again, an impression is that Android is on its way to self destruction: new policies break the old apps, support doesn't exist and developers are forced to make changes that make customers unhappy.
It's not the first episode of this stupidly, just recently I had to disable GDrive functionality in my Android app because new policies broke the existing logic that worked for years, and all OAuth 2.0 processes that Google suggested to be compliant with the new policies were not feasible for a small company
Here is a fragment of my comms with Google that fell on their deaf ears
I develop an application and its in Alpha Testings stage in play store. I use a couple devices to test it up.
Yesterday I encountered a weird problem after app update. In play store page I get "Your device isn't compatible with this version" message for one of my devices, so can't install an app there. But it works just fine during development, for debug build!
Country settings of play store is not a problem since I allow all countries for testing now.
Update: I was able to install signed apk to the device. The problem is not in a file or code, but in Play Store settings! What else could it be except Country settings?
Any help is highly appreciated!
I was facing the same problem as you. On tablets our application could not be downloaded or even found through search on the Google Play Store. The reason this is happening is because Google Play filters applications based on your device's hardware and software capabilities.
My app had specified CALL_PHONE as one of the required permissions, but in code we handled tablets by checking whether the device had phone capabilities. However, since the permission was declared in the AndroidManifest file, Google Play assumed that only devices with calling capabilities could download and use the application.
The fix was to explicitly tell Google that phone calling is not a required feature:
<uses-feature
android:name="android.hardware.telephony"
android:required="false"/>
The uses-feature segment in the developer guides contains all the relevant information:
Google Play uses the elements declared in your app
manifest to filter your app from devices that do not meet its hardware
and software feature requirements.
By specifying the features that your application requires, you enable
Google Play to present your application only to users whose devices
meet the application's feature requirements, rather than presenting it
to all users.
Maybe your problem is linked to the fact that your "google play services" is not up to date or even installed.
Try check it out here
I found Google Keep from the Google Play on my device.
However, after reinstalling the Android system, I can not find Google keep from the Google Play and it shows that "Your device is not compatible with this version"
I am very confused for this searching result while the same device ran well with this app before.
I can understand there are several ways to install this app on my device again.
A couple of questions confuse me..
How can I check the features that this app may change in the new version? This may cause the reason why I can not find it in the Google Play.
Will that be any possibility to modify my device source code in order to find this app on the Google Play in my device?
Thanks
I just found that shouldnt the permission(feature) issue because I can find and install other apps which require more permissions than Google Keep.
The permissions that have anything to do with hardware are:
record audio (needs microphone)
precise location (GPS)
control vibration
If your phone has these features and runs Android 4.0 and up, it should be compatible.
I see two possible reasons:
After reinstalling you have an older version of Android. If this is the case, check for updates and after updating it should work
Your device model may have been blacklisted because of compatibility issues. In this case, Google may find a solution in the future and Keep will become available.
You can install Keep anyway, sideloading it. You just have to download the .apk from somewhere (Google it and be careful for malware).
I have an app with 100k~ downloads on Play, which I started to develop like a year ago. Back then, it had the default crappy android UI. A month ago, I decided to include the ActionbarSherlock+HoloEverywhere libraries, so it could provide a much better user experience, with the Holo UI. Here comes the problem.
I got a few user reports, that they cannot update, since Play is keep telling them, their device is incompatible with the app. NOTHING changed besides adding and using the above mentioned libraries, so their device SHOULD still be compatible with my app. Here is what I know, and tried so far, including reports from the most helpful user, who cooperates with me, and want to use the app.
his old device broke, so it got replaced, and he couldn't install the updated version
on the new device, he can't install the old versions, which he could on the old device
the mentioned device is an atab5 MTK6577
the minimum API level is currently 8 (Android 2.2)
my app requests the following permissions:
android.permission.ACCESS_FINE_LOCATION
android.permission.ACCESS_NETWORK_STATE
android.permission.INTERNET
the features the device has to got are the following:
android.hardware.LOCATION
android.hardware.location.GPS
android.hardware.TOUCHSCREEN
I found a nice tool (http://codekiem.com/2013/02/13/market-helper/) , which I asked the user to try if he can trick Play to install the app, he did, and the app finally installed
after the installation, he got a new error message, "Missing shared library", so he still couldn't run the app
after some research, I found that some device may not have proper Google Maps api, or something like that, but it can be fixed by adding Google Apis to the apk, by explicitly adding Google Api to the Build path
I sent him the newly compiled apk, the new error message is: "Application not installed"
the user has problem with more apps, not just mine, typically with apps that uses GPS, and I guess Google Maps too, so it may be a device fault
as a side-note, I am using standard MapActivity, not the ActionbarSherlock mapactivity, but since the problem is there for the old, non-holo version of the app too, it shouldn't matter
Is there any way for me, to solve the issue on my end? I dont really care, if he still won't be able to run another apps, if he can use mine. Of course, if all his problems would be solved, that is the best case, but my priority is, can I add something to my apk? Or, what is the problem here? A corrupted Google Maps?
Thanks in advance, cheers
after the installation, he got a new error message, "Missing shared library", so he still couldn't run the app
This will come from some <uses-library> element in your manifest.
but it can be fixed by adding Google Apis to the apk, by explicitly adding Google Api to the Build path
Um, no, that will not work.
Is there any way for me, to solve the issue on my end?
Other than by switching to something like OpenStreetMap, no.
A corrupted Google Maps?
More likely it is a device (or ROM mod) that has pirated versions of various Google apps, such as Google Maps, and therefore did not set up the Maps SDK add-on properly.
When uploading an Android application into the market Google Play determine a list of compatible devices depending of your application manifest settings like for example:
uses-permission
uses-feature
uses-sdk
supports-screens
Until now I discovered I had to tweak my manifest in order to have my app available to more devices only after uploading my app to Google Play.
Is there a way to check device compatibility before to upload it to the market?
There is this "aapt" tool from the SDK mentionned in http://developer.android.com/guide/topics/manifest/uses-feature-element.html that will give you what you are asking.
However, I never used this tool and I'm still believing that uploading a file is the best way to be sure that everything is OK. Sure, it takes a little more time but at least, you're assured to have the final answer.