如何解决INSTALL_FAILED_DEXOPT错误?


181

我正在使用Android 2.2开发一个Android应用程序,我的应用程序APK大小为22.5 MB,我想为三星平板电脑创建一个新版本。我收到以下错误:

INSTALL_FAILED_DEXOPT

我该如何解决这种错误?


您能否在Samsung平板电脑以外的设备上成功安装此应用程序?
泰特(Tate)

1
您需要粘贴安装失败时生成的logcat输出。
2011年

我在要测试的设备(HTC Droid Eris)上遇到了相同的问题。我在手机上有一个以前安装的应用程序版本,我刚刚卸载并重新安装,就可以了。
ninjasense 2011年

卸载并重新安装该应用程序始终可行。擦除用户数据或重新创建AVD只是以更耗时的方式进行相同操作。问题是,是否有更好,更快的选择?
bschandramohan 2011年

7
@ChandraMohan并非如此。停止尝试使其成为现实。我已经格式化了设备并尝试重新安装该应用程序。它仍然会引发此错误!
Artiom Chilaru 2012年

Answers:


99

从重新启动仿真器Android SDK and AVD Manager并选择选项Wipe User Data已为我解决了此问题。

您可以在以下给定的图像中找到突出显示的选项:

Wipe User Data option when starting android emulator


17
如果是我的手机而不是模拟器怎么办?
mtmurdock 2014年

1
@mtmurdock试试adb kill-server然后adb start-server应该可以解决您的问题。可能存在较旧的应用程序,然后先将其卸载。
维卡斯·帕蒂达

@mtmurdock您可能尝试过,但重新启动电话对我
有用

杀死服务器,然后启动对我不起作用,重新启动模拟器,然后擦除数据实际上对我有用。
Shuvo

74

对我来说,这似乎与磁盘空间有关。新推出的5.1模拟器启动时出现“磁盘空间不足”错误-查看模拟器属性,分配给内部存储的默认空间为800MB,这似乎很低。

解决方案,因此是增加它(我去了4GB)。奇怪的是,仿真器仍然以相同的磁盘空间警告启动,但是在出厂时将其重置(仿真器内部的设置->备份和还原)完全为我解决了该问题。

奇怪的是,默认设置无法立即使用。


2
确实,这是我遇到的问题,并且通过电话设置可以解决此问题。谢谢!
贾斯汀·斯坦利

1
尝试了几乎所有内容,但除了此功能外,其他方法均
无济于事

1
2小时后,我发现了此评论-感谢您保存我的一天,一切顺利!
吉安·阿勒19'Jul

1
这也导致了我的模拟器上的INSTALL_FAILED_DEXOPT。我已经增加了大小,但是我需要进入设置并运行出厂还原。它解决了这个问题。
戴夫·托马斯

基督...更新我的Mac OS之后,这再次发生在我身上。将我对该解决方案的报销费用加倍,转到->设置并运行出厂还原。不得不查找这个问题只是为了记住我是如何解决的...感谢上帝,关于堆栈溢出的历史,我能够找到我的评论
Dave Thomas

17

您正在安装的旧版本应用程序的依赖库/ jar已更改。更新我的应用正在引用的其他jar文件时遇到了这个问题。

您将需要卸载旧版本,然后就不会有其他问题了。

设置->应用程序->管理应用程序-> [查找并卸载您的应用程序]

不应该出现INSTALL_FAILED_DEXOPT错误。喜欢

[2011-06-14 01:23:40 - ProtectYourself] Installing ProtectYourself.apk...
[2011-06-14 01:24:26 - ProtectYourself] Installation error: INSTALL_FAILED_DEXOPT
[2011-06-14 01:24:26 - ProtectYourself] Please check logcat output for more details.
[2011-06-14 01:24:26 - ProtectYourself] Launch canceled!

呜呼。


我可以同意因果关系。在我对罐子进行修补后,发生了同样的情况。对我来说,这仅适用于基于Android 2.3 Gingerbread的设备,ICS和Lollipop都很好。
AlexVPerl 2015年

上载到Play商店时,这会成为问题吗?还是安装程序删除了该应用程序并重新安装?
Eduardo Naveda 2015年


12

似乎此错误消息可能有许多不同的原因。我遇到的情况是在真实设备上(因此,基于仿真器的解决方案不适用)。

基本上,发生这种情况时,请将Logcat过滤器设置为VerboseWarn,这将帮助您获取有关原因的更多信息。

就我而言,我正在从事的项目(现有的大型代码库)中包含了多个或冲突的JUnit版本。我尝试部署的Android应用程序具有多个作为依赖项的库项目,并且我错误地将其设置为包含多个JUnit jar文件。

我是根据一系列Logcat消息发现的。请注意,WARN行给出了原因:

DEBUG/dalvikvm(4808): DexOpt: 'Ljunit/framework/TestSuite$1;' has an earlier definition; blocking out
11-06 14:30:10.973: WARN/dalvikvm(4808): Invalid file flags in class Ljunit/runner/Sorter$Swapper;: 0209
11-06 14:30:10.973: null/libc(4808): Fatal signal 11 (SIGSEGV) at 0x00000004 (code=1), thread 4808 (dexopt)

3
这是一个很好的建议。我同意您应该查看LogCat输出以查看实际的错误消息是什么。我收到此错误,原因是我的设备存储空间不足,无法解压缩APK。我认为有多种原因可以触发此错误,并且可能不需要卸载或清除用户数据。我发布了相同的建议,作为对类似(重复)问题的答案。
布莱恩·贝亚德

2
抱歉,这就是布莱恩·贝德(Bryan Bedard)的观点。我的空间不足-通常,我会收到“空间不足”之类的错误,但是由于某种原因,我遇到了DEXOPT错误。Logcat显示Zip膨胀错误:写入失败:设备上没有剩余空间。
mobibob

12

在Android Studio 3.4.1中使用较旧的(5.0)模拟器进行测试。此过程(在Mac上)解决了以下问题:

  1. 停止模拟器
  2. cd〜/ .android / avd / [模拟器名称] .avd
  3. rm * .lock
  4. 擦除模拟器
  5. 启动模拟器

3
在将模拟器的内部存储增加到4gb之后执行上面提到的事情对我来说是唯一有效的方法。
dell116 '19

@ dell116我并不感到惊讶,有时仅基于对这个问题的所有不同答案,就不得不做多件事!

3
同意!并恭喜您成功锁定用户名“ Ken”。
dell116 '19

不幸的是,再次擦拭/增加存储/擦拭的组合都没有帮助我。我放弃。
CanPoyrazoğlu19年

1
@CanPoyrazoğlu-我也几乎放弃了。我认为仿真器必须非常敏感,并且很多事情都可能导致仿真器失败(八年前对一个问题的所有回答都证明了这一点)。对于我来说,删除.lock文件是关键,但是我可以肯定地看到那可能无法解决所有问题。
肯(Ken)

10

我更改了模拟器的RAM大小和内部存储容量,现在可以正常工作了……在Eclipse AVD管理器中


2
这也解决了Android Studio中的问题。我只有200Mb的内部存储空间。上升到1GB并解决问题。同样的消息错误...谢谢!
JoanCasadellà16年

也为我工作。从200MB提高!
JohnyTex

10

尝试我的答案https://stackoverflow.com/a/34918549/3737254

如果您使用android studio 2.0,请禁用即时运行。

仅供参考,即时运行是android studio 2.0的新功能(我从未使用过>。<)

如何禁用:首选项->构建,执行和部署->即时运行->禁用,然后像魔术一样工作

请享用!


这是我在模拟器上测试旧API时遇到的问题。更改此设置并彻底擦除模拟器后,它就起作用了!

8

我需要禁用即时运行才能解决此问题。要在OS X上禁用即时运行,请转至Android Studio > 首选项 > 构建,执行,部署 > 即时运行,然后从中删除对勾Enable Instant Run to hot swap code/resource changes on deploy (default enabled)


这对我有用dexopt error. Application failed to install。在找到以下项目之前,我曾尝试过这些方法:adb kill-server adb start-server,重新启动Android Studio和恢复出厂设置。
Sherlock'3

7

解决此问题的唯一解决方案是将VM的RAM增加到4GB。


6

我今天在新的虚拟设备上遇到了与Android Studio相同的问题。看来我已经下载了x86_64映像,并用等效的方式重新创建了VD。x86修复后映像。

INSTALL_FAILED_NO_MATCHING_ABIS在这种情况下,我期望得到一个,但是我还是被卡在了INSTALL_FAILED_DEXOPT


1
对我而言,情况恰恰相反。尝试安装x86失败。下载图像并将仿真器更改x86_64为错误后,消失了。我使用了API 21系统映像。
Friederbluemle

相反的对我也起作用。在尝试使用x86_64映像而不是映像之前,尝试了该线程上的所有内容x86。我也在使用API​​ 21 AVD(Nexus 5)。
雷南·法拉利

5

我正在使用Android Studio,并且遇到相同的错误。

删除主要Modul的build文件夹会有所帮助。删除后,一切恢复正常。


4

INSTALL_FAIL_DEXOPT通常与对classes.dex的限制有关。在ICS之前的任何版本上,dexopt都会在5 MB以上的内存上失败。Android的最新版本使用8或16 MB的缓冲区。

检查APK中classes.dex的大小。最好查看您的方法计数,因为dex的方法/字段限制为65536。


参考文献:

安装应用程序时出错(INSTALL_FAILED_DEXOPT)

https://www.facebook.com/notes/facebook-engineering/under-the-hood-dalvik-patch-for-facebook-for-android/10151345597798920

如何缩小代码-dex中的65k方法限制


3

在构建中启用jumboMode标志后,我遇到了这个问题(dex.force.jumbo=true)中。在较新的Android设备上,一切正常,但在Gingerbread上安装失败。

因此,如果您的应用由于烦人的65k限制而需要巨型模式,请尝试剪切一些未使用的代码/字符串,然后将巨型模式设置回false。


我还启用了巨型模式,并在旧设备上进行测试时开始看到此模式。不幸的是,恢复为false并不能解决我的问题。使用proguard缩小了APK。
洛特

我们遇到了同样的问题,巨型模式无法使用API​​ 10
Henrique de Sousa 2015年

3

classes.dex没有进入决赛.apkgradlew --offline clean && gradlew --offline assembleDebug每次都为我运行固定的东西。从那时起,您可以再次开始从Android Studio启动该应用程序。

编辑:在我上面所说的之前,去任务管理器并杀死所有cmd.execonhost.exe进程(或只是其中一个aapt被卡住)。否则aapt,从现在开始从命令行启动时会发生臭名昭著的错误,从而导致崩溃-1073741819


赞赏:d值得一提的是,最新的编译工具(2.1.1)和gradle这个插件(1.0.0-RC1)像一个魅力的作品
尤金Pechanec

好吧,我对此一无所知,我刚刚安装了android studio 1.0,不得不这样做才能使其正常工作。
axnsan 2014年

尝试也杀死所有java.exe。你有多少RAM?绝对确保您具有以下最新版本:Android Studio 1.0.0-rc4,gradle android插件1.0.0-rc1,构建工具21.1.1。我已经有一段时间没有看到错误了。
Eugen Pechanec 2014年

构建工具是21.1.1,android studio是1.0,我不知道如何找到gradle插件版本。我刚刚下载了昨天出现在android开发人员网站上的1.0版本...
axnsan 2014年

查看您的根项目build.gradle文件。在buildscript依赖项中应该有classpath 'com.android.tools.build:gradle:1.0.0-rc4'
Eugen Pechanec 2014年

3

我遇到了同样的错误,并通过增加内部存储器的大小来修复了它。

内部存储最初设置为32MB(我知道),然后在其上安装了两个apk,这些apk所剩空间少于安装该apk所需要的空间。



2

尽管如此,我还是卸载了该应用,但出现了INSTALL_FAILED_DEXOPT错误。如果您使用的是Android Studio / gradle,请使用gradle clean对我来说很成功,Cheers。


我不得不使用gradlew,但是嘿,它起作用了!谢谢(还删除了数据/数据包)
Maxim Geerinck 2014年

2

在build.gradle中更改编译并生成最新版本。它为我工作。

================

android {
    compileSdkVersion 22
    buildToolsVersion "22"

2

这里有很多答案,但也许可以帮助我遇到真正设备问题的人,而问题出在D8

尝试将其添加到您的gradle.properties中,对我有用

android.enableD8=false
android.enableD8.desugaring= false

1

尝试在2.3设备上安装(在4.0.3上很好)时出现此问题。最终归结于我正在使用的lib项目有多个jar,这些jar用于android中已经存在的东西,例如HttpClient和XML解析器等。看着logcat导致我找到了它,因为它告诉我由于它们已经在跳过类当下。尼斯无用的原始错误!


2
我有同样的问题,您能解释一下您是如何解决的。我的库大小超过7 mb,因此不允许我在2.3之类的早期设备中安装。
拉基的

就我而言,我使用gradle build创建apk,而罪魁祸首是充气城堡提供者jar。我不得不在根项目的编译依赖项中排除模块'bcprov-jdk'。
Pawan 2014年

1

我在真实设备上进行了此错误测试。清除缓存/卸载,重新启动一切对我来说都不起作用,删除构建文件夹的内容对我有帮助:)(Android studio)


1

没有通用的解决方案,您必须在Logcat上找到报告的错误,才能找出错误。有时,由于使用了指定Target API上不可用的类,因此该类无法“删除”。或者它可能是您在代码中引用的类,但是未打包其中的库。


1

考虑使用Proguard缩小您的APK。如果我尝试在旧的Samsung Galaxy Ace 2.3.6设备上安装大型25MB + APK而又不使用proguard缩小/优化代码的情况,则会遇到相同的问题。

巨型模式和重新启动设备不起作用。



1

targetSdkVersion 22 // 17 ===========================>将此数字设置为小于或等于设备上的Android OS版本可能会有所帮助

 defaultConfig {
        applicationId "software.nhut.personalutilitiesforlife"
        minSdkVersion 16
        targetSdkVersion 22//17==========================> set this number less then or equal to the version of Android OS on devices might help
        versionCode 5
        versionName "1.26"
        // Enabling multidex support.
        multiDexEnabled true
    }

0

当我的方法名称中有一些Unicode字符时(由于所有原因,都是从PowerPoint文件进行复制/粘贴),Dalvik不喜欢这个问题。您可以在尝试安装APK时通过查看Logcat输出来查看此内容。

这是在真实设备上。


0

通过更正手机上的日期时间(这是默认日期01.01.1980)并清理项目来解决。


0

我已经更改了对sdk 21的android version 4支持版本,并出现此错误。因此,我返回了对旧版本的支持版本(在21之前),并且该版本有效。该错误仅在android 2.3中发生


0

当我尝试更新新的构建工具24.0.1时遇到了这个问题。互联网连接丢失并且工具未成功下载,之后我收到了此错误,并花了很多时间来解决它。但是当我成功更新了构建工具时,问题解决了。祝好运。

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.