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.
Related
I have submitted and published an app in the Google Play store. I did not receive any errors when I uploaded my binary. Now, I am receiving reports from some (not all) customers stating that they are getting the following error when installing our App:
"Package file was not signed correctly"
When I try to replicate this error myself (using a Nexus 7 reset to factory settings), however, everything goes smoothly.
This seems to be similar to the issue described in this question, but the accepted answer doesn't seem to apply in this case.
I have seen suggestions to use JDK 6 instead of JDK 7, but answers like this one lead me to believe that this solution is for situations where the keystore was created in an older version of Java. In addition, I am concerned about how resigning a new version with an older version of Java will affect our customers who haven't had problems with the initial installation.
Does it make sense that the version of JDK used for signing the app negatively affects only some customers? If it does, what factors might determine which devices the issue occurs on?
Would changing how I sign the binary (but not the certificate) have any negative impact on our ability to update the app for users who aren't currently having this issue
If the Java version I used to sign the APK isn't the issue, what else could cause an error like this?
Edit:
All of the user's with this problem (or without it), are running Android 4.0 or later. The app does not support earlier versions of Android.
After a little reading around I'm going to take a stab, you need to specify the algorithm explicitly for the JDK7 jarsigner..
Add this to your project's build.xml file:
<presetdef name="signjar">
<signjar sigalg="MD5withRSA" digestalg="SHA1" />
</presetdef>
After a bit more reading it appears that it is about the default algorithm used on the device for the digest, it does appear to vary from device to device with the common algorithm available on all devices being the one specified in the xml above. This is why it fails on some devices, other users have experienced the same thing eg: “Package not signed correctly” appearing for some users
This blog entry also contains some interesting information on apk signing: Android code signing
I am now quite confident that explicitly setting the android specified algorithm for signing will not affect your customers that have already installed and I expect it will resolve your problem for the other customers.
I'm suddenly getting this difference from the previous version when trying to upload a new version of my app to Play:
I use only default string values, most of them hardcoded, as my app only supports one language so far.
Anyway, I haven't changed anything related to locales/languages to this last update.
when googling about this, the only reference I fount was this link. I was using an outdated version of facebook sdk, but updating it didn't brought my Localizatons back... alse I don't use Corona SDK...
how will this affect my app's distribution? Is it like fewer people will have access to it? Or users will get some screens in the wrong language?
I had the opposite effect (like Seth said) after adding the "Google Play Services" library to my project. Maybe you removed this or another library (that had supported all of this languages) from your main project.
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).
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...
I published several free and paid app in the Market. I recently get
several complains from customers about not finding my app in the 2.1
Market. Even if they have bought them before, they can't find it in
the market or their download list after updating to 2.1.
Can anyone tell me what the problem is? My apps only require minimal SDK 3..
Thanks a lot!!
Update:
It looks like that they are not shown because they have copy protection enabled. Is this a bug in the Market?
I am having this difficulty also using my ROM OpenEclair (www.openeclair.org)
This only occurs on 2.1, but if it is a custom ROM - they may run into the trouble that the dev is using a Market from 1.6 instead of 2.1
Another possibility is using a 2.1 Market from a diff phone (such as the Droid Eris's Market on a Dream/Magic)
I think I found the answer and it has to do with recent changes in Google market filters on Jun 1st, 2010. Take a look at the following link:
http://developer.android.com/guide/appendix/market-filters.html
I found in my case that the app was hidden in some phones since I had included the following entry in my manifest:
It is because copy-protection is depreciated. Every build or release needs to be whitelisted by google as secure enough to have copy-protected apps. That way they can "ensure" it wont be copied.
From:
http://developer.android.com/guide/publishing/licensing.html
"Replacement for copy protection
Android Market Licensing is a flexible, secure mechanism for controlling access to your applications. It effectively replaces the copy-protection mechanism offered on Android Market and gives you wider distribution potential for your applications."
Use the licensing instead in order to hit a larger audience or customer base.