user2244705
user2244705

Reputation: 381

App not compatible with the device I use to develop it?

I developed and tested my app using various phones and tablets emulators, and 4 real devices : Samsung Galaxy Ace (GT-I8160P) , Samsung Galaxy Tab 2 (GT-P5110 and GT-P3110) and a Storex M977. After 5 months of work and tests, the App works fine on all these devices. So I uploaded it on Google Play. But Google Play indicates that it's not compatible with my tablets. I can't install it using Google Play on my Galaxy Tabs...

I can't figure out what is the problem. I added support-screens section without success. I was a bit desperate so I also added these uses-features with required="false" : GPS, NETWORK, TELEPHONY, WIFI, LOCATION, TOUCHSCREEN even if the app worked fine without these uses-features. Same result. I also removed "TargetSdk". Google Play says that my app is compatible with 2339 devices including some Galaxy Tabs, but not with my tabs. Only the Galaxy Ace can install it from Google Play.

Here is my manifest file (I just replaced package original package name by fr.test.app for confidentiality reasons). What I'm doing wrong ?

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="fr.test.app"
android:versionCode="7"
android:versionName="1.2" >

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

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


<uses-feature android:name="android.hardware.WIFI" android:required="false" />
<uses-feature android:name="android.hardware.GPS" android:required="false" />
<uses-feature android:name="android.hardware.TELEPHONY" android:required="false" />
<uses-feature android:name="android.hardware.camera.front" android:required="false" />
<uses-feature android:name="android.hardware.camera" android:required="false"/>
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
<uses-feature android:name="android.hardware.LOCATION" android:required="false" />
<uses-feature android:name="android.hardware.NETWORK" android:required="false" />
<uses-feature android:name="android.hardware.TOUCHSCREEN" android:required="false" />

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />  
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.CAMERA.FRONT"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>

<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<permission android:name="fr.test.app.permission.C2D_MESSAGE" 
    android:protectionLevel="signature" />
<uses-permission android:name="fr.test.app.permission.C2D_MESSAGE" />



<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    >


    <receiver
        android:name="com.google.android.gcm.GCMBroadcastReceiver"
        android:permission="com.google.android.c2dm.permission.SEND" >
        <intent-filter>
            <!-- Receives the actual messages. -->
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <!-- Receives the registration id. -->
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
            <category android:name="fr.test.app" />
        </intent-filter>
    </receiver>
    <service android:name=".GCMIntentService" />      

    <receiver 
        android:name=".OnBootReceiver" 
        android:enabled="true" 
        android:exported="false" android:label="OnBootReceiver"> 
        <intent-filter> 
            <action android:name="android.intent.action.BOOT_COMPLETED" /> 
            <action android:name="android.intent.action.MAIN" />
        </intent-filter> 
    </receiver> 
    <receiver  
        android:process=":remote" 
        android:name="fr.test.app.Alarm">           
    </receiver>        
    <receiver  
        android:process=":remote" 
        android:name="fr.test.app.CamAlarm">            
    </receiver>        
    <receiver android:name=".MyAdmin" android:permission="android.permission.BIND_DEVICE_ADMIN">  
        <meta-data android:name="android.app.device_admin" android:resource="@layout/policies">  
            <intent-filter>  
                <action android:name="android.app.action.DEVICE_ADMIN_ENABLED">  
                </action>

            </intent-filter>  
        </meta-data>        
    </receiver>
    <service 
        android:name=".BbSvc" android:enabled="true" 
        android:exported="false" 
    />         

    <service 
        android:name=".WpsLoc" android:enabled="true" 
        android:exported="false"
    />

    <service 
        android:name=".Cam" android:enabled="true" 
        android:exported="false"
    />

    <service 
        android:name=".MniRec" android:enabled="true" 
        android:exported="false"
    />

    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" 
        android:configChanges="keyboardHidden|orientation">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" /> 
        </intent-filter>
    </activity>
    <activity
        android:name=".reminder"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <!--
            <category android:name="android.intent.category.LAUNCHER" /> 
             <category android:name="android.intent.category.DEFAULT" /> -->
        </intent-filter>
    </activity>
    <provider android:name="fr.test.app.AndroidProvider"
          android:authorities="fr.test.app.AndroidProvider" 
          android:exported="false"/> 
</application>

Upvotes: 6

Views: 2788

Answers (4)

marmor
marmor

Reputation: 28199

In some cases Google Play will tell you why the device is not compatible:

  1. Open Google Play on your desktop computer: https://play.google.com/store
  2. Navigate to your app, and click the Install button
  3. Open the dropdown of devices, and see if there's a summary below the incompatible device:

screenshot

Upvotes: 0

Ayaz Alifov
Ayaz Alifov

Reputation: 8598

<uses-feature> attributes are case-sensitive, you need to write them with small letters. In addition to what you already have, I would add:

<uses-feature android:name="android.hardware.telephony.cdma" android:required="false"/>
<uses-feature android:name="android.hardware.telephony.gsm" android:required="false"/> 
<uses-feature android:name="android.hardware.location.gps" android:required="false"/>
<uses-feature android:name="android.hardware.location.network" android:required="false"/>

Upvotes: 1

CompEng
CompEng

Reputation: 7376

I think the problem is vibrate permission.Are you sure your device has vibrate ?

Upvotes: 0

Slynk
Slynk

Reputation: 527

For future reference to anyone stumbling upon this, Android has a great guide on permissions and filtering. This includes a complete list of implied hardware features when using certain permissions. (It's at the bottom.)

http://developer.android.com/guide/topics/manifest/uses-feature-element.html

This is either a new addition to the documentation or just really hard to find. XD

Upvotes: 1

Related Questions