Many Android Developers (and users) get confused that why a certain app isn’t showing up on the new Xperia X10 Mini (and few other) phones. This happens even if they support all android versions and have published their apps for all countries, so that shouldn’t be the issue. I came across this as well when few people mentioned that they couldn’t find my app Wi-Fi Keep Alive in the X10 mini marketplace. On some digging into the android docs and the X10 mini specs, I found the issue.
The problem is that the X10 mini has a very small screen with only a QVGA resolution. This screen size/resolution wasn’t supported by Android until recently and the Android system might not be able to scale resources and layouts designed for other screen sizes well enough to suit the X10 mini. Hence, the Android system designers have chosen that any app which does not declare explicit support for small screens (i.e., the app dev has tested his app on small screens and made any changes, if needed, and then declared that everything works fine in the Android Manifest) then it is considered not compatible by default and hence, the Android marketplace will filter your app out.
Now, this is a big loss. A lot of X10 minis were sold and there are lot of new low-tier and cheap Android smartphones coming out with this resolution, so it is a significant market share that you can’t afford to lose. The solution is simple. If the app does indeed work fine on small screens (or you have fixed it to work), then all you got to do is add the below mentioned line in your AndroidManifest.xml:
<supports-screens android:smallScreens=”true” />
That’s it. Your app should now show up fine in all screen sizes markets. Note that for all other screen sizes and resolutions, Android considers the default support as true and your app will show in those markets even if you don’t make any explicit declarations for them. You can read more about this here: Supporting Multiple Screens in Android
Update: Blundell pointed out in the comments that Android documentation says
If android:minSdkVersion or android:targetSdkVersion is “4″ (Android 1.6) or higher, the default value for everything is true. If your application requires Android 1.6 features, but does not support these densities and/or screen sizes, you need to set the appropriate attributes to false.
This should mean that small screens should be set as supported by default if you have your minSdk or targetSdk set to anything above or equal to 4. However, in my case, my apps had minSdk as 3 but targetSdk as 7 or 8 but still they didn’t show up in X10 mini marketplace till I added the smallScreens support to true in my manifest file. If anyone has any ideas about as to why it was like this, please let me know.



This is old news. “This screen size/resolution wasn’t supported by Android until recently” … this was fixed with android 1.6 release last autumn.
@Torben: My bad. Yes, this element was added to Android 1.6 (API Level 4). However, the main point that I wanted to stress on was that “the Android system might not be able to scale resources and layouts designed for other screen sizes well enough to suit the X10 mini”. So, the app developers need to check on their own whether the scaling etc done by Android is good enough and if not then they need to provide the layouts and resources suited for it on their own before. Hence, the requirement for explicit declaration was made.
You should note!: if you are developing for Android 1.6 or above i.e. have your minSdk or targetSdk = 4 or higher . Then by default the value mentioned above is set to True so you do not need to declare it in your manifest.
However if your minSdk or targetSdk = 3 i.e. 1.5 then android:smallScreens is set to FALSE by default and you will have to declare it in your manifest if you want to support these devices.
Enjoy!
Wow..I didn’t know that.. Any source or documentation that says that? My apps have so far been with minSdk as 3 and I don’t have a small screen phone to test something on my own..
Thanks for the good piece of info. I’ll add that to the main post if it is confirmed..
http://developer.android.com/guide/practices/screens_support.html#defaults
@Blundell: Thanks for the link..I had gone through it while starting writing android apps but I think I missed these particular lines. However, I have a doubt. It says that:
“If android:minSdkVersion or android:targetSdkVersion is “4″ (Android 1.6) or higher, the default value for everything is true. If your application requires Android 1.6 features, but does not support these densities and/or screen sizes, you need to set the appropriate attributes to false.”
I don’t think this takes small screens into consideration. My apps have had minSdk as 3 but their target SDK has been either 7 or 8 and still they didn’t show up in mini market until I explicitly declared support for small screens in the manifest.
Will update the main post though. Probably someone else can point out something
“The default values for the attributes differs, depending on the the value of the android:minSdkVersion attribute in the application’s manifest, as well as on the value of android:targetSdkVersion, if declared”
I would say this is inferring that the lower of the two is always chosen for the Market. It’s not the clearest of documentation but I’m sure this is how google intended it.
Although I cannot see an instance where your targetSdk would be lower than your minSdk …
Either way I assume it takes the lower value i.e. your minSdk of 3