2

When I post my apk to the Play Store, the app is compatible with 4400+ devices but not compatible with 3000+ including some well known device like Samsung Galaxy S4. I've read from here : https://support.google.com/googleplay/android-developer/answer/1727131?hl=fr that the Google Play Store based his compatible test on manifest file (mainly).

So I add some attribute like required="false" when available but apk compatibility didn't have changed.

Here is the Android Manifest :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="fr.creads.midipile" >

    <uses-permission android:name="android.permission.INTERNET"                 android:required="true"/>
    <uses-permission android:name="android.permission.ACCES_INTERNET"           android:required="true"/>
    <uses-permission android:name="android.permission.ACCESS_LOCATION"          android:required="false"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"   android:required="false" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"     android:required="false"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"     />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"   android:required="false"/>

    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>

    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true"/>


    <application
        android:name="MidipileApplication"
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:logo="@drawable/ab_logo"
        android:label="@string/app_name"
        android:theme="@style/MidipileTheme" >

        <uses-library android:name="com.google.android.maps" ></uses-library>

        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />

        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="xxxxxxxxxxxxxxxxxxxxxxxxxxxx"/>

        <meta-data
            android:name="com.facebook.sdk.ApplicationId"
            android:value="@string/app_id"/>


        <!--android:screenOrientation="portrait"-->
        <activity
            android:name=".activities.HomeActivity"
            android:windowSoftInputMode="adjustPan"
            android:screenOrientation="portrait"
            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="com.facebook.LoginActivity"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:label="@string/app_name" >
        </activity>


        <receiver android:name=".broadcastreceiver.ParticipateNotificationBroadcastReceiver" >

        </receiver>

    </application>

</manifest>

Obviously the Play Store didn't indicate why devices are not compatible (or I'm blind)

UPDATE : add build.gradle sample UPDATE 2 : 31/10/2014: update build.gradle sample

android {
    compileSdkVersion 19
    buildToolsVersion '19.1.0'
    defaultConfig {
        applicationId 'fr.creads.midipile'
        minSdkVersion 11
        targetSdkVersion 20
        versionCode 1
        versionName '1.04'
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            debuggable true
        }
    }
    productFlavors {
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:support-v4:20.0.0'
    compile 'com.google.code.gson:gson:2.3'
    compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.2'
    compile 'com.squareup.retrofit:retrofit:1.6.1'
    compile 'com.squareup.okhttp:okhttp-urlconnection:2.0.0'
    compile 'com.squareup.okhttp:okhttp:2.0.0'
    compile 'com.readystatesoftware.systembartint:systembartint:1.0.3'
    compile 'com.google.android.gms:play-services:6.1.71'
    compile 'com.google.guava:guava:18.0'
    compile 'com.github.johnpersano:supertoasts:1.3.4@aar'
    compile project(':facebook')
    compile project(':simple.facebook-2.1')
}

By the way, I've searched if OPENGL ES VERSION 2 was the issue but apparently not :

As of 2013/12/20, the Android Dashboard shows that approximately 100% of devices now support OpenGL 2.0+ so this answer is no longer relevant. You may simply require OpenGL ES 2.0+ in your manifest.

source: Android Maps API requires openGL es 2

UPDATE 2 : play store informations on APK :

functionalities :

  • android.hardware.LOCATION
  • android.hardware.location.GPS
  • android.hardware.location.NETWORK
  • android.hardware.screen.PORTRAIT
  • android.hardware.TOUCHSCREEN

Authorizations :

  • android.permission.ACCES_INTERNET
  • android.permission.ACCESS_COARSE_LOCATION
  • android.permission.ACCESS_FINE_LOCATION
  • android.permission.ACCESS_LOCATION
  • android.permission.ACCESS_NETWORK_STATE
  • android.permission.INTERNET
  • android.permission.READ_EXTERNAL_STORAGE
  • android.permission.WRITE_EXTERNAL_STORAGE
  • com.google.android.providers.gsf.permission.READ_GSERVICES

I've update play service to use 6.1 but style 4500 devices compatible. Many from Samsung and others (like Galaxy S4 & s5) are not compatible..

UPDATE 3 : by removing <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:required="false"/> I've increased compatible device to 5100

Community
  • 1
  • 1
Hugo Gresse
  • 17,195
  • 9
  • 77
  • 119

3 Answers3

0

If you use the Android Studio, please take look at build.gradle file in your app folder. There is minSdkVersion, which decides compatible with.

bjiang
  • 6,068
  • 2
  • 22
  • 35
  • I've added it to original question. I'm targetting 11+ versions but style having news phones not compatible. I think I'm missing something but cannot find what – Hugo Gresse Oct 31 '14 at 12:17
0

Hey Buddy you are missing the minimum SDK version target sdk and max sdk. add the following to your manifest to target more devices.

 <uses-sdk android:minSdkVersion="integer"
              android:targetSdkVersion="integer"
              android:maxSdkVersion="integer" />
android_Muncher
  • 1,057
  • 7
  • 14
0

Since you have the property : android:glEsVersion="0x00020000" into your AndroidManifest.xml

OpenGL ES 2.0 - This API specification is supported by Android 2.2 (API level 8) and higher. OpenGL ES 2.0 API Class android.opengl.GLES20 - This package provides the interface to OpenGL ES 2.0 and is available starting with Android 2.2 (API level 8).

and like android_Muncher points out, don´t forget to set the android:minSdkVersion and android:targetSdkVersion into your AndroidManifest.xml

Jorgesys
  • 124,308
  • 23
  • 334
  • 268
  • I've already searched for compatibility on OPENGL ES 2.0 : "As of 2013/12/20, the Android Dashboard shows that approximately 100% of devices now support OpenGL 2.0+ so this answer is no longer relevant. You may simply require OpenGL ES 2.0+ in your manifest." Source : http://stackoverflow.com/questions/13714484/android-maps-api-requires-opengl-es-2 – Hugo Gresse Oct 29 '14 at 18:49
  • Is dependencies capable of changing manifest when compiling ? – Hugo Gresse Oct 29 '14 at 18:53
  • Hey Xjet, the dependencies can change the properties at compiling time http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Introduction. – Jorgesys Oct 29 '14 at 18:59