Why my App is not showing up on tablets in Google Play?

39,111

Solution 1

At last adding a special case for Nexus 7 with in <compatible-screens> tag worked for me. As Nexus 7 has tvdpi density

<compatible-screens>
    <!--no small size screens -->


    <!--all normal size screens -->
    <screen android:screenSize="normal" android:screenDensity="ldpi" />
    <screen android:screenSize="normal" android:screenDensity="mdpi" />
    <screen android:screenSize="normal" android:screenDensity="hdpi" />
    <screen android:screenSize="normal" android:screenDensity="xhdpi" />

    <!-- all large size screens -->
    <screen android:screenSize="large" android:screenDensity="ldpi" />
    <screen android:screenSize="large" android:screenDensity="mdpi" />
    <screen android:screenSize="large" android:screenDensity="hdpi" />
    <screen android:screenSize="large" android:screenDensity="xhdpi" />

    <!-- all xlarge size screens -->
    <screen android:screenSize="xlarge" android:screenDensity="ldpi" />
    <screen android:screenSize="xlarge" android:screenDensity="mdpi" />
    <screen android:screenSize="xlarge" android:screenDensity="hdpi" />
    <screen android:screenSize="xlarge" android:screenDensity="xhdpi" />

    <!-- Special case for Nexus 7 -->
    <screen android:screenSize="large" android:screenDensity="213" />

</compatible-screens>

UPDATE:

For xxhdpi devices you can use 480 as an int value

     <screen android:screenSize="normal" android:screenDensity="480" />
     <screen android:screenSize="large" android:screenDensity="480" />
     <screen android:screenSize="xlarge" android:screenDensity="480" />`

Solution 2

This page identifies your problem.

When you use <uses-feature> instead of <uses-permission>, your application won't be filtered out by Market but expects you handle devices not supporting that feature on code level.

For any of the permissions in that page above, you can disable filtering based on the implied feature by explicitly declaring the implied feature explicitly, in a <uses-feature> element, with an android:required="false" attribute. For example, to disable any filtering based on the CAMERA permission, you would add this declaration to the manifest file:

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

However, when you specify <uses-permission>, all devices who do not have access to that feature are filtered.

Solution 3

I belive the key is in your permissions. By saying that your app uses RECEIVE_SMS and READ_PHONE_STATE Google Play uses that to filter out devices that can't do those things (tablets) because it thinks that your app needs to use those permissions in order to work. According to the android developer site:

"To prevent those apps from being made available unintentionally, Google Play assumes that certain hardware-related permissions indicate that the underlying hardware features are required by default. For instance, applications that use Bluetooth must request the BLUETOOTH permission in a element — for legacy apps, Google Play assumes that the permission declaration means that the underlying android.hardware.bluetooth feature is required by the application and sets up filtering based on that feature."

Also, look at this:

Telephony CALL_PHONE android.hardware.telephony CALL_PRIVILEGED android.hardware.telephony MODIFY_PHONE_STATE android.hardware.telephony PROCESS_OUTGOING_CALLS android.hardware.telephony READ_SMS android.hardware.telephony RECEIVE_SMS android.hardware.telephony RECEIVE_MMS android.hardware.telephony RECEIVE_WAP_PUSH android.hardware.telephony SEND_SMS android.hardware.telephony WRITE_APN_SETTINGS android.hardware.telephony WRITE_SMS android.hardware.telephony

You have RECEIVE_SMS and READ_PHONE_STATE so you automatically have android.hardware.telephony. You can fix this by doing

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

All of this is explained in more depth here.

Solution 4

I have to do all three of these things to get it to work for Nexus 7. Once you uploaded your apk, you can verify the setting by first activate the new apk, go to product detail and search for supported devices. If Nexus 7 is not found under "Unsupported devices due to your manifest settings" you are good.

Note: Once you upload your apk, Google Play will translates 213 density to tvdpi. Not sure why is not an option in eclipse manifest tool...

<compatible-screens>
    ....
    <screen android:screenSize="large" android:screenDensity="213" />
</compatible-screens>

<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.telephony" android:required="false" />

Solution 5

Documentation instructs us to avoid using

<compatible-screens>


see here
instead you should use

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


Many of the other answers provided on this page are also effective answers. I have implemented them myself. Thanks everyone.

Share:
39,111
Saqib
Author by

Saqib

Updated on September 02, 2020

Comments

  • Saqib
    Saqib almost 4 years

    I just released my app for phones and tablets but it is not showing up in Google Play for tablets.

    Checked on Nexus 7 and Asus eeeePad

    This is what I have in my manifest file

    <compatible-screens>
        <!--no small size screens -->
    
        <!--Only hdpi and xhdpi for normal size screens -->
        <screen android:screenSize="normal" android:screenDensity="mdpi" />
        <screen android:screenSize="normal" android:screenDensity="hdpi" />
        <screen android:screenSize="normal" android:screenDensity="xhdpi" />
    
        <!-- all large size screens -->
        <screen android:screenSize="large" android:screenDensity="ldpi" />
        <screen android:screenSize="large" android:screenDensity="mdpi" />
        <screen android:screenSize="large" android:screenDensity="hdpi" />
        <screen android:screenSize="large" android:screenDensity="xhdpi" />
    
        <!-- all xlarge size screens -->
        <screen android:screenSize="xlarge" android:screenDensity="ldpi" />
        <screen android:screenSize="xlarge" android:screenDensity="mdpi" />
        <screen android:screenSize="xlarge" android:screenDensity="hdpi" />
        <screen android:screenSize="xlarge" android:screenDensity="xhdpi" />
    </compatible-screens>
    

    uses-sdk tag

    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="11" />
    

    permissions

    <uses-permission android:name="com.android.vending.BILLING" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <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.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.WRITE_CONTACTS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.BROADCAST_STICKY" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    <permission android:name="com.myapp.something.permission.C2D_MESSAGE" android:protectionLevel="signature" />
    

    After explicitly adding uses-feature tag to false it started appearing for Asus eeeePad tablet but still not appearing for nexus 7. Here is what I see in developer console

    This application is only available to devices with these features, as defined in your application manifest. Screen densities: LARGE,MDPI LARGE,HDPI LARGE,LDPI LARGE,XHDPI XLARGE,MDPI XLARGE,HDPI XLARGE,LDPI XLARGE,XHDPI NORMAL,MDPI NORMAL,HDPI NORMAL,XHDPI Required device features

    android.hardware.screen.portrait
    android.hardware.touchscreen
    
  • Saqib
    Saqib almost 12 years
    so whats the difference between <uses-feature> tag and <uses-permission> tag?
  • ninge
    ninge almost 12 years
    See edit: you can use a permission but not use the feature but you have to manually enter the uses-feature=false.
  • Saqib
    Saqib almost 12 years
    After explicitly adding <uses-feature> tag to false it started appearing for Asus eeeePad tablet but still not appearing for nexus 7. Please see the edit
  • Sid Patel
    Sid Patel almost 12 years
    Thanks for this answer. I ran into this problem and could not figure out why my app was not available on the Nexus 7. Following links have more information. plus.google.com/106300001086744879268/posts/Wa9xtQjZHJx code.google.com/p/android/issues/detail?id=34076
  • arjoan
    arjoan almost 12 years
    i had to make this change also to get my app available for nexus 7
  • Inator
    Inator over 11 years
    I tried this, but it removes some of the default supported sizes. How can I just add support for the Nexus 7 while keeping all of the default sizes, or is there a way of adding all sizes (small+) to what was posted above?
  • Saqib
    Saqib over 11 years
    @Inator I don't have small screen support in my app that is why I omitted those. you can add these tags i.e <!-- all small size screens --> <screen android:screenSize="small" android:screenDensity="ldpi" /> <screen android:screenSize="small" android:screenDensity="mdpi" /> <screen android:screenSize="small" android:screenDensity="hdpi" /> <screen android:screenSize="small" android:screenDensity="xhdpi" />
  • Vikram Gupta
    Vikram Gupta about 11 years
    This actually works! I had the same problem where I had used TELEPHONY permission and so google play would not show the app on tablets without a telephony radio. I added the uses-feature element with android:required="false" and now I can view the app on Google play on my tablet.
  • wired00
    wired00 over 10 years
    does the compatible-screens work instead of supports-screens or are both required?
  • Frank Nguyen
    Frank Nguyen almost 10 years
    I think it should be <screen android:screenSize="large" android:screenDensity="tvdpi" />
  • Aritra Roy
    Aritra Roy over 9 years
    A much better answer I think