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

7

39

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
Strickler answered 27/7, 2012 at 16:19 Comment(5)
There does not appear to be anything wrong with that portion of your manifest, so your problem lies elsewhere (e.g., permissions implying hardware feature requirements).Erethism
How long ago did you release your app? If it was not that long ago, then wait some time and then check again, if the market says that your app is compatible it should work.Selfeducated
It has been more than 24 hours nowStrickler
check your uses-feature tags (e.g. if android.hardware.telephone, make sure to set required=false, and also ensure you have <supports-screens android:xlargeScreens="true" />Bartell
I don't have any uses feature tag in the manifest. <compatible-screens> tag is used so no point using <supports-screens>Strickler
S
40

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" />`
Strickler answered 31/7, 2012 at 17:9 Comment(5)
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=34076Bonaventure
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?Gruesome
@Gruesome 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" />Strickler
does the compatible-screens work instead of supports-screens or are both required?Bradlybradman
I think it should be <screen android:screenSize="large" android:screenDensity="tvdpi" />Tarnetgaronne
B
36

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.

Beker answered 27/7, 2012 at 17:14 Comment(2)
i had to make this change also to get my app available for nexus 7Judie
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.James
D
19

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.

Debenture answered 27/7, 2012 at 17:4 Comment(4)
so whats the difference between <uses-feature> tag and <uses-permission> tag?Strickler
See edit: you can use a permission but not use the feature but you have to manually enter the uses-feature=false.Debenture
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 editStrickler
A much better answer I thinkHybridism
C
11

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" />
Casualty answered 17/10, 2012 at 0:15 Comment(0)
S
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.

Stomacher answered 4/8, 2014 at 19:5 Comment(0)
L
4

According to developer.android.com

If the app declares a <compatible-screens> element in the manifest, the element should include attributes that specify all of the size and density combinations for tablet screens that the app supports.

Note that, if possible, you should avoid using the <compatible-screens> element in your app.


Therefore, I do following tasks,

1- REMOVED <compatible-screens> from the manifest

<compatible-screens>
    <!-- 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" />

    <!--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" />

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

</compatible-screens>

2- ADDED <supports-screens> attribute in the manifest

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

3- ADDED android:required="false" attribute in <uses-feature> (as per my application requirement) in the manifest

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

Official Android documentation about Permissions that Imply Feature Requirements

A more detailed explanation about android:required false is present in ATTRIBUTES: android:required false

When you declare android:required="false" for a feature, it means that the application prefers to use the feature if present on the device, but that it is designed to function without the specified feature, if necessary (that is Telephony permission in case of tablets).


By doing the above changes,

MORE THAN 2000 DEVICES were added in the Supported Android Devices list

2000+ devices added

I hope that helps

Linkman answered 2/9, 2016 at 5:32 Comment(0)
B
0

I get help from answer this question.

How to make android Phonegap available for tablets?

Yes. The problem was with permissions. I remove all permissions from AndroidManifest.xml than test the app and add permission one by one when getting missing permission error. Now my app is compatible with android phones as well as tablets.

Bondswoman answered 20/11, 2013 at 7:8 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.