views:

869

answers:

5

Hello all,

I am facing this problem and finding solution for this issue since last 2 weeks.

Right now i have developed an android application for the client perpose, whose size is 54 MB, from which 52 MB of only Images/Photos.

[Edit: I need to keep images in "drawable" folder ]

So i want to install it in sd-card on Android SDK 2.2 for that i have already set android:installLocation="preferExternal" in the AndroidManifest.xml file. I have created 256MB sd-card while creating an avd , heap size - 192 , ram size - 192

but it still showing me an error:

[2010-08-27 17:58:28 - demo_test] Failed to upload demo_test.apk on device 'emulator-5554'
[2010-08-27 17:58:28 - demo_test] java.io.IOException: Unable to upload file: No space left on device
[2010-08-27 17:58:28 - demo_test] Launch canceled!

Edit:

alt text

  1. Is this memory related issue of internal memory or external memory?
  2. What i have to do to run application and still test with emulator?
  3. How do i install application in sd-card in Android sdk 2.2?
+7  A: 

Is the sd-cards size really 256MB? I sometimes forget the suffix and end up with.. something very small.

You can also always raise the sizes to like 512, 256,266 and try again to be certain it's something else.

Also, Logcat output would be nice too.

Edit: As it seems, you cant just "install" the app on the SDcard even if you have 30+Gigabyte free on it. Installation depends also on the internal memory of the phone even in 2.2.

Example: Nexus one has 512mb internal memory. The android os takes the needed ram for the camera, gpu, kernel etc leaving a user with only around 190MB app space (which will be even lower due to apps already installed etc).

HTC Hero on the other hand has only 288mb internal memory, leaving it with a very small "app size ram".

Depending on the phone, 90mb app will install to SDcard on nexus one, but won't on Hero due to memory limitations.

The reason you are getting that error is that, after the android os takes the needed ram out of those 192MB, the "app size ram" is not enough to hold that 50+mb application.

I thought that installLocation would install directly to SD, but that is not the case.

Vidar Vestnes blog confirmed what I described above by performing a test with different app sizes on his HTC Desire..

Milan
@Milan thanx for the answer...just now i checked the "logcat" but no error is displayed at logcat
PM - Paresh Mayani
@Milan thanx for the really great and helping information..but i have also created emulator with 2.2 , and still getting the above error
PM - Paresh Mayani
What I explained above is how it works on 2.2 platform. That is, there is no way to install that application on a phone with that much memory.
Milan
@Milan pls read this setence that i have mentioned clearly android:installLocation="preferExternal" and this mean i want to install application in sd-card
PM - Paresh Mayani
I'm sorry, I don't know if I can't explain this well or you are not understanding my way of explaining. With android:installLocation="preferExternal" the phone will NOT ignore the ram limitations explained in my post and Vidars blog. That means no matter what you do, currently as of august of 2010, you can't install that application on the SDcard due to android not letting you do that.
Milan
@Milan thanx milan, pls let me know regarding "August 2010" matter as you mentioned above...please
PM - Paresh Mayani
A: 

you can check if the sd card is really mounted and enough space is available by the running

adb shell df

command in the android-sdk/tools directory it shows you which partitions are currently mounted, how big they are and how much free space is available

Martin
/dev: 95764K total, 0K used, 95764K available (block size 4096)/mnt/asec: 95764K total, 0K used, 95764K available (block size 4096)/system: 77568K total, 77568K used, 0K available (block size 4096)/data: 65536K total, 21112K used, 44424K available (block size 4096)/cache: 65536K total, 1156K used, 64380K available (block size 4096)/mnt/sdcard: 258064K total, 1K used, 258062K available (block size 512)/mnt/secure/asec: 258064K total, 1K used, 258062K available (block size 512)
PM - Paresh Mayani
+3  A: 

I suggest you try increasing the internal memory available (screenshot says 43MB), in case the .apk is being copied there first before it is installed to the SD card by the OS.

Julio Gorgé
You need enough space internally to load the .apk before it is moved to the SD card. Please increase the internal memory for the emulator.
smith324
@Julio Gorge @Chris324 how do i increase internal memory ??
PM - Paresh Mayani
@Julio Gorge @Chris324 ya you people are right, but suppose if i increase the internal memory of emulator and having success to run it on emulator then what about the internal memory increment? is it possible to increment the size of internal memory of phone?
PM - Paresh Mayani
+6  A: 

A better approach would be to put your resources in their own directory on the SD card. Then your app can load them when it needs.

Daniel Velkov
I second this. It's infeasible to distribute a 52MB .apk filled with images
HXCaine
@djv @T3Road i need to keep images in "drawable" folder..cant put them in SD-card..and thanx for the answer
PM - Paresh Mayani
+1  A: 

Assuming you need the images on your device instead of on the cloud, the easiest way would be to make the app connect to a server of yours and download a zip containing all the images on its first run. Until devices get a larger "app ram size" this might be your only solution.

Drew