这是什么意思:失败[INSTALL_FAILED_CONTAINER_ERROR]?


129

我尝试部署我的应用程序,有时会出现此错误:

Failure 
[INSTALL_FAILED_CONTAINER_ERROR] 

我试图用Google搜索它,但找不到错误的含义或原因。我通过IDE(IntelliJ)进行部署,文件被复制到设备上的/ data / local / tmp(未root用户的华为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]

这是什么意思,以及如何解决?

编辑/更新:

不允许将应用程序安装在sdcard上时,可以避免该错误,设置

android:installLocation="internalOnly"

在清单中。可以进行开发,但是对于生产来说,这并不是我真正想要的-因为我的应用程序很大,只有17mb;因此,我更喜欢将其放在sdcard上。如何能够在没有root的情况下将其安装在外部存储器上(因为这是删除/mnt/secure/asec/smdl2tmp1.asec的唯一方法,这似乎也是一种解决方案)。


出于好奇:您可以安装它pm install -f com.company.shop吗?
Jakub Czaplicki 2012年

这个INSTALL_FAILED_CONTAINER_ERROR问题有多种变体,其中一些变体见我的回答:stackoverflow.com/a/30343659/313113
bitek 2015年

对我来说,这就像模拟器“空间不足”(???)一样简单,我不得不在AVD Manager中擦除数据。
EpicPandaForce

Answers:


44

从您的设备中删除此文件

/mnt/secure/asec/smdl2tmp1.asec

Mathias Conradt(OP)编辑/更新:

如果您没有超级用户访问权限,则需要安装sdcard并通过pc将其删除:

/.android_secure/smdl2tmp1.asec

3
但我的设备是无根的,在安全文件夹中,只有root有权访问。我能够运行该应用程序,直到现在,直到一段时间后才运行它,并且出现了以上错误。
Mathias Conradt

1
顺便说一句-还有一个/ mnt / asec /文件夹,我可以使用非root用户访问,但它是空的
Mathias Conradt

3
@爵士今天发生在我身上。我真的很想知道这是为什么/什么。手动删除文件?为什么不做蚀呢?这是电话错误吗?
埃里克(Erik)

1
我有这个问题。我无法使用Mac查看文件/文件夹。还有其他办法吗?
SleepNot 2012年

14
这行得通,但是您能解释一下为什么会这样吗?神秘的smdl2tmp1.asec文件中包含什么?
亚历山大·帕恰

222

从以下位置更改安装位置

android:installLocation="preferExternal"

进入

android:installLocation="auto"

在项目的AndroidManifest.xml中。


12
这就是为我做的。谢谢!
Jim McKeeth'7

是的,这也对我有用。谢谢!
Senthil Kumaran

22
但我想选择外部...?如何解决这个问题?
艾登·弗莱

2
@Sameer不,这也发生在真实设备上-但不一致。主要的是HTC Desire S和Nexus设备。
艾登·弗莱

1
@AidenFry如果要保留preferredExternal,请使用user2445968解决方案。
LG

32

如果您使用的是模拟器,请对其进行编辑并添加更多内存。我遇到了这样的问题,我所做的就是将我的AVD的内存从200 MB修改为1000 MB,问题似乎就消失了……祝您好运。


是的,我也是一样。竖起大拇指:)
NaXir 2014年

除了增加内存外,我还必须擦除用户数据,然后,新大小就会反映出来,错误消失了。
Varun

2
我想您是指内部存储,而不是RAM吗?
乔尼

1
我增加了AVD的内存,然后擦除了数据!!现在它正在工作。
17:11遇见Vora

7

这意味着以前的安装已损坏。如果您安装在外部设备上,建议您再次格式化SD卡。


6

我反复遇到此错误。我发现避免整个错误的最简单方法是简单地格式化SD卡。使用电话或模拟器的内部工具。我发现自动生成的SD卡或什至使您自己的sdcard.iso失败,并导致此错误,除非由内部android工具格式化。


1
欢迎使用Stack Overflow!谢谢你的帖子!请不要在帖子中使用签名/标语。您的用户名将被视为您的签名,并且您可以使用个人资料发布自己喜欢的任何信息。签名/标语常见问题解答
Andrew Barber

使用相同的解决方案解决了此问题,因为问题是由于写入SDCard的错误引起的,所以它比您想要保留android:installLocation =“ preferExternal”的Rene的工作更好。
LG

确认。SD错误是我的原因。我测试了它从清单中删除了“首选外部”-安装成功。
djdance 2014年

4

对我来说,这是由于模拟器的SD卡空间不足所致。我当时在做一个很大的项目,我以为40 mb就足够了,但是我将其更改为200 mb,问题就消失了。


4

.apk在我的Note 8上的Cyanogenmod 12.1(Android 5.1.1)上出现了相同的错误,并为Link2SD提供了第二个分区。我能够通过以root身份通过adb强制安装来安装应用程序:

adb root
adb install -f myapp.apk

3

我从Android 5.0.1收到此错误消息。我已通过“设置”->“应用程序”->“首选安装位置”将首选安装位置更改为“可移动SD卡”。

我将选项改回“让系统决定”,错误消息消失了。


1
这似乎是我运行Cyanogenmod 12(Android 5.0.2)的解决方案。这种打开似乎迫使该应用程序安装在可移动SD卡上,即使该应用程序的清单指定无法将其安装在可移动SD卡上也是如此。
2015年


1

android:installLocation =“ auto”有效.. !!

如果不是,请一次检查您的外部存储空间大小。[可用内存>应用大小]如果存储空间不足,则会引发此错误。


0

我在模拟器上遇到了类似的问题。当我将仿真器的CPU类型从ARM更改为Intel时,它消失了。


这实际上并不能帮助OP解决他们的问题,因为他们担心的是让OP在实际设备上运行,而这些设备仍然使用ARM CPU。
James Green


0

对我来说,几个应用程序的卸载解决了这个问题。当本地存储有足够的内存时,APK部署将成功完成。但是通常我只是重新启动一个小工具,然后安装完成。此外,某些程序(例如Clean Master)可能会有所帮助。只需经常擦拭无用的进程并使用Clean Master关闭程序并获得足够的内存。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.