Я сталкиваюсь с этой проблемой и нахожу решение этого вопроса с последних 2 недель.
Сейчас я разработал android приложение для клиента, размер которого 54 MB, из которых 52 MB только изображения/фотографии.
[Edit: I need to keep images in "drawable" folder ]
Поэтому я хочу установить его на sd-карту на Android SDK 2.2, для этого я уже установил android:installLocation="preferExternal"
в файле AndroidManifest.xml. Я создал 256MB sd-карту при создании avd , размер кучи - 192 , размер ram - 192
но он все еще показывает мне ошибку:
[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 файл: No space left on device
[2010-08-27 17:58:28 - demo_test] Запуск отменен!
Edit:
Действительно ли размер SD-карты 256 МБ? Иногда я забываю суффикс и получаю что-то очень маленькое.
Вы также всегда можете увеличить размеры до 512, 256, 266 и попробовать еще раз, чтобы убедиться, что это что-то другое.
Кроме того, вывод Logcat тоже был бы неплох.
Редактировать: Судя по всему, вы не можете просто «установить» приложение на SD-карту, даже если на ней свободно 30+ гигабайт. Установка зависит еще и от внутренней памяти телефона даже в 2.2.
Пример: Nexus one имеет 512 МБ встроенной памяти. ОС Android занимает необходимую оперативную память для камеры, графического процессора, ядра и т. д., оставляя пользователю всего около 190 МБ пространства для приложений (что будет еще меньше из-за уже установленных приложений и т. д.).
HTC Hero, с другой стороны, имеет только 288 МБ встроенной памяти, что делает его очень маленьким «оперативкой размером с приложение».
В зависимости от телефона 90-мегабайтное приложение будет установлено на SD-карту на Nexus One, но не на Hero из-за нехватки памяти.
Причина, по которой вы получаете эту ошибку, заключается в том, что после того, как ОС Android извлекает необходимую оперативную память из этих 192 МБ, «оперативной памяти размера приложения» недостаточно для хранения этого приложения размером 50+ МБ.
Я думал, что installLocation установит прямо на SD, но это не так.
Блог Видар Вестнес подтвердил то, что я описал выше, проведя тест с приложениями разных размеров на своем HTC Desire..
вы можете проверить, действительно ли смонтирована SD-карта и достаточно ли места, с помощью команды running
adb shell df
в каталоге android-sdk/tools он показывает, какие разделы смонтированы в данный момент, насколько они велики и сколько свободного места доступно
Я предлагаю вам попробовать увеличить доступную внутреннюю память (скриншот показывает 43 МБ), на случай, если .apk сначала копируется туда, прежде чем он будет установлен на SD-карту операционной системой.
Лучшим подходом было бы размещение ваших ресурсов в их собственном каталоге на SD-карте. . Затем ваше приложение может загружать их, когда это необходимо.