views:

2196

answers:

3

Hello, we have a problem related to the manifest file and the property "android:minSdkVersion". The issue is: If our platform is 2.0 and we use the property "android:minSdkVersion=3" (3 = sdk 1.5) the graphics get corrupted (In details, the application's resolution get reduced to a 2/3 part of the original size, this is, when the resolution should be 480x720, it becomes in a 320x480). This is happening on the Android emulator, and on the devices Droid/Milestone (Which are platforms 2.0). When we switch the property to "android:minSdkVersion=4" (4 = sdk 1.6) the problem gets solved, but when we want to put that version on platform 1.5, Android doesn't allow us to install it. It would help us to know any conflict regarding graphics within the 2.0 sdk, or any known problem around the "android:minSdkVersion" in the manifest.

Thanks!

+2  A: 

I assume you're specifying different assets for different screen densities using directories like res/drawable-mdpi, res/drawable-hdpi and so on?

Android 1.6 (API level 4) was the first version of the SDK to support multiple screen densities, so it knows the significance of these directory names and so can successfully select the correct drawable from your res folders for the particular device it's running on.

However, if you run an application developed in this way on an Android 1.5 device (API level 3), then the framework does not know that it should only use the medium DPI resources (as there are no Android 1.5 devices released with anything other than medium DPI screens (AFAIK)). So in this case, the framework can end up choosing seemingly randomly from all the available resource in your APK, whether they're intended for high density screens or medium density screens, or whatever.

However, I haven't seen the reverse happening that you are, i.e. a 2.0 device appears to select drawables for, or assumes, a different screen density.

I would make sure your res directory layout is correct, and that you're using density-independent measurements in each of your layouts as appropriate.

But if you want to support multiple screen resolutions and densities and support Android 1.5 devices in a single APK, then I don't believe it's possible.

Christopher
You can prevent Android 1.5 from using the resource directories for other densities by using version specifiers. Example: "res/drawable-hdpi-v4".
Lance Nanek
Ah ok, thanks for that; I read about that recently, but never realised that the `-v4` (etc) modifier has been in existence since 1.5 or possibly earlier.
Christopher
+3  A: 

If you specify targetSdkVersion as well as minSdkVersion your application will start to work correctly on all platforms.

So have an entry in your manifest like this:

<uses-sdk android:minSdkVersion="3" android:targetSdkVersion="4"/>

This is covered in the Android API Levels page in the Android Developer documentation.

Dave Webb
It works but using sdk 1.6 (we were compiling using 1.5 sdk version). Thanks for your healp!!!
Tebam
A: 

Hi there

I am having similar issues. My minsdkversion=3 and I have put the targetsdkversion=4. But I am getting the console error: invalid resource directory name: \res/drawable-hdpi-v4

Anyone have any other suggestions for me?

Thanks, Neil

Neil