如何解决INSTALL_FAILED_DEXOPT错误?

时间:2011-03-01 10:57:17

标签: android android-install-apk

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

  

INSTALL_FAILED_DEXOPT

如何解决此类错误?

46 个答案:

答案 0 :(得分:75)

Android SDK and AVD Manager重新启动模拟器并选择Wipe User Data选项已经为我解决了这个问题。

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

Wipe User Data option when starting android emulator

答案 1 :(得分: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!

Whoo hoo。

答案 2 :(得分:15)

如果您使用的是 Android Studio ,请尝试清理您的项目:

构建>清洁项目

答案 3 :(得分:14)

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

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

有些奇怪,它在默认设置下无法立即使用。

答案 4 :(得分:11)

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

基本上,当发生这种情况时,请将Logcat过滤器设置为详细警告,这将有助于您获得有关原因的更多信息。

在我的情况下,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)

答案 5 :(得分:9)

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

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

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

如何禁用:偏好设置 - >建立,执行和部署 - >即时运行 - >禁用,然后像魔术一样工作

享受!

答案 6 :(得分:8)

我'在eclipse AVD管理器中更改了 RAM大小和模拟器的内部存储容量现在正在工作......

答案 7 :(得分:8)

我需要禁用Instant Run才能解决问题。要在OS X上禁用“即时运行”,请转到 Android Studio > 偏好设置> 构建,执行,部署> 即时运行,然后从Enable Instant Run to hot swap code/resource changes on deploy (default enabled)删除勾号。

答案 8 :(得分:5)

在Android Studio 3.4.1中使用较旧的(5.0)模拟器进行测试。 This procedure(在Mac上)解决了该问题:

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

答案 9 :(得分:5)

我正在使用Android Studio并遇到同样的错误。

删除主模块的构建文件夹有帮助。删除后,一切都恢复正常。

答案 10 :(得分:4)

INSTALL_FAIL_DEXOPT通常与classes.dex上的限制有关。在任何预先ICS上,dexopt都会在超过5 MB的任何事情上失败。最新版本的Android使用8或16 MB缓冲区。

检查APK中classes.dex的大小。看看你的方法计数是多少也很好,因为dex有65536方法/字段限制。

参考文献:

Error while installing application (INSTALL_FAILED_DEXOPT)

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

How to shrink code - 65k method limit in dex

答案 11 :(得分:4)

我今天在新的虚拟设备上遇到了与Android Studio相同的问题。我似乎已经下载了x86_64图像,重新创建了VD,并修复了等效的x86图像。

我希望在这种情况下得到INSTALL_FAILED_NO_MATCHING_ABIS,但不知怎的,我被INSTALL_FAILED_DEXOPT

困住了

答案 12 :(得分:3)

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

编辑:在我上面所说的之前,请转到任务管理器并终止所有cmd.execonhost.exe进程(或仅aapt卡住的进程)。否则aapt从命令行启动后会因为臭名昭着的错误-1073741819而崩溃。

答案 13 :(得分:3)

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

因此,如果你的应用程序由于令人讨厌的65k限制而需要jumbo模式,请尝试删除一些未使用的代码/字符串并将jumbo模式设置为false。

答案 14 :(得分:3)

验证设备上的存储空间

答案 15 :(得分:3)

我遇到了同样的错误并通过增加内部存储空间来修复它。

内部存储最初设置为32MB(我知道)然后我在其上安装了几个apks,它留下的空间少于安装它所需的空间。

答案 16 :(得分:3)

对我来说唯一有效的解决方案是将VM的RAM增加到4GB。

答案 17 :(得分:2)

我卸载了应用程序但仍然收到了INSTALL_FAILED_DEXOPT错误。 如果您正在使用Android Studio / gradle: gradle clean 为我做了诀窍, 欢呼声。

答案 18 :(得分:2)

这里有很多答案,但也许可以帮助某人 我在实际设备上遇到了这个问题,而D8出现了问题

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

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

答案 19 :(得分:2)

在build.gradle中

更改编译并构建到最新版本。它对我有用。

=====

android {
    compileSdkVersion 22
    buildToolsVersion "22"

答案 20 :(得分: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
    }

答案 21 :(得分:1)

就我而言,这是kotlin插件中的一个错误,版本1.1.51

https://youtrack.jetbrains.com/issue/KT-20034

旧设备(API 16)上出现此错误。

通过删除@Parcelize注释并使用此代码生成器替换它们来解决此问题:https://github.com/nekocode/android-parcelable-intellij-plugin-kotlin

答案 22 :(得分:1)

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

Jumbo模式并重启设备无效。

答案 23 :(得分:1)

没有通用解决方案,您必须找到Logcat上报告的错误才能弄明白。有时,由于使用了在指定的Target API上不可用的类,它不能被“dexed”。或者它可能是您在代码中引用的类,但它所在的库未被打包。

答案 24 :(得分:1)

我在真实设备上进行了此错误测试。清除缓存/卸载,重新启动一切对我不起作用,删除build文件夹的内容:)(Android工作室)

答案 25 :(得分:1)

我在尝试在2.3设备上安装时遇到此问题(4.0.3时很好)。它最终是由于我正在使用的lib项目有多个罐子,这些罐子已经存在于android中,例如HttpClient和XML解析器等。看着logcat让我发现它,因为它告诉我它正在跳过类,因为它们已经存在。那里好无益的原始错误!

答案 26 :(得分:0)

一个原因是在.apk软件包的根目录中找不到classes.dex。

  • apk软件包或
  • 中缺少此文件
  • 它位于.apk文件内的子文件夹中。

这两种情况都会导致终止,因为据说Android仅在apk文件的根目录中搜索。混淆是因为.apk文件的构建运行没有错误消息。

该错误的主要原因可能是:

  • dx工具在当前主工作文件夹中需要classes.dex。但实际上classes.dex位于其他位置。
  • aapt的classes.dex位置信息错误。例如,使用let url = 'https://drive.google.com/uc?export=download&id=driveid' let check = true // Tell the app we're okay to check while (check) { check = false // Set to false while the app is checking console.log(url) https.get(url, (response) => { if (typeof response.headers['Content-Disposition'] !== 'undefined') { const file = fs.createWriteStream('a3.mp4') response .on('data', (chunk) => { file.write(chunk) }) .on('end', async () => { file.end() check = true // Done – tell the app it's safe to check again }) } else { let str = '' response .on('data', (chunk) => { str += chunk }) .on('end', () => { url = get_confirm_download_url(str) if (!url) { console.log('Can"t find download link') check = true // Done – tell the app it's safe to check again } }) } }) // No need for the break } There are definitely better ways of doing this - but it seems to me like this is what you were intending to do. 。那是错误的,因为classes.dex在创建的.apk文件的子文件夹/ bin中。

答案 27 :(得分:0)

就我而言,某些运行API 21和22的设备上发生了问题。在清单android:vmSafeMode="true"下的清单中设置application解决了该问题。但是,不建议将其用于发行版本,因此我在values文件夹中创建了两个xml文件。较旧的API的默认设置:

<resources>
    <bool name="vm_safe_mode">true</bool>
</resources>

与API的> = 23和false值相同。在这种情况下,操作系统较新的设备将不会受到影响,而旧版本的设备至少会起作用。

答案 28 :(得分:0)

对于任何使用关键字“ Room”进行搜索的用户。我在实施Room管理我的数据库时遇到了这个问题。原因是我从Android文档中复制了所有依赖项。仅复制您需要的内容。如果您不使用Kotlin或Guava,请仅添加:

implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"
testImplementation "androidx.room:room-testing:$room_version"

答案 29 :(得分:0)

我发现此问题有一个原因:手机空间不足。所以我从手机中删除了几个APP,它是固定的。

答案 30 :(得分:0)

此外,如果您还在使用ECLIPSE,请尝试清理您的项目:

项目&gt;清洁...

答案 31 :(得分:0)

如果您现在遇到此问题,可能是您使用了错误的系统映像

我在尝试在虚拟设备 spring.jpa.hibernate.ddl-auto=create 上运行项目时遇到了这个问题,但上面列出的建议没有任何帮助。我只需要创建一个虚拟设备 API 21 ABI x86_64 with Google Play Services

答案 32 :(得分:0)

重启您的设备。

在我的情况下,应用程序在大多数设备上运行,除了一个:手机太旧并且最近失败了,即使没有安装应用程序,应用程序也会抛出此错误。

答案 33 :(得分:0)

对我来说,这是一些导致在Android 5.x的某些三星设备上导致INSTALL_FAILED_DEXOPT的程序。

即我必须将此添加到proguard - 不知道为什么它有帮助。

-keepattributes LocalVariableTable

答案 34 :(得分:0)

在android Studio中点击文件 - &gt;无效缓存/重启。当我在设备而非模拟器上出现此错误时,当我收到此错误时,这对我有用。

答案 35 :(得分:0)

由于这似乎是一个问题,我自己遇到了多次,这次没有共享的解决方案帮助了我,我仍然会发布有助于我个人的信息以及我认为可能在将来帮助其他人的信息:

转到项目目录并找到build / intermediates / dex-cache / cache文件。删除它 - 顾名思义,它是一个缓存的dex文件,如果你对项目的依赖项,构建工具版本等进行了更改,它可能会过时。

答案 36 :(得分:0)

通过删除主应用程序的构建文件夹来解决错误。它将重新创建。

答案 37 :(得分:0)

也许这会有所帮助:

  1. 在启动模拟器之前擦除用户数据
  2. 清理项目
  3. 删除不需要的依赖项....

答案 38 :(得分:0)

我遇到过这个问题,因为我使用的库与

有些不匹配

通过将android sdk更新为最新解决方案。检查SDK管理器是否显示更新然后完全更新,清理项目然后运行,它将起作用:)

答案 39 :(得分:0)

确保您已安装了所有需要的SDK,并且Gradle正在定位正确的版本。

我遇到了同样的问题,但这是因为我将设备更新到Android 5.0,然后忘记更改我的所有版本来定位它。

答案 40 :(得分:0)

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

答案 41 :(得分:0)

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

答案 42 :(得分:0)

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

答案 43 :(得分:0)

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

这是在一个真实的设备上。

答案 44 :(得分:-2)

如果您有错误INSTALL_FAIL_DEXOPT,请参阅清单android:targetSdkVersion。 设置版本&lt; 21 样本:

  

机器人:targetSdkVersion =&#34; 19&#34;

这对我有用。

答案 45 :(得分:-3)

我尝试了在这个帖子和所有类似线程中说的所有方法,但问题仍然存在! 我的源代码中有15个Java接口; 删除它们可以解决我的问题 !!