I have a user with an LG G3 running Android 5 Lollipop whose Google Play 
store claims that my app is not compatible with his device, and so he 
cannot download the app from the Google Play Store.

As you can see here, the LG G3 family of devices are and were all 
compatible with my APK:

<https://lh3.googleusercontent.com/-haqWuRmyD70/VxAMVHgKhPI/AAAAAAAAL8k/RC2Bvfku5I8srJI8yaedpt-gkLYl1r7_ACLcB/s1600/12992313_10153458844096674_1931765807_n.png>

I did some digging, apparently LG G3 users are also having 
compatibility/filtering issues with Clash of Clans.

It turns out (and I kid you not) the device has an unorthodox screen 
resolution and undocumented screen density "640" that ostensibly is causing 
it to get filtered even though the Google Play Store UI has it listed as 
compatible:
http://stackoverflow.com/questions/25221643/app-not-visible-on-google-play-for-qhd-lg-g3

It's not in the documented list, and it's "blacklisted by default":
http://developer.android.com/guide/practices/screens_support.html

>From the aforementioned SO post, you have to manually add the screen 
density to the AndroidManifest using the compatible-screens tag 
(previously, my "vanilla" AndroidManifest did not have supports-screens 
tags and it also did not have compatible-screens tags).

What IS this crap?!

So I came up with what should be the most "permissive" screen resolution 
configuration possible (because my app is a 3D game that is actually 
resolution-independent, and so it should be able to run on any 
size/density/resolution screen):

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

    <compatible-screens>

        <screen
            android:screenSize="small" />
        <screen
            android:screenDensity="ldpi"
            android:screenSize="small" />
        <screen
            android:screenDensity="mdpi"
            android:screenSize="small" />
        <screen
            android:screenDensity="hdpi"
            android:screenSize="small" />
        <screen
            android:screenDensity="xhdpi"
            android:screenSize="small" />
        <screen
            android:screenDensity="280"
            android:screenSize="small" />
        <screen
            android:screenDensity="360"
            android:screenSize="small" />
        <screen
            android:screenDensity="420"
            android:screenSize="small" />
        <screen
            android:screenDensity="480"
            android:screenSize="small" />
        <screen
            android:screenDensity="560"
            android:screenSize="small" />
        <screen
            android:screenDensity="640"
            android:screenSize="small" />

        <screen
            android:screenSize="normal" />
        <screen
            android:screenDensity="ldpi"
            android:screenSize="normal" />
        <screen
            android:screenDensity="mdpi"
            android:screenSize="normal" />
        <screen
            android:screenDensity="hdpi"
            android:screenSize="normal" />
        <screen
            android:screenDensity="xhdpi"
            android:screenSize="normal" />
        <screen
            android:screenDensity="280"
            android:screenSize="normal" />
        <screen
            android:screenDensity="360"
            android:screenSize="normal" />
        <screen
            android:screenDensity="420"
            android:screenSize="normal" />
        <screen
            android:screenDensity="480"
            android:screenSize="normal" />
        <screen
            android:screenDensity="560"
            android:screenSize="normal" />
        <screen
            android:screenDensity="640"
            android:screenSize="normal" />

        <screen
            android:screenSize="large" />
        <screen
            android:screenDensity="ldpi"
            android:screenSize="large" />
        <screen
            android:screenDensity="mdpi"
            android:screenSize="large" />
        <screen
            android:screenDensity="hdpi"
            android:screenSize="large" />
        <screen
            android:screenDensity="xhdpi"
            android:screenSize="large" />
        <screen
            android:screenDensity="280"
            android:screenSize="large" />
        <screen
            android:screenDensity="360"
            android:screenSize="large" />
        <screen
            android:screenDensity="420"
            android:screenSize="large" />
        <screen
            android:screenDensity="480"
            android:screenSize="large" />
        <screen
            android:screenDensity="560"
            android:screenSize="large" />
        <screen
            android:screenDensity="640"
            android:screenSize="large" />

        <screen
            android:screenSize="xlarge" />
        <screen
            android:screenDensity="ldpi"
            android:screenSize="xlarge" />
        <screen
            android:screenDensity="mdpi"
            android:screenSize="xlarge" />
        <screen
            android:screenDensity="hdpi"
            android:screenSize="xlarge" />
        <screen
            android:screenDensity="xhdpi"
            android:screenSize="xlarge" />
        <screen
            android:screenDensity="280"
            android:screenSize="xlarge" />
        <screen
            android:screenDensity="360"
            android:screenSize="xlarge" />
        <screen
            android:screenDensity="420"
            android:screenSize="xlarge" />
        <screen
            android:screenDensity="480"
            android:screenSize="xlarge" />
        <screen
            android:screenDensity="560"
            android:screenSize="xlarge" />
        <screen
            android:screenDensity="640"
            android:screenSize="xlarge" />
    </compatible-screens>

I did this, going against Google's recommendation (I actually agree with 
Google's recommendation) because I really need my app to run on LG G3 
devices:

*Caution:* Normally, *you should not use this manifest element*. Using this 
> element can dramatically reduce the potential user base for your 
> application, by not allowing users to install your application if they have 
> a device with a screen configuration that you have not listed. You should 
> use it only as a last resort, when the application absolutely does not work 
> with specific screen configurations. Instead of using this element, you 
> should follow the guide to Supporting Multiple Screens 
> <http://developer.android.com/guide/practices/screens_support.html> to 
> provide scalable support for multiple screens using alternative layouts and 
> bitmaps for different screen sizes and densities.
>

However, when I upload the new APK to the Google Play Store, I now see that 
some (by some, I mean hundreds) devices are getting filtered (with no 
specified DPI):

<https://lh3.googleusercontent.com/-fIIwkKe4U9w/VxARY5iVMXI/AAAAAAAAL80/bfodDCP9Aj4-BC-UCoB73gHN52OUB7AxgCLcB/s1600/Screenshot%2B2016-04-14%2B14.52.57.png>

I even tried adding screen tags for each screenSize without any 
screenDensity (e.g. <screen android:screenSize="large" />) to 
compatible-screens, despite my Android Studio IDE complaining that these 
tags needed to have screenDensity, but it did not work.

How can I distribute my app to LG G3 users using Google Play Store -- 
without filtering _other_ devices without specific screen densities?

In my opinion, there should not be undocumented screenDensity tags that are 
required -- and a permissive configuration shouldn't blacklist devices by 
default -- in other words, I should be able to distribute my app with a 
vanilla manifest that does not contain any special screen-related tags, and 
my app should run on all screen resolutions/sizes by default. Moreover, 
when Google Play Store says a device is compatible in the UI, it should not 
get filtered. These behaviors are creating real headaches for developers 
like Clash of Clans and myself.

-- 
You received this message because you are subscribed to the Google Groups 
"Android Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/android-developers.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/android-developers/cc4b5741-b2ef-4bdd-aa1e-d557b9729c6d%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to