Установка приложения на SD-карту в Android sdk 2.2

Я столкнулся с этой проблемой и нахожу решение этой проблемы за последние 2 недели.

Прямо сейчас я разработал приложение для Android для клиента, размер которого составляет 54 МБ, из которых 52 МБ только изображений / фотографий.

[Изменить: мне нужно хранить изображения в папке с возможностью рисования]

Поэтому я хочу установить его на SD-карту в Android SDK 2.2, для этого я уже установил android:installLocation="preferExternal" в файле AndroidManifest.xml. Я создал SD-карту 256 МБ при создании avd, размер кучи - 192, размер оперативной памяти - 192

но он все еще показывает мне ошибку:

[2010-08-27 17:58:28 - demo_test] Не удалось загрузить demo_test.apk на устройство 'emulator-5554'
[2010-08-27 17:58:28 - demo_test] java.io.IOException: Невозможно загрузить файл: на устройстве не осталось места
[2010-08-27 17:58:28 - demo_test] Запуск отменен!

Изменить:

alt text

  1. Связана ли эта проблема с памятью внутренней или внешней памятью?
  2. Что мне нужно сделать, чтобы запустить приложение и по-прежнему тестировать с эмулятором?
  3. Как установить приложение на SD-карту в Android SDK 2.2?

person Paresh Mayani    schedule 27.08.2010    source источник
comment
Я загрузил изображение эмулятора для проблемы, связанной с памятью, если таковая имеется   -  person Paresh Mayani    schedule 27.08.2010
comment
Пожалуйста, помогите мне ... я нахожусь в поиске решения этой проблемы последние 2 недели ... так что пожалуйста   -  person Paresh Mayani    schedule 28.08.2010
comment
Давай, ты здесь какое-то время; пожалуйста, научитесь лучше форматировать свои вопросы! Несомненно, это поможет вам привлечь больше внимания и ответов.   -  person    schedule 31.08.2010
comment
Почему изображения должны храниться в папке с возможностью рисования? Даже если они находятся на SD-карте, вы все равно можете получить к ним доступ. Вы не получите свои автоматические ссылки R, но есть способы вместо этого вытащить объект для рисования из файла.   -  person Drew    schedule 03.09.2010
comment
@Drew извините за поздний ответ, был в отпуске, но тогда как я могу предоставить изображения с приложением, кто бы его ни загрузил   -  person Paresh Mayani    schedule 06.09.2010
comment
Я думаю, что самый простой способ - заставить приложение подключиться к вашему серверу и загрузить zip-архив, содержащий все изображения, при первом запуске. Не идеальное решение, но похоже, что оно единственное. Я добавлю это как ответ, а не просто комментарий.   -  person Drew    schedule 06.09.2010
comment
@Drew вот идея gr8, но понятия не имею об этом ... мне нужно загружать изображения одно за другим, основываясь на прикосновении пользователя к экрану   -  person Paresh Mayani    schedule 06.09.2010
comment
Это возможно независимо от того, находятся ли изображения в папке для рисования, на SD-карте или передаются из сети. К сожалению, из-за огромного количества изображений вам придется выбрать один из двух последних вариантов: SD-карта или потоковая передача.   -  person Drew    schedule 06.09.2010
comment
@Drew, но, по моему мнению, потоковая передача не является возможным решением, потому что загрузка изображений в соответствии с моим приложением занимает много времени.   -  person Paresh Mayani    schedule 06.09.2010
comment
В этом случае лучше всего загрузить все при первом запуске приложения, а затем получить доступ к изображениям с SD-карты.   -  person Drew    schedule 06.09.2010
comment
Для производственных приложений загрузка на SD-карту, вероятно, правильный ответ. Но поскольку вы спросили в другом потоке об увеличении размера эмулятора, я хотел убедиться, что вы видели там мой ответ: stackoverflow.com/questions/2239330/   -  person SomeCallMeTim    schedule 16.10.2010


Ответы (6)


Действительно ли размер 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 ..

person Milan    schedule 27.08.2010
comment
@Milan спасибо за ответ ... только что я проверил logcat, но в logcat не отображается ошибка - person Paresh Mayani; 28.08.2010
comment
@Milan спасибо за действительно отличную и полезную информацию .. но я также создал эмулятор с 2.2, и все еще получаю указанную выше ошибку - person Paresh Mayani; 30.08.2010
comment
Выше я объяснил, как это работает на платформе 2.2. То есть невозможно установить это приложение на телефон с таким объемом памяти. - person Milan; 30.08.2010
comment
@Milan, пожалуйста, прочтите это предложение, о котором я четко упомянул android: installLocation = seekExternal, и это означает, что я хочу установить приложение на SD-карту - person Paresh Mayani; 30.08.2010
comment
Извините, я не знаю, могу ли я это хорошо объяснить или вы не понимаете мой способ объяснения. С android: installLocation = seekExternal телефон НЕ будет игнорировать ограничения оперативной памяти, описанные в моем сообщении и блоге Vidars. Это означает, что независимо от того, что вы делаете, в настоящее время по состоянию на август 2010 года вы не можете установить это приложение на SD-карту из-за того, что Android не позволяет вам это сделать. - person Milan; 30.08.2010
comment
@Milan thanx milan, пожалуйста, дайте мне знать по поводу августа 2010 года, как вы упомянули выше ... пожалуйста - person Paresh Mayani; 01.09.2010

Лучшим подходом было бы поместить ваши ресурсы в отдельный каталог на SD-карте. Затем ваше приложение может загружать их, когда это необходимо.

person Daniel    schedule 28.08.2010
comment
Я поддерживаю это. Невозможно раздать .apk размером 52МБ с изображениями - person HXCaine; 28.08.2010
comment
@ T3Road мне нужно хранить изображения в папке с возможностью переноса ... нельзя поместить их на SD-карту ... и спасибо за ответ - person Paresh Mayani; 30.08.2010

Я предлагаю вам попробовать увеличить доступную внутреннюю память (на скриншоте указано 43 МБ) на случай, если .apk сначала копируется туда, прежде чем ОС будет установлена ​​на SD-карту.

person Julio Gorgé    schedule 27.08.2010
comment
Вам потребуется достаточно места для загрузки .apk перед его перемещением на SD-карту. Пожалуйста, увеличьте внутреннюю память для эмулятора. - person smith324; 27.08.2010
comment
Gorge @ Chris324 как увеличить внутреннюю память ?? - person Paresh Mayani; 28.08.2010
comment
Gorge @ Chris324, вы правы, но предположим, что если я увеличу внутреннюю память эмулятора и успешно запустил его на эмуляторе, то как насчет увеличения внутренней памяти? можно ли увеличить размер внутренней памяти телефона? - person Paresh Mayani; 28.08.2010

Предполагая, что вам нужны изображения на вашем устройстве, а не в облаке, самым простым способом было бы подключить приложение к вашему серверу и загрузить zip-архив, содержащий все изображения, при первом запуске. Пока устройства не получат больший «размер оперативной памяти», это может быть вашим единственным решением.

person Drew    schedule 06.09.2010

Вы можете использовать следующее:

adb shell pm setInstallLocation 2

из каталога android-sdk / tools, чтобы заставить эмулятор установить на вашу SD-карту, независимо от ее размера - желательно достаточно большого, чтобы вместить ваше приложение (я), очевидно.

Если вы хотите вернуться в место установки по умолчанию (память приложения телефона), выполните:

adb shell pm setInstallLocation 0

Вы также можете использовать эти команды adb на своем телефоне / планшете.

После того, как вы настроили эмулятор для установки на SD-карту, вы можете перейти в «Настройки» -> «Приложения» -> «Управление приложениями», выбрать приложение, которое вы хотите разместить на SD-карте, и «Переместить на SD-карту». кнопка больше не будет серой.

person drbob    schedule 19.08.2011

вы можете проверить, действительно ли SD-карта смонтирована и достаточно ли свободного места, запустив

adb shell df

команда в каталоге android-sdk / tools показывает, какие разделы в настоящее время смонтированы, насколько они велики и сколько свободного места доступно

person DonGru    schedule 27.08.2010
comment
/ dev: всего 95764K, используется 0K, доступно 95764K (размер блока 4096) / mnt / asec: всего 95764K, используется 0K, доступно 95764K (размер блока 4096) / system: всего 77568K, используется 77568K, доступно 0K (размер блока 4096) / data: всего 65536K, используется 21112K, доступно 44424K (размер блока 4096) / cache: всего 65536K, используется 1156K, доступно 64380K (размер блока 4096) / mnt / sdcard: всего 258064K, используется 1K, доступно 258062K (размер блока 512) / mnt / secure / asec: всего 258064 КБ, используется 1 КБ, доступно 258062 КБ (размер блока 512) - person Paresh Mayani; 27.08.2010