Thanks for posting this question. I have some additional insights that may help some developers.
I am debugging my application on a device (not the emulator). The device has 21 MB free on /data
(as revealed by «df» when doing «adb shell») and my app is only 5 MB. However, I did find that if I deleted other apps on the device (without rebooting the phone or restarting adbd), INSTALL_FAILED_INSUFFICIENT_STORAGE would go away for a while and then come back.
So it seems that debugging my 5 MB app requires more like 20 MB of space in /data
, and in addition something was leaking each time I debugged my app.
So I did «adb shell» and listed the ENTIRE /data
directory with
cd /data
ls -a -l -R
And I looked at the 5000-line output to see where all the space was going.
I discovered vast quantities of wasted space on my device in the /data/klog
directory in the form of old log files from months-old debugging sessions.
These were not my log files: they were created by some part of the Android infrastructure.
I deleted them and instantly saved 58 MB which was not attributed in the Settings app to any particular app. I have a small device so 58 MB is very significant (about 40%).
So far, I have not gotten INSTALL_FAILED_INSUFFICIENT_STORAGE again after many runs. Let’s hope that was the real issue, though the OP suggests that his device had plenty of space (but didn’t say how much).
Hopefully some of you will also be able to escape INSTALL_FAILED_INSUFFICIENT_STORAGE by periodically deleting /data/klog/*
.
Or, you can at least do the ls -a -l -R
in /data
to see where all your space is going, if indeed there is really some (hidden) space issue.
When external storage is not available and it’s not about storage space, rebooting real device fixes this error.
My log shows these lines :
PackageManager: Package ... could not be assigned a valid uid
PackageManager: package setting is null
PackageManager: Skipping remove dir for ...(user:0, appId:null)
PackageManager: Package couldn't be installed in /data/app/...
PackageManager: com.android.server.pm.PackageManagerException: Creating application package ... failed
PackageManager: at com.android.server.pm.PackageManagerService.scanPackageDirtyLI(PackageManagerService.java:10630)
Main cause seems the exception in PackageManagerService :
pkgSetting = mSettings.getPackageLPw(...);
if (pkgSetting == null) {
throw new PackageManagerException(INSTALL_FAILED_INSUFFICIENT_STORAGE,
"Creating application package " + pkg.packageName + " failed");
}
For a not-installed user application without shared user, used code in Settings is :
private PackageSetting getPackageLPw(...) {
// Assign new user id
p.appId = newUserIdLPw(p);
if (p.appId < 0) {
PackageManagerService.reportSettingsProblem(Log.WARN,
"Package " + name + " could not be assigned a valid uid");
return null;
}
}
// Returns -1 if we could not find an available UserId to assign
private int newUserIdLPw(Object obj) {
// None left?
if (N > (Process.LAST_APPLICATION_UID-Process.FIRST_APPLICATION_UID)) {
return -1;
}
}
private void removeUserIdLPw(int uid) {
if (uid >= Process.FIRST_APPLICATION_UID) {
final int N = mUserIds.size();
final int index = uid - Process.FIRST_APPLICATION_UID;
if (index < N) mUserIds.set(index, null);
} ...
}
So there is some problem with removeUserIdLPw logic or uninstall not calling it to free app user id, which needs some detailed uninstall logs I don’t have at the moment.
Ошибка INSTALL_FAILED_INSUFFICIENT_STORAGE — это провал каждой жизни разработчика Android. Это происходит независимо от размера приложения или объема хранилища. Перезагрузка целевого устройства кратко устраняет проблему, но вскоре возвращается. Есть сотни (если не тысячи) сообщений на доске сообщений от людей, которые спрашивают, почему проблема возникает, но люди в Google разочаровывают молчанием в этой проблеме.
Существует обходное решение. Если ваше тестовое устройство работает под управлением Android 2.2 или более поздней версии, добавьте атрибут android: installLocation в файл манифеста приложения со значением « preferExternal«. Это заставит приложение быть установленным на внешнем хранилище устройства, например, на SD-карте телефона.
Например:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.andrewsmith.android.darkness"
android:installLocation="preferExternal"
Это скорее полоса, чем исправление, и это может быть не идеально, если вы хотите, чтобы готовое приложение устанавливалось на внутреннюю память устройства. Но это, по крайней мере, сделает процесс разработки намного менее расстраивающим.
Ответ 1
Это только временное обходное решение, а не реальное исправление.
После того, как это случится со мной и не доволен текущими ответами, я пошел на работу
пытаясь понять это из источника AOSP. Я нашел решение REAL.
Объяснение
Прежде всего, немного (упрощенный) фон о том, как Android устанавливает и обновляет
При первом запуске приложения:
Файл APK сохраняется как
/data/app/-1.apk(1.apk)
Когда приложение должно быть обновлено:
Обновленный файл APK сохраняется как:
/data/app/-2.apk(2.apk)
Первая версия (1.apk) удаляется.
В нашем следующем обновлении (обновлениях):
- Новый APK сохраняется как (1.apk) и (2.apk) удаляется (повторите навсегда).
Проблема, с которой большинство из нас сталкивается, происходит, когда приложение обновляется, но удаление старого APK не выполняется. Которое само по себе еще не вызвало обновление, но оно вызывает два файла APK в /data/app
.
В следующий раз, когда вы попытаетесь обновить приложение, система не сможет переместить свой временный файл, потому что ни (1.apk), ни (2.apk) пусты. Поскольку File # renameTo (File) не генерирует исключение, но вместо этого возвращает логический PackageManager, он не имеет никакого способа сказать, почему он возвращает INSTALL_FAILED_INSUFFICIENT_STORAGE, даже если ошибка не имеет ничего общего с количеством свободного места.
Решение
Run:
adb shell "pm uninstall <full.packge.name>"
adb shell "rm -rf /data/app/<full.package.name>-*"
ИЛИ
Удалите приложение
Используйте свой любимый метод для удаления ОБА:
/data/app/<full.package.name > -1.apk
/data/app/<full.package.name > -2.apk
Убедитесь, что ничто иное не блокирует будущие установки аналогичным образом. В моем случае у меня был каталог /data/app-lib/<full.package.name>-1
, который задерживался! В этом случае работала установка на
Код для установки на внешнее хранилище существенно отличается, у которого нет одинаковых проблем.
Удаление приложения удаляет только одну версию файла APK в /data/app
. Вот почему вы можете переустановить его один раз, но не обновлять его.
Объем свободного места в эмуляторе не имеет особого значения при возникновении этой ошибки.
Ответ 2
Вам нужно увеличить емкость памяти эмулятора Android. Для этого есть два способа:
-
Щелкните правой кнопкой мыши корень вашего проекта Android, перейдите в «Run As», а затем перейдите к «Run Configurations…». Найдите «Android-приложение» node в дереве слева, а затем выберите свой проект и перейдите на вкладку «Цель» в правой части окна, посмотрите вниз в поле «Дополнительные параметры командной строки эмулятора» (иногда вам нужно сделать окно больше) и, наконец, вставить «-разрядный размер 1024». Нажмите «Применить», а затем «Выполнить», чтобы использовать ваш эмулятор.
-
Перейдите в Настройки Eclipse, а затем выберите «Запустить» Добавить «-разрядный размер 1024» в опции «По умолчанию эмулятор» «поле. Нажмите «Применить» и используйте свой эмулятор, как обычно.
Ответ 3
Спасибо за сообщение этого вопроса. У меня есть некоторые дополнительные идеи, которые могут помочь некоторым разработчикам.
Я отлаживаю свое приложение на устройстве (а не в эмуляторе). Устройство имеет 21 MB бесплатно на /data
(как показано «df» при выполнении «adb shell» ), а мое приложение — всего 5 Мб. Тем не менее, я обнаружил, что если бы я удалил другие приложения на устройстве (без перезагрузки телефона или перезапуска adbd), INSTALL_FAILED_INSUFFICIENT_STORAGE уйдет некоторое время, а затем вернется.
Итак, кажется, что отладка моего 5-мегабайтного приложения требует больше, чем 20 Мб пространства в /data
, и, кроме того, что-то просачивалось каждый раз, когда я отлаживал свое приложение.
Итак, я сделал «adb shell» и перечислил каталог ENTIRE /data
с
cd /data
ls -a -l -R
И я посмотрел вывод на 5000 строк, чтобы увидеть, куда все пространство идет.
Я обнаружил огромное количество потерянного пространства на моем устройстве в каталоге /data/klog
в виде старых файлов журналов из месячных сеансов отладки.
Это были не мои файлы журналов: они были созданы какой-то частью инфраструктуры Android.
Я удалил их и мгновенно сохранил 58 Мб, которые не были отнесены в приложении «Настройки» к определенному приложению. У меня небольшое устройство, поэтому 58 МБ очень значительны (около 40%).
До сих пор я не получил INSTALL_FAILED_INSUFFICIENT_STORAGE после многих запусков. Пусть надеется, что это была настоящая проблема, хотя OP предполагает, что у его устройства было много места (но он не сказал, сколько).
Надеемся, что некоторые из вас также смогут избежать INSTALL_FAILED_INSUFFICIENT_STORAGE, периодически удаляя /data/klog/*
.
Или вы можете, по крайней мере, сделать ls -a -l -R
в /data
, чтобы увидеть, куда движется все ваше пространство, если действительно есть какая-то (скрытая) проблема пространства.
Ответ 4
Я добавил дополнительную строку в файл манифеста приложения, который равен android:installLocation="preferExternal"
. используя эту строку, она вынуждает установку приложения к внешнему хранилищу. см. пример ниже,
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.nasir.phonegap"
android:installLocation="preferExternal" >
Ответ 5
Ниже приведено следующее.
-
Откройте оболочку на устройстве
adb shell
-
Перейдите в каталог тем, где сначала скопирован входящий APK
cd /data/local/tmp
-
Список доступных файлов и удаление по желанию
rm * // use at your own risk, good practice to list files first
Это было надежным для меня до настоящего времени на самом устройстве.
EDIT: Это оказалось не таким надежным решением, как выше.
Я попробовал ряд решений. Ничего действительно не помогло. Наконец, я нашел приложение под названием SD Maid. Это помогло.
В нем говорится, что функциональность ограничена на неуправляемых устройствах. Мое укоренено так, что было бы хорошо видеть, как слышат люди, эффективные в этих сценариях, и если бы это была просто случайность, это сработало для меня (это непредсказуемая проблема в любом случае).
ПРИМЕЧАНИЕ.. Я не имею никакого отношения к приложению. Просто нашел его с поиском.
Ответ 6
Я решил это, включив android:installLocation="auto"
внутри тега <manifest>
в файл AndroidManifest.xml.
Ответ 7
Связанная с этим проблема в эмуляторе — это когда в разделе /data
отсутствует какое-либо пространство.
Например,
% adb shell df
Filesystem Size Used Free Blksize
/dev 252M 32K 252M 4096
/mnt/asec 252M 0K 252M 4096
/mnt/obb 252M 0K 252M 4096
/system 154M 154M 0K 4096
/data 64M 57M 6M 4096
/cache 64M 1M 62M 4096
Вот пример представления каталога /data/app
:
% adb shell ls -l /data/app
-rw-r--r-- system system 19949 2011-10-12 17:09 CubeLiveWallpapers.apk
-rw-r--r-- system system 27670 2011-10-12 17:09 GestureBuilder.apk
-rw-r--r-- system system 34341 2011-10-12 17:09 SoftKeyboard.apk
-rw-r--r-- system system 20151 2011-10-12 17:09 WidgetPreview.apk
Я удалил дополнительные файлы APK. Кажется, что при каждой установке вы получаете новый файл APK. Просто удалите дополнительные файлы APK.
Например,
adb shell rm /data/app/com.brooklynmarathon.calendarapi2-1.apk
Ответ 8
Мне кажется, что это немного странно, но я не могу быть на 100% уверен, что он не правда в некоторых случаях (он работал у меня). Если у вас были следующие симптомы:
- Вы работаете с использованием физического устройства (в моем случае, Samsung Galaxy Ace),
- Вы разрабатываете пару дней подряд,
- Ваш телефон был подключен все время днем и ночью.
- Вы начали получать эту ошибку через пару дней, и она все ухудшалась.
- Нет других ответов для вас.
- Ты так же подал в отставку, как и я…
Затем попробуйте следующее:
- Отключите телефон, если вы не работаете!
Я отсоединил свой телефон и оставил его в ПОЛНОМ ДНЕ. Моя батарея немного разрядилась. После этого я снова подключил его и снова начал отлаживать. На этот раз все отлично работало! И я имею в виду действительно ДЕЙСТВИТЕЛЬНО хорошо, как и раньше.
Возможно ли, что эта ошибка может возникнуть из-за некоторых связанных с батареей аппаратных средств? Это все еще кажется странным, думая таким образом, но теперь я продолжаю отключать свой телефон время от времени (и на ночь), и проблема не вернулась.
Ответ 9
В моем случае отказ был вызван com.android.providers.media
приложением. Я столкнулся с этим на эмуляторе x86 android. Что я сделал:
$ adb shell df
Filesystem Size Used Free Blksize
...
/data 224M 209M 14M 4096
....
Слишком мало свободного места на /data
$ adb shell du /data
...
409870 /data/data/com.android.providers.media
...
Почти все было поглощено одним приложением! Это системное приложение, поэтому я считаю лучше не удалять его. Вместо этого я очистил данные приложения.
$ adb shell pm clear com.android.providers.media
Success
$ adb shell df
Filesystem Size Used Free Blksize
...
/data 224M 8M 215M 4096
...
Диск был удален и приложение установлено успешно.
Ответ 10
Samsung Galaxy Ace рекламирует 158 внутренних накопителей в своих спецификациях, но основные приложения и сервисы потребляют около 110 МБ (я использовал диспетчер задач на устройстве для проверки этого), Мое приложение было 52 МБ, потому что у него было много активов. Как только я удалил некоторые из них до 45 Мб, приложение удалось установить без проблем. Устройство все еще предупреждало меня, что внутреннее хранилище было почти заполнено, и я должен удалить некоторые приложения, хотя у меня было только одно приложение.
После установки выпускной версии пакета .apk, а затем удаления, мое устройство отображает 99 Мб свободного места, поэтому может быть отладка информации, загромождающей устройство в конце концов. См. ответ Луи Семприни.
Ответ 11
Отвечая на первое сообщение этой темы…
Признак: некоторые приложения не устанавливаются, говоря, что нет места
и при повторном использовании на внутреннем и внешнем хранилище достаточно свободного места!
Решение: по умолчанию отключить внешнюю установку.
Настройка внешней установки с помощью defaut:
adb shell pm set-install-location 2
Делает невозможным установку во многих приложениях, которые не могут быть установлены снаружи (например, adblock + или около того)
Тогда решение
adb shell pm set-install-location 0
или
adb shell pm set-install-location 1
0: auto (if one is full - or irrelevant !!! - it select the other)
1: internal
2: external
Ответ 12
В Eclipse
Run -- > Debug Configurations --> Select "target",
и выберите предпочтительную цель эмулятора для запуска.
Затем ниже, что «дополнительные параметры командной строки эмулятора», добавьте это:
-разъем размером 1024
Затем ЗАКРЫТЬ эмулятор и щелкните значок отладки, который запустит выбранный вами эмулятор.
Надеюсь, что это поможет…!
Ответ 13
Я столкнулся с этой проблемой с моим новым Nexus 4 и APK, встроенным в Adobe AIR. У меня уже был андроид: installLocation = «preferExternal» в моем манифесте. Я заметил, что я также вызывал adb install
с опцией -s
(установить пакет в общем хранилище, например sdcard.), Который казался излишним.
Удаление флага -s
из adb install
устраняет проблему для меня.
Ответ 14
Я столкнулся с этим вопросом, потому что получал эту ошибку с помощью Sideload Wonder Machine для установки приложений на мой реальный телефон. Я обнаружил, что проблема заключалась в том, что у меня было несколько файлов .apk в каталоге/полезной нагрузки. Я думал, что это то, что было поддержано, но когда я удалил все, кроме одного .apk, ошибка исчезла.
Ответ 15
Если вы используете реальное устройство, вы просто исчерпали внутреннюю память. Просто зайдите в настройки Android → Приложения и переместите некоторые приложения на SD-карту или удалите некоторые приложения.
Если вы используете эмулятор, см. ответ RacZo.
Ответ 16
Я столкнулся с той же ошибкой, когда я попытался установить более 50 приложений в SD-карту с помощью ADB после полного обновления ROM:
for x in *.apk; do pm install -r $x; done
Некоторые из них установлены, но многие с ошибкой установили INSTALL_FAILED_INSUFFICIENT_STORAGE. У всех неудавшихся приложений было место в их имени. Я переименовал их и попробовал снова. На этот раз все работало. Я не перезагружался или ничего. Возможно, это не проблема, с которой вы, ребята, сталкиваетесь, но это может помочь кому-то найти ту же проблему, с которой я столкнулся.
Ответ 17
Просто удалите приложение из эмулятора либо из командной строки, либо перейдите к настройкам и удалите приложение. Это остановит ошибку.
Ответ 18
Я попробовал следующее:
- Перезагрузили мое устройство
- Удаленный предыдущий APK
- Восстановить мой APK
- Удалить предыдущую копию на устройстве
- Переустановка
Проверьте, работает ли оно с вами.
Ответ 19
Поскольку этот вопрос все еще существует, я думал, что добавлю что-то в ответ RacZo для целей разработки. Если вы не используете плагин Eclipse или по какой-либо причине у вас нет источника, но только .apk, вы может увеличить размер раздела из командной строки, используя ту же самую настройку при запуске эмулятора:
emulator -avd <emulator name> -partition-size 1024
Насколько я знаю, эта опция не документирована на сайте developer.android.com, поэтому я решил опубликовать ее здесь, чтобы люди могли найти это решение.
Ответ 20
Эмуляторное решение
Откройте каталог .Android
. Обычно в вашем домашнем каталоге. Затем перейдите к avd
, а затем откройте каталог, в котором есть имя avd, которое вы хотели бы изменить.
Теперь отредактируйте файл config.ini
и добавьте следующую строку или измените следующую строку:
disk.dataPartition.size=1024
Где 1024
— размер, который вы хотели бы использовать в МБ. Сохраните файл, а затем запустите свой эмулятор с помощью wipe user data
. Теперь ваш эмулятор должен иметь новый размер.
Ответ 21
Решение прост.
Откройте AVD Manager. Отредактируйте свой AVD.
В разделе «Аппаратное обеспечение» есть некоторые свойства, перечисленные с «Новые…» и «Удалить» справа от него.
Нажмите «Создать». Выберите размер раздела данных. Установите значение «512 МБ» (требуется MB). И вы сделали. если вы все еще получаете проблемы, также увеличивайте свои системные и кеш-разделы с помощью того же метода.
Все это задокументировано здесь:
http://developer.android.com/guide/developing/devices/managing-avds.html
Ответ 22
Убедитесь, что вы не подключаете свое устройство Android к USB при попытке запустить эмулятор
Ответ 23
Если вы запускаете приложение на эмуляторе, и если эта проблема не устранена, проверьте свой менеджер уведомлений. Если он показывает вам значок и уведомление о «Память телефона заполнена», это означает, что на вашем эмуляторе уже установлено столько приложений. Удалите несколько приложений, которые в настоящее время не нужны, из «Настройки → Управление приложением → Выберите приложение → Удалить».
Этот набор.
Теперь запустите программу.
Ответ 24
Я получил эту ошибку сегодня, когда использовал мой телефон для тестирования/отладки с Eclipse.
Моя ошибка заключалась в том, что я использовал норвежский специальный символ ( «æ», «ø», «å» ) в названии приложения. Когда я реорганизовал имя приложения (используя «o» вместо «ø» ), приложение было установлено правильно.
Вероятно, это не ваша проблема, но можно заметить, что другие люди получают ту же ошибку.
Ответ 25
После проверки всего остального в этом потоке я обнаружил, что моя собственная проблема связана с тем, что путь к файлу .apk был слишком длинным. Поэтому я записал каталог, в котором находился .apk:
cd /Very/Long/Path/To/Package/
adb install mypackage.apk
вместо
adb install /Very/Long/Path/To/Package/mypackage.apk
И это сработало… установлено просто отлично.
Просто подумал, что это может помочь кому-то другому.
Ответ 26
Обход проблемы:
Скомпилируйте как 2.1 без android:installLocation="preferExternal"
.
OK
Скомпилируйте как 2.2, включая android:installLocation="preferExternal"
.
Это будет по-прежнему устанавливаться в версии SDK менее 8 (тег XML игнорируется).
Ответ 27
Я тоже столкнулся с той же проблемой, и я сделал «Factory data reset», и после этого он работал нормально.
Ответ 28
У меня не было доступа к корню на моем телефоне и я не готов к установке своего приложения на SD-карту. 15 Мб пространства доступно на /data/
, а мое приложение меньше 2 Мб.
Некоторое время я проезжал мимо; очистка проекта Eclipse и перезапуск телефона, но в итоге он перестает работать (возможно, после обновления).
Очистка кеша приложений решила проблему для меня и не требует перезагрузки телефона или удаления приложения.
На рынке есть приложения, которые вы можете использовать для очистки кеша сразу нескольких приложений. Найдите «чистый».
Ответ 29
Занимает много времени, но он должен работать в любом случае:
- Установите диспетчер файлов, например Adao Task Manager на свой телефон.
Подключитесь через USB и включите USB-накопитель. Скопируйте файл APK из локальной сборки на телефон (возможно, вам придется разрешить неизвестные источники в настройках приложения).
Затем просто нажмите APK файл и Android установит его. Как я уже сказал, это требует много времени, но это может быть быстрее, чем перезагрузка. Время от времени.
Ответ 30
В моем случае это было исправлено путем увеличения расширенной памяти затмения, изменив значение -Xmx768m в eclipse.ini
How to Fix “Install Failed Insufficient Storage” errors?
It’s possible that you’ll encounter the following error when trying to run your app on Android emulator:
adb: failed to install <path_to_your_apk>/app.apk: Failure [INSTALL_FAILED_INSUFFICIENT_STORAGE]
Android Debug Bridge (adb) is a command line utility that allows you to communicate with an Android device. This includes installation of apps when you run them in Android Studio.
This error can happen when trying to run your apps on emulator that is configured with low internal storage size or when the internal storage is full. You can fix this issue easily by either of these steps:
-
Uninstall previous apps installed on the emulator to make room for the new app.
-
Increase the internal storage size of your emulator via AVD Manager.
Ошибка — это проклятие в жизни каждого разработчика Android. Это происходит независимо от размера приложения или объема доступного хранилища. Перезагрузка целевого устройства на короткое время решает проблему, но вскоре она возвращается. Существуют сотни (если не тысячи) сообщений на досках сообщений от людей, спрашивающих, почему возникает проблема, но люди в Google удручающе молчат по этому поводу.
Есть простой обходной путь. Если ваше тестовое устройство работает под управлением Android 2.2 или более поздней версии, добавьте атрибут в файл манифеста приложения со значением . Это приведет к установке приложения на внешнее хранилище устройства, например на SD-карту телефона.
Например:
Это скорее пластырь, чем исправление, и он может быть не идеальным, если вы хотите, чтобы готовое приложение было установлено во внутренней памяти устройства. Но это, по крайней мере, сделает процесс разработки менее утомительным.
- он будет работать для Android API уровня 4 или 1.6 ??
- Я получил это сообщение в файле манифеста: -> ошибка: не найден идентификатор ресурса для атрибута 'installLocation' в пакете 'android' Справка Pls
- 1 @AndrewSmith: не могли бы вы ответить на свой вопрос? Просто наткнулся на этот вопрос во время проверки, потому что он помечен как не настоящий вопрос. Хотя флаг в основном правильный, было бы обидно, если бы решение было потеряно.
- Первое, что нужно сделать: выяснить, действительно ли проблема связана с космосом! Подробнее см. Мой ответ на этот вопрос.
- 1 У меня была эта ошибка на эмуляторе Android. В android studio - AVD manager есть возможность стереть данные на конкретном устройстве. Это устранило мою проблему
1 2 Далее
Это всего лишь временное решение и не настоящее исправление.
После того, как это случилось со мной и я не был доволен текущими ответами, я начал работать, пытаясь выяснить это из источника AOSP. Я нашел НАСТОЯЩИЙ решение.
Объяснение
Во-первых, немного (упрощенная) предыстория установки и обновления Android.
При первой установке приложения:
Файл APK сохраняется как
/ данные / приложение /-1.apk (1.apk)
Когда приложение будет обновлено:
Обновленный файл APK сохраняется как:
/ данные / приложение /-2.apk (2.apk)
Первая версия (1.apk) удаляется.
В наших следующих обновлениях:
- Новый APK сохраняется как (1.apk), а (2.apk) удаляется (повторять бесконечно).
Проблема, с которой сталкивается большинство из нас, возникает, когда приложение обновляется, но удалить старый APK не удается. Само по себе это еще не приводит к сбою обновления, но вызывает наличие двух файлов APK в .
В следующий раз, когда вы попытаетесь обновить приложение, система не сможет переместить его временный файл, потому что ни (1.apk), ни (2.apk) не пусты. Поскольку File # renameTo (File) не генерирует исключение, а вместо этого возвращает логический PackageManager, у него нет никакого способа узнать, почему он возвращает INSTALL_FAILED_INSUFFICIENT_STORAGE, даже если сбой не имел ничего общего с объемом свободного места.
Решение
Пробег:
adb shell "pm удалить "оболочка adb" rm -rf / data / app /-*'
ИЛИ
Удалить приложение
Используйте свой любимый метод для удаления ОБЕ:
/ данные / приложение /-1.apk
/ данные / приложение /-2.apk
Убедитесь, что ничто другое аналогичным образом не блокирует будущие установки. В моем случае у меня был / data / app-lib /-1
каталог тратится! В этом случае сработала установка на SD-карту, а также последующий перенос во внутреннюю память. (Создание / data / app-lib /
без окончания .)
Почему сработали другие «решения»
-
Код для установки на внешнее хранилище существенно отличается, что не имеет тех же проблем
-
При удалении приложения удаляется только одна версия файла APK из . Поэтому вы можете переустановить его один раз, но не обновлять.
-
Когда возникает эта ошибка, количество свободного места в эмуляторе не имеет значения.
- 9 @ Msmit1993, у вас нет доступа к каталогу данных на некорневом устройстве. Наличие SDK и ADB не имеет значения.
- 4 Для истинно ленивых вот фрагмент bash:
- 1 Я тоже пробовал но безуспешно, у меня ничего не работает. Использую для тестирования реальное устройство. Какое решение в этом случае?
- 1 Мне пришлось очистить
- 1 В моем случае я добавляю, чтобы установить приложение с помощью adb install -f ... В противном случае он отказывался устанавливать его, хотя у меня было 1,7 ГБ свободной внутренней памяти; может быть потому, что у меня не было SDCARD. Но с параметром -f, по крайней мере, это сработало, я не знаю почему ...
Вам необходимо увеличить объем памяти эмулятора Android. Для этого есть два пути:
-
Щелкните правой кнопкой мыши корень вашего проекта Android, выберите «Запуск от имени», а затем «Выполнить конфигурации ...». Найдите узел «Android-приложение» в дереве слева, затем выберите свой проект и перейдите на вкладку «Цель» в правой части окна. Найдите поле «Дополнительные параметры командной строки эмулятора» (иногда вы Вам нужно сделать окно больше) и, наконец, вставить туда «-partition-size 1024». Нажмите «Применить», а затем «Выполнить», чтобы использовать свой эмулятор.
-
Перейдите в настройки Eclipse и выберите «Запустить». Добавьте «-размер раздела 1024» в поле «Параметр эмулятора по умолчанию». Нажмите «Применить» и используйте свой эмулятор как обычно.
- 104 Оскар, вы предполагаете, что это происходит на симуляторе. В моем случае это происходит на реальном устройстве, на которое этот ответ не отвечает.
- Второй вариант мне не подошел. Однако вариант 1 сделал! Качественный товар! И работал с эмулятором 2.1.
- У меня это не сработало, предположительно потому, что у меня включены снимки? Как заставить эмулятор запускать Android с нуля с новой опцией -partition-size?
- 1 Потеряно на варианте 1 - у меня нет вкладки "Target" в ecclipse в этом месте.
- 2-й вариант сработал для меня, спасибо за гуд пост @RacZo
Спасибо, что разместили этот вопрос. У меня есть дополнительные идеи, которые могут помочь некоторым разработчикам.
Я отлаживаю свое приложение на устройстве (а не на эмуляторе). Устройство имеет 21 МБ свободного места на (как показывает «df» при выполнении «оболочки adb»), а мое приложение занимает всего 5 МБ. Однако я обнаружил, что если я удалю другие приложения на устройстве (без перезагрузки телефона и перезапуска adbd), INSTALL_FAILED_INSUFFICIENT_STORAGE на некоторое время исчезнет, а затем вернется.
Таким образом, кажется, что для отладки моего 5-мегабайтного приложения требуется больше 20 Мбайт места в , и, кроме того, что-то утекало каждый раз, когда я отлаживал свое приложение.
Итак, я сделал "adb shell" и перечислил ВЕСЬ каталог с
И я посмотрел на вывод в 5000 строк, чтобы увидеть, куда уходит все пространство.
я обнаружил огромное количество потраченного впустую места на моем устройстве в каталоге в виде старых файлов журнала сеансов отладки, прошедших несколько месяцев назад.
Это не были мои файлы журналов: они были созданы какой-то частью инфраструктуры Android.
Я удалил их и мгновенно сохранил 58 МБ, которые не были отнесены в приложении «Настройки» к какому-либо конкретному приложению. У меня маленькое устройство, поэтому 58 МБ очень много (около 40%).
До сих пор я не получил INSTALL_FAILED_INSUFFICIENT_STORAGE снова после многих запусков. Будем надеяться, что это была настоящая проблема, хотя OP предполагает, что на его устройстве было много места (но не сказал, сколько).
Надеюсь, некоторые из вас также смогут избежать INSTALL_FAILED_INSUFFICIENT_STORAGE, периодически удаляя .
Или вы можете, по крайней мере, выполнить в , чтобы увидеть, куда уходит все ваше пространство, если действительно есть какая-то (скрытая) проблема с пространством.
- 26 есть идеи, как это сделать на телефоне без рута? У меня нет доступа к каталогу данных. отличный пост кстати +1
- 1 Спасибо за информацию. К вашему сведению, вы можете объединить флаги в Unix, чтобы команда стала
- 1 С правами root выполните: # su # du / data | sort -g, чтобы получить список папок / файлов, упорядоченных по размеру
- @JuanMaCuevas отображает только папки.
- @Rich, попробуйте загрузить стороннее приложение Astro File Manager. Он очень популярен и дает вам доступ к файлам вашего телефона. play.google.com/store/apps/…
Следующее помогает:
-
Откройте оболочку для устройства
-
Перейдите во временную директорию, куда сначала копируется входящий APK.
-
Перечислите доступные файлы и удалите по желанию
До сих пор это было надежно для меня на реальном устройстве.
РЕДАКТИРОВАТЬ: Это оказалось не таким надежным решением, как предыдущее.
Я пробовал несколько решений. Ничего особо не помогло. Наконец я нашел приложение под названием SD Maid. Это помогло.
В нем говорится, что на некорневых устройствах функциональность ограничена. Мой внедрен, поэтому было бы неплохо услышать от людей, что он эффективен в этих сценариях, и если бы это было просто случайностью, что это сработало для меня (в любом случае это непредсказуемая проблема).
НОТА: Я не имею отношения к приложению. Просто нашел его поиском.
- Мне помогло .. Некоторые мои предыдущие приложения хранятся в папке tmp. После того, как я удалил их, он работает нормально.
Я решил это, включив в в файле AndroidManifest.xml.
- Действительно работает. Спасибо.
- Это единственное исправление, которое сработало у меня на реальном устройстве. Спасибо.
- просто и красиво работает. спасибо
- Я добавил эту строку кода, но все еще получаю эту ошибку
- Лучшее решение для работы с эмулятором. Спасибо!
Я добавил дополнительную строку в файл манифеста приложения, который является . с помощью этой строки он заставляет установить приложение во внешнее хранилище. см. пример ниже,
Связанная проблема с эмулятором - когда в разделе не осталось места.
Например,
Вот пример каталога :
Я удалил лишние файлы APK. Кажется, при каждой установке вы получаете новый APK-файл. Просто удалите лишние файлы APK.
Например,
- 2 1. запустите "adb shell" 2. cd в каждый каталог данных и найдите те, которые содержат большие бесполезные файлы. 3. Удалите их с помощью "rm (filename)" 4. Мои повторяющиеся проблемы связаны с мусором, например "ApiDemos" и "dalvik-cache" (просто удалите все содержимое этого файла)
В моем случае сбой был вызван приложением . Я столкнулся с этим на эмуляторе x86 android. Что я сделал:
Слишком мало свободного места на
Почти все было поглощено одним приложением! Это системное приложение, поэтому я считаю, что лучше не удалять его. Вместо этого я очистил данные приложения.
Диск был очищен, и приложение успешно установлено.
- Это единственное решение, которое у меня сработало. Через 2 часа!
Я пробовал следующее:
- Перезапустил мое устройство
- Удален предыдущий APK
- Восстановить мой APK
- Удалить мою предыдущую копию с устройства
- Переустановить
Проверьте, работает ли он так же с вами.
- 4 Да, перезагрузка устройства была единственной, которая сработала (после попытки нескольких решений с этой страницы)
- Перезагрузка устройства работает
Мне немного странно писать это, но я не могу быть уверен на 100%, что это не правда в некоторые случаи (у меня это сработало). Если у вас были следующие симптомы:
- Вы работали с помощью физического устройства (в моем случае - Samsung Galaxy Ace),
- Вы развивались пару дней подряд,
- Ваш телефон был подключен все время, день и ночь.
- Вы начали получать эту ошибку через пару дней, и она продолжала ухудшаться.
- Никто из других ответов сработали для вас.
- Вы так же смирились, как и я ...
Затем попробуйте следующее:
- Отключайте телефон, когда не работаете!
Я отключил свой телефон от сети и оставил его на ВЕСЬ ДЕНЬ. Моя батарея немного разрядилась. После этого переподключил и снова начал отладку. На этот раз все заработало! И я имею в виду действительно ДЕЙСТВИТЕЛЬНО хорошо, как и раньше.
Возможно ли, что эта ошибка может быть связана с некоторыми аппаратное обеспечение, связанное с батареями? Мне все еще кажется странным думать об этом, но теперь я то и дело отключаю свой телефон (и на ночь), и проблема не возвращалась.
- Это происходит со мной постоянно - на всех моих устройствах. В течение дня дела обычно начинают терпеть неудачу в конце каждого дня. Это так раздражает, и это замечательно, что Google еще не исправил это ...
- То же самое для меня, но перезагрузка телефона постоянно решала мою проблему.
Отвечая на самый первый пост этой темы ...
Симптом: некоторые приложения не устанавливаются, говоря, что нет места, а на самом деле есть много свободного места как на внутреннем, так и на внешнем хранилище !!! Решение: по умолчанию отключить внешнюю установку.
Настройка внешней установки по умолчанию с помощью этого:
Делает невозможной установку многих приложений, которые нельзя установить извне (например, adblock + или около того)
Тогда решение
Или
- Я начал думать, что внутренняя память этого телефона сломана, но установка места установки на 1 устранила проблему «недостаточно места». Спасибо!
Samsung Galaxy Ace В своих спецификациях объявляет 158 МБ внутренней памяти, но основные приложения и службы потребляют около 110 МБ из них (я использовал диспетчер задач на устройстве, чтобы проверить это). У моего приложения было 52 МБ, потому что в нем было много ресурсов. Как только я удалил некоторые из них до 45 МБ, приложение удалось установить без проблем. Устройство все еще предупреждало меня о том, что внутренняя память почти заполнена, и я должен удалить некоторые приложения, хотя у меня было установлено только одно приложение.
После установки выпускной версии пакета .apk и его удаления на моем устройстве отображается 99 МБ свободного места, так что отладочная информация, возможно, все-таки засоряет устройство. См. Ответ Луи Семприни.
В Eclipse,
и выберите предпочтительную цель эмулятора для запуска.
Затем под «дополнительными параметрами командной строки эмулятора» добавьте следующее:
-размер раздела 1024
Затем ЗАКРОЙТЕ эмулятор и щелкните значок отладки, который запустит выбранный вами эмулятор.
Надеюсь, это поможет...!
- Подсказка для пользователей. Вы можете установить размер раздела 1024 как «Внутреннее хранилище», что соответствует
Поскольку эта проблема все еще существует, я подумал, что добавлю что-нибудь к ответу RacZo в целях разработки. Если вы не используете плагин Eclipse или по какой-либо причине у вас нет исходного кода, а только .apk, вы можете увеличить размер раздела из командной строки, используя ту же опцию при запуске эмулятора:
эмулятор -avd -размер раздела 1024
Насколько мне известно, эта опция не задокументирована на сайте developer.android.com, поэтому я решил опубликовать ее здесь, чтобы люди могли найти это решение.
- это, безусловно, лучший вариант, потому что не требует обновления какого-либо файла или использования какого-либо приложения, просто
Я столкнулся с этой проблемой с моим новым Nexus 4 и APK, созданным с помощью Adobe AIR. У меня уже был android: installLocation = "seekExternal" в моем манифесте. Я заметил, что я также звонил по номеру с опцией (установить пакет на общее запоминающее устройство, например SDCard), что казалось излишним.
Удаление флага из устранило проблему для меня.
- 1 +1, хороший, -s следует использовать только при замене предыдущей установленной сборки.
Я столкнулся с этим вопросом, потому что получал эту ошибку, используя Sideload Wonder Machine для установки приложений на мой настоящий телефон. Я обнаружил, что проблема в том, что у меня было несколько файлов .apk в каталоге / payload. Я думал, что это что-то, что поддерживается, но когда я удалил все, кроме одного .apk, ошибка исчезла.
Просто удалите приложение из эмулятора либо из командной строки, либо перейдите в настройки и удалите приложение. Это предотвратит появление ошибки.
Если вы используете настоящее устройство, у вас просто закончилась внутренняя память. Просто зайдите в настройки Android -> Приложения, и переместите некоторые приложения на SD-карту или удалите некоторые приложения.
Если вы используете эмулятор, см. Ответ RacZo.
- 10 Мы говорим об ошибке недостаточного хранилища, которая возникает, когда доступно много свободного места.
Я столкнулся с той же ошибкой, когда попытался пакетно установить около 50 приложений в каталог SD-карты с помощью оболочки ADB после полного обновления ПЗУ:
Некоторые из них установлены, но многие не работают с ошибкой INSTALL_FAILED_INSUFFICIENT_STORAGE. У всех неудачных приложений было место в их имени. Я переименовал их и попробовал снова. На этот раз все сработало. Перезагрузку не делал и ничего. Возможно, это не та проблема, с которой вы столкнулись, но это может помочь кому-то искать с той же проблемой, что и я.
- Также я замечаю, что когда я пропускаю название приложения по буквам, иногда возникает та же ошибка. В моем случае это вводящее в заблуждение сообщение об ошибке.
Эмуляторное решение
Откройте каталог . Обычно в вашем домашнем каталоге. Затем перейдите на и откройте каталог с именем avd, которое вы хотите изменить.
Теперь отредактируйте файл и добавьте следующую строку или измените следующую строку:
Где - это размер, который вы хотите использовать в МБ. Сохраните файл, а затем запустите свой эмулятор с установленным . Теперь ваш эмулятор должен иметь новый размер.
Решение простое.
Откройте AVD Manager. Отредактируйте свой AVD.
Внизу, в разделе оборудования, есть некоторые свойства, перечисленные с помощью «Создать ...» и «Удалить» справа от него.
Нажмите New. Выберите размер раздела данных. Установите «512 МБ» (требуется МБ). И вы сделали. если проблемы по-прежнему возникают, увеличьте раздел системы и кеша тем же способом.
Все это задокументировано прямо здесь: http://developer.android.com/guide/developing/devices/managing-avds.html
- 2 Разделение данных недоступно в Google API уровня 14.
Убедитесь, что вы не подключаете свое устройство Android к usb при попытке запустить эмулятор.
Если вы запускаете приложение на эмуляторе и проблема не исчезнет, проверьте диспетчер уведомлений. Если отображается значок и уведомление «Память телефона заполнена», это означает, что вы уже установили так много приложений на свой эмулятор. Удалите несколько приложений, которые вы не хотите в настоящее время, из «Настройки >> Управление приложением >> Выбрать приложение >> Удалить».
Тот набор.
Теперь перезапустите программу.
Я получил эту ошибку сегодня, когда использую свой телефон для тестирования / отладки с Eclipse.
Моя ошибка заключалась в том, что я использовал норвежский специальный символ («æ», «ø», «å») в имени приложения. Когда я изменил имя приложения (используя «o» вместо «ø»), оно было установлено правильно.
Вероятно, не ваша проблема, но может быть заметна для других людей, получающих ту же ошибку.
Попробовав все остальное в этой теме, я обнаружил, что моя собственная проблема заключалась в том, что путь к файлу .apk был слишком длинным. Итак, я зашел в каталог, где находился .apk, и сделал:
вместо того
И это сработало ... установил нормально.
Просто подумал, что это может помочь кому-то другому.
- Я мог бы добавить, что создание каталога символической ссылки позволило мне создавать сборки из IDE и отлаживать: ln -s / Users / abc / a ridiculously long directory path / subpath / subsubpath / subsubsubpath / shortpath
Обходной путь:
Скомпилировать как 2.1 без .
ОК?
Скомпилируйте как 2.2, включая .
Это по-прежнему будет установлено в SDK версии менее 8 (тег XML игнорируется).
В моем случае это было исправлено путем увеличения расширенной памяти eclipse, путем изменения значения -Xmx768m в eclipse.ini
В итоге я удалил приложение с устройства, а затем снова установил его в Eclipse. Это проблема, с которой я все время сталкиваюсь на своем устройстве при регулярном использовании, но сегодня я получил это сообщение от разработки.
У меня не было root-доступа на моем телефоне, и я не готов к установке моего приложения на SD-карту. На доступно 15 МБ места, а размер моего приложения меньше 2 МБ.
Некоторое время я обходился; очистка проекта Eclipse и перезагрузка телефона, но в конечном итоге это перестало работать (вероятно, после обновления).
Очистка кеша моего приложения решила для меня проблему и не требует перезагрузки телефона или удаления приложения.
На рынке есть приложения, которые можно использовать для очистки кеша сразу нескольких приложений. Ищите "чистый".
Я тоже столкнулся с той же проблемой, и я сделал «Сброс заводских данных», и после этого все заработало.
- 8 Я бы действительно не рекомендовал это как решение. Полный перебор.
- 3 Он стирает ваш / data, что освобождает место, поэтому установка снова будет работать. Очень тупой инструмент, а не решение. Ошибка может повториться через несколько приложений.
- 25 Это то же самое, что доктор сказал: «Я не знаю, что с твоей рукой, поэтому я отрезаю ее».
1 2 Далее