2

I have some problems with Android Market filtering system. I have been reading the documentation about Android Market Filters in developer.android.com, and I suppose the problem is related with screen or density restrictions.

The manifest of my application contains the following:

  • uses-permission ACCESS_FINE_LOCATION
  • uses-permission INTERNET
  • uses-permission READ_PHONE_STATE
  • uses-permission SEND_SMS
  • uses-permission ACCESS_COARSE_LOCATION
  • uses-permission ACCESS_COARSE_UPDATES
  • uses-permission RECEIVE_SMS
  • uses-permission ACCESS_NETWORK_STATE
  • uses-permission WAKE_LOCK
  • uses-permission WRITE_EXTERNAL_STORAGE
  • minSdkVersion is 7

Looking to this uses permissions it is clear that Android Market will restrict the app to those devices which don't have either GPS, 3G/ WiFi, Telephony or SD storage.

However, I have a Motorola Xoom tablet (Android 3.1) which has all these hardware capabilities and it is unable to see my app in the Android Market.

I'm not declaring any supported screen by means of element, because when the android:minSdkVersion is set to 4 or higher, the application is considered to support all screen sizes by default. But my application is based on API level 7 and android:xlargeScreens attribute doesn't appear until API level 9.

Any idea?

Thanks in advance.

Xavi Barrera Quintanilla

Dirk Jäckel
  • 2,979
  • 3
  • 29
  • 47

2 Answers2

2

You can have minSdkVersion set to 7, but build with targetSdkVersion=9 and target=android-9 and than the application will still run on devices with api-level 7, but you can use the attributes defined in api-level 9. So you can set android:xlargeScreens while still keeping the application compatible with 2.1.

The disadvantage is that now the IDE will consider anything available at api-level 9 as valid and than the application will fail at runtime if run on a device with older firmware. We work this around by doing development builds with the target set to minSdkVersion and release builds with modified manifest and target set to the version we use the attributes from.

Jan Hudec
  • 73,652
  • 13
  • 125
  • 172
  • So the problem could be the not declaration of the android:xlargeScreens attribute, right? I could try putting target as API level 9, but I want to be sure before uploading a new version to Android Market. – xavi barrera Jan 10 '12 at 10:32
  • @xavibarrera: I don't really know, I didn't try it (unfortunately we don't have any 3.x tablets here, though we really should). But if you have `` and don't have `xlargeScreens`, than android 3.1, which does not yet have the screen compatibility mode (implemented in 3.2) may not like such package. – Jan Hudec Jan 10 '12 at 10:54
1

I just confirmed that Jan Hudec's solution works, you have to set android:xlargescreens to true in order for your app to not be filtered for ANY 10 inch tablet, regardless of Android OS version. We luckily had 3 different 10 inch tablets, and one 7 inch, at my work place available to test this on. The Asus Transformer and Nexus 10 running Jelly Bean, and a Galaxy Tab 10.1 running Honeycomb were all listed as incompatible devices, but our Nexus 7 was compatible.

Be sure to also set the targetSdkVersion (the documentation recommends you set this explicitly) probably to 8 or above, and the minSdkVersion is ok at 7 or above.

Unfortunately, before I set android:xlargeScreens to true, while publishing the app in the Android developer console, I was still seeing that the Galaxy Tab 10.1, Nexus 10, etc. were all listed as supported devices. So it wasn't until the app showed up in the Play store that it claimed the app was incompatible with those tablets. It's possible the developer console only checks the minSdkVersion in the manifest, and not supported screens.

Community
  • 1
  • 1
ubzack
  • 1,878
  • 16
  • 16
  • I can confirm that adding targetSdkVersion with a value greater or equal to 11 works, that is all I was required to do. – Freddroid May 23 '13 at 19:17