Why does the Google Play store say my Android app is incompatible with my own device?

129,779

Solution 1

The answer appears to be solely related to application size. I created a simple "hello world" app with nothing special in the manifest file, uploaded it to the Play store, and it was reported as compatible with my device.

I changed nothing in this app except for adding more content into the res/drawable directory. When the .apk size reached about 32 MB, the Play store started reporting that my app was incompatible with my phone.

I will attempt to contact Google developer support and ask for clarification on the reason for this limit.

UPDATE: Here is Google developer support response to this:

Thank you for your note. Currently the maximum file size limit for an app upload to Google Play is approximately 50 MB.

However, some devices may have smaller than 50 MB cache partition making the app unavailable for users to download. For example, some of HTC Wildfire devices are known for having 35-40 MB cache partitions. If Google Play is able to identify such device that doesn't have cache large enough to store the app, it may filter it from appearing for the user.

I ended up solving my problem by converting all the PNG files to JPG, with a small loss of quality. The .apk file is now 28 MB, which is below whatever threshold Google Play is enforcing for my phone.

I also removed all the <uses-feature> stuff, and now have just this:

<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" />

Solution 2

I ran into this as well - I did all of my development on a Lenovo IdeaTab A2107A-F and could run development builds on it, and even release signed APKs (installed with adb install) with no issues. Once it was published in Alpha test mode and available on Google Play I received the "incompatible with your device" error message.

It turns out I had placed in my AndroidManifest.xml the following from a tutorial:

<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.CAMERA" />

Well, the Lenovo IdeaTab A2107A-F doesn't have an autofocusing camera on it (which I learned from http://www.phonearena.com/phones/Lenovo-IdeaTab-A2107_id7611, under Cons: lacks autofocus camera). Regardless of whether I was using that feature, Google Play said no. Once that was removed I rebuilt my APK, uploaded it to Google Play, and sure enough my IdeaTab was now in the compatible devices list.

So, double-check every <uses-feature> and if you've been doing some copy-paste from the web check again. Odds are you requested some feature you aren't even using.

Solution 3

I have experienced this problem too while developing an application for a customer that wanted to have videos offline available from their application. I have written a blogpost about why the app I worked on for months wouldn't show up in the play store for my device (post can be found here). I found the same as @Greg Hewgill found: Cache partition limitations on some devices.

The journey didn't stop for me there. The customer wanted to have these videos in the application and didn't want the quality of the video to be decreased. After some research I figured out that using expansion files was the perfect solution to our problem.

To share my knowledge with the Android community I held a talk at droidconNL 2012 about expansion files. I created a presentation and sample code to illustrate how easy it can be to start using expansion files. For any of you out there wanting to use expansion files to solve this problem feel free to check out the post containing the presentation and the sample code

Solution 4

You might want to try and set the supports-screens attribute:

<supports-screens
    android:largeScreens="true"
    android:normalScreens="true"
    android:smallScreens="true"
    android:xlargeScreens="true" >
</supports-screens>

The Wildfire has a small screen, and according to the documentation this attribute should default to "true" in all cases, but there are known issues with the supports-screens settings on different phones, so I would try this anyway.

Also - as David suggests - always compile and target against the most current version of the Android API, unless you have strong reasons not to. Pretty much every SDK prior to 2.2 has some serious issue or weird behavior; the latter SDK's help to resolve or cover up a lot (although not all) of them. You can (and should) use the Lint tool to check that your app remains compatible with API 4 when preparing a release.

Solution 5

Finlay, I have faced same issue in my application. I have developed Phone Gap app for android:minSdkVersion="7" & android:targetSdkVersion="18" which is recent version of android platform.

I have found the issue using Google Docs

May be issue is that i have write some JS function which works on KEY-CODE to validate only Alphabets & Number but key board has different key code specially for computer keyboard & Mobile keyboard. So that was my issue.

I am not sure whether my answer is correct or not and it might be possible that it could be smiler to above answer but i will try to list out some points which should be care while we are building the app.I hope you follow this to solve this kind of issue.

  • Use the android:minSdkVersion="?" as per your requirement & android:targetSdkVersion="?" should be latest in which your app will targeting. see more

  • Try to add only those permission which will be use in your application and remove all which are unnecessary .

  • Check out the supported screen by application

    <supports-screens 
    android:anyDensity="true"
    android:largeScreens="true"
    android:normalScreens="true"
    android:resizeable="true"
    android:smallScreens="true"
    android:xlargeScreens="true"/>
    
  • May be you have implement some costume code or costume widget which couldn't able to run in some device or tab late so before writing the long code first try to write some beta code and test it whether your code will run in all device or not.

  • And I hope Google will publish a tool which can validate your code before the upload the app and also says that due to some specific reason we are not allow to run your app in some device so we can easily solve it.

Share:
129,779
Greg Hewgill
Author by

Greg Hewgill

Software geek. Twitter: @ghewgill

Updated on December 10, 2020

Comments

  • Greg Hewgill
    Greg Hewgill over 3 years

    I am hesitant to ask this question, because it appears as though many people have a similar problem and yet I have found no solution that solves my particular instance.

    I have developed an Android app (link to the actual app) and have uploaded it to the Play store. The Play store says

    "This app is incompatible with your XT Mobile Network HTC HTC Wildfire S A510b."

    Of course that is the phone on which I developed the app, so it ought to be compatible. Some people with other devices say that it reports compatible, others say it reports incompatible, but I can find no trend. (Apparently I don't know very many people with Android devices.)

    I have tried the following:

    • moving a large-ish file out of the res/raw directory as suggested by this answer. The only file in there was a ~700 kB text file, but I moved it to assets/ with no apparent change.

    • adding the following two feature assertions:

      <uses-feature android:name="android.hardware.faketouch" />
      <uses-feature android:name="android.hardware.touchscreen" android:required="false" />
      

      thinking that maybe my phone doesn't claim to support the usual android.hardware.touchscreen feature, but again, with no apparent change.

    When uploading the APK to the Play store, the only filter that it reports as active is the android.hardware.faketouch feature.

    The following is the output of aapt dump badging bin/NZSLDict-release.apk:

    package: name='com.hewgill.android.nzsldict' versionCode='3' versionName='1.0.2'
    sdkVersion:'4'
    targetSdkVersion:'4'
    uses-feature:'android.hardware.faketouch'
    uses-feature-not-required:'android.hardware.touchscreen'
    application-label:'NZSL Dictionary'
    application-icon-160:'res/drawable/icon.png'
    application: label='NZSL Dictionary' icon='res/drawable/icon.png'
    launchable-activity: name='com.hewgill.android.nzsldict.NZSLDictionary'  label='NZSL Dictionary' icon=''
    main
    other-activities
    supports-screens: 'small' 'normal' 'large'
    supports-any-density: 'true'
    locales: '--_--'
    densities: '160'
    

    and for completeness, my manifest file:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.hewgill.android.nzsldict"
          android:versionCode="3"
          android:versionName="1.0.2">
        <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="4" />
        <uses-feature android:name="android.hardware.faketouch" />
        <uses-feature android:name="android.hardware.touchscreen" android:required="false" />
        <application android:label="@string/app_name"
            android:icon="@drawable/icon">
            <activity android:name="NZSLDictionary"
                      android:label="@string/app_name">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <activity android:name=".WordActivity" />
            <activity android:name=".VideoActivity" />
            <activity android:name=".AboutActivity" />
        </application>
    </manifest> 
    

    In the "Device Availability" section of the Play store, I can see that all the HTC devices, including the Wildfire S, are supported except for "G1 (trout)" and "Touch Viva (opal)", whatever those are. Actually I see that both "Wildfire S (marvel)" and "Wildfire S A515c (marvelc)" are listed as supported, but my "Wildfire S A510b" is not specifically mentioned. Can this sort of sub-model identifier matter that much? I have been able to download several other apps from Google Play to my phone with no problems.

    The only thing I haven't done at this point is wait 4-6 hours after uploading the latest version (as in this comment) to see whether it still says it's incompatible with my phone. However, the Play store page currently shows 1.0.2 which is the latest I have uploaded.