Что это означает: сбой [INSTALL_FAILED_CONTAINER_ERROR]?

129

Я пытаюсь развернуть свое приложение и иногда получаю такую ​​ошибку:

Failure 
[INSTALL_FAILED_CONTAINER_ERROR] 

Я пытался погуглить, но не нашел, что означает ошибка или чем она вызвана. Я развертываю через IDE (IntelliJ) файл копируется на устройство в папку / data / local / tmp (неуправляемый Huawei Ideos, работает 2.2), но диспетчеру пакетов это, похоже, не нравится. Перед установкой apk я уже заранее удалил приложение с устройства. Я также убедился, что на устройстве нет старого файла в каталоге / data / local / tmp. Тем не менее, я получаю эту ошибку. Пакет должен быть подписан с помощью ключа отладки, поскольку я развертываю через IDE, «запустив» приложение.

$ pwd 
/data/local/tmp 
$ ls -l 
-rw-rw-rw- shell    shell    17257686 2011-04-21 20:31 
com.company.shop 
$ pm install -r com.company.shop 
        pkg: com.company.shop 
Failure [INSTALL_FAILED_CONTAINER_ERROR]

Что это значит и как решить?

Редактировать / Update:

Я могу избежать ошибки, если не разрешу установку приложения на SD-карту, установив

android:installLocation="internalOnly"

в манифесте. Это нормально для разработки, но для производства это не совсем то, что я хочу - поскольку мое приложение довольно велико - 17 МБ; поэтому я предпочитаю, чтобы он был на SD-карте. Как когда-либо установить его во внешнюю память без рутирования (поскольку это единственный способ удалить /mnt/secure/asec/smdl2tmp1.asec, который, похоже, тоже является одним из решений).

Матиас Конрад
источник
Просто из любопытства: а можно установить pm install -f com.company.shop?
Якуб Чаплицкий
Есть несколько вариантов INSTALL_FAILED_CONTAINER_ERRORпроблемы, для некоторых из них мой ответ здесь: stackoverflow.com/a/30343659/313113
bitek
Для меня это было так же просто, как "нехватка места" в эмуляторе (???), и мне пришлось стереть данные в AVD Manager.
EpicPandaForce

Ответы:

44

удалите этот файл с вашего устройства

/mnt/secure/asec/smdl2tmp1.asec

Редактировать / обновлять Матиас Конрад (OP):

Если у вас нет root-доступа, вам необходимо смонтировать SD-карту и удалить ее через компьютер:

/.android_secure/smdl2tmp1.asec
Матиас Конрад
источник
3
но мое устройство не рутировано, и, глядя на безопасную папку, только root имеет доступ. Раньше мне удавалось запускать приложение, но сейчас я не могу запустить его, и это дает указанную выше ошибку.
Матиас Конрад
1
btw - есть также папка / mnt / asec /, к которой я могу добраться без полномочий root, но она пуста
Матиас Конрад
3
@Jazz Это случилось со мной сегодня. Я действительно хотел бы знать, почему / о чем это. Удалить файл вручную? Почему не могло этого сделать затмение? Это ошибка телефона?
Эрик
1
У меня эта проблема. Я не вижу файлы / папки на своем Mac. Есть ли другой путь?
SleepNot
14
Это сработало, но не могли бы вы объяснить, почему это так? Что находится в загадочном файле smdl2tmp1.asec?
Александр Паша
222

Измените место установки с

android:installLocation="preferExternal"

в

android:installLocation="auto"

в вашем проекте AndroidManifest.xml.

Rene
источник
12
Вот что сделало это для меня. Спасибо!
Джим МакКит,
Да, это тоже помогло мне. Спасибо!
Senthil Kumaran
22
но я хочу предпочесть внешний ...? Как это исправить?
Эйден Фрай
2
@Sameer Нет, это тоже происходит на реальных устройствах - но непоследовательно. Основные из них - устройства HTC Desire S и Nexus.
Эйден Фрай,
1
@AidenFry Используйте решение user2445968, если вы хотите, чтобы он предпочиталExternal.
LG
32

Если вы используете эмулятор, отредактируйте его и добавьте больше памяти. У меня была такая же проблема, и все, что я сделал, это отредактировал память своего AVD с 200 МБ до 1000 МБ, и проблема, похоже, исчезла ... Удачи.

Дэн
источник
Да, со мной случилось то же самое. Недурно :)
NaXir
Помимо увеличения памяти мне также пришлось стереть пользовательские данные, и только после этого новый размер отразился, и ошибка исчезла.
Варун
2
Могу я предположить, что вы имеете в виду внутреннее хранилище, а не оперативную память?
Джонни
1
Я увеличил память своего AVD, а затем стер данные !! и теперь он работает.
Встречайте Vora
7

Это означает, что предыдущая установка была повреждена. Если вы устанавливаете на внешний, я бы посоветовал вам отформатировать SD-карту и попробовать еще раз.

dalbator
источник
6

У меня неоднократно возникала эта ошибка. Я нашел самый простой способ полностью избежать ошибки - это просто отформатировать SD-карту. Использование внутренних инструментов телефона или эмуляторов. Я обнаружил, что автоматически сгенерированные SD-карты или даже создание вашего собственного sdcard.iso не работает и вызывает эту ошибку, если она не сформирована внутренними инструментами Android.

user2445968
источник
1
Добро пожаловать в Stack Overflow! Спасибо за ваш пост! Пожалуйста, не используйте подписи / слоганы в своих сообщениях. Ваш ящик пользователя считается вашей подписью, и вы можете использовать свой профиль для публикации любой информации о себе, которая вам нравится. Часто задаваемые вопросы о подписях / слоганах
Эндрю Барбер
Решили эту проблему тем же решением, поскольку проблема вызвана ошибкой записи на SDCard, это лучше, чем рабочий цикл Рене, если вы хотите сохранить android: installLocation = "PreferExternal".
LG
Confirm. Ошибка на SD была для меня причиной. Я протестировал его, удалив из манифеста «предпочитать внешний» - он установлен нормально.
djdance
4

Для меня это было вызвано нехваткой места на SD-карте моего эмулятора. Я работал с довольно большим проектом, и я думал, что 40 мб будет достаточно, но я изменил его на 200 мб, и проблема исчезла.

noisecapella
источник
4

Была такая же ошибка с различными .apkна Cyanogenmod 12.1 (Android 5.1.1) на моем Note 8 со вторым разделом для Link2SD. Мне удалось установить приложения, запустив установку через adb как root:

adb root
adb install -f myapp.apk
Тоби Г.
источник
3

Я получил это сообщение об ошибке от Android 5.0.1. Я изменил предпочтительное место установки на «Съемная SD-карта» через Настройки-> Приложения-> Предпочтительное место установки.

Я снова изменил этот параметр на «Дать решение системе», и сообщение об ошибке исчезло.

nyxee
источник
1
Мне показалось, что это решение для меня, использующего Cyanogenmod 12 (Android 5.0.2). Похоже, это открытие вынудило приложение установить на съемную SD-карту, хотя в манифесте приложения указано, что его нельзя там установить.
Сэм
1

Для меня это был язык устройства. Я изменил язык на арабский, чтобы протестировать свое приложение. Потом я получил эту ошибку. Возврат к языку помогло.

Элисс Абуда
источник
1

android: installLocation = "auto" работает .. !!

Если нет, один раз проверьте размер внешнего хранилища. [Доступная память> размер приложения] Если места для хранения недостаточно, также выдается эта ошибка.

Малликарджунгуда Аннигери
источник
0

У меня была аналогичная проблема с эмулятором. Его не стало, когда я изменил тип процессора эмулятора с ARM на Intel.

Wytas
источник
Это на самом деле не помогает OP с их проблемой, поскольку их проблема заключается в том, чтобы заставить его работать на реальных устройствах, многие из которых по-прежнему используют процессоры ARM.
Джеймс Грин
0

в некоторых ситуациях удаление libs/android-support-v4.jarвызывает эту ошибку.

Амир Саниян
источник
0

Для меня удаление нескольких приложений решило проблему. Когда в локальном хранилище достаточно памяти, развертывание APK завершается успешно. Но обычно я просто перезапускаю гаджет, и установка завершается. Также могут помочь некоторые программы, такие как Clean Master. Просто почаще стирайте ненужные процессы и закрывайте программы с помощью Clean Master и получайте достаточно памяти.

CoolMind
источник
0

Проблема была решена после перезагрузки устройства.

theOzmic
источник