208

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

INSTALL_FAILED_DEXOPT

我该如何解决这种错误?

4

44 回答 44

114

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

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

启动android模拟器时擦除用户数据选项

于 2011-03-17T06:25:12.493 回答
111

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

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

只是有点奇怪,它在默认设置下无法开箱即用。

于 2018-09-13T20:38:52.717 回答
18

您正在安装的旧版本的应用程序具有已更改的依赖库/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!

嗬嗬。

于 2011-06-14T08:36:24.510 回答
17

使用 Android Studio 3.4.1 但使用较旧的 (5.0) 模拟器时遇到了这个问题。此过程(在 Mac 上)修复了该问题:

  1. 停止模拟器
  2. cd ~/.android/avd/[模拟器名称].avd
  3. rm *.lock
  4. 擦除模拟器
  5. 启动模拟器
于 2019-06-14T16:54:15.317 回答
14

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

构建 > 清理项目

于 2014-08-04T14:29:23.957 回答
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)
于 2012-11-06T22:12:20.477 回答
11

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

于 2015-06-01T08:19:58.553 回答
10

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

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

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

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

享受!

于 2016-01-21T08:22:31.440 回答
9

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

于 2019-08-17T10:48:25.297 回答
8

我需要禁用 Instant Run 来解决问题。要在 OS X 上禁用 Instant Run,请转到Android Studio > Preferences > Build, Execution, Deployment > Instant Run然后从Enable Instant Run to hot swap code/resource changes on deploy (default enabled).

于 2016-02-04T21:01:38.097 回答
6

我今天在新的虚拟设备上使用 Android Studio 时遇到了同样的问题。看来我已经下载了x86_64图像,并使用等效图像重新创建了 VDx86修复了它。

我希望INSTALL_FAILED_NO_MATCHING_ABIS在这种情况下得到一个,但不知何故我被困住了INSTALL_FAILED_DEXOPT

于 2018-06-15T12:27:03.573 回答
5

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

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

于 2014-10-14T07:50:13.383 回答
4

INSTALL_FAIL_DEXOPT 通常与对 classes.dex 的限制有关。在任何超过 5 MB 的情况下,ICS 之前的 dexopt 都会失败。最新版本的 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 方法限制

于 2015-08-07T22:11:47.307 回答
3

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

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

于 2014-06-24T08:49:04.033 回答
3

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

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

于 2014-10-01T12:04:56.477 回答
3

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

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

于 2014-12-05T04:37:46.983 回答
3

这里有很多答案,但也许它可以帮助我在真实设备上遇到这个问题并且问题出在 D8 上的人

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

android.enableD8=false
android.enableD8.desugaring= false
于 2020-02-07T08:26:29.410 回答
3

验证设备上的存储空间

于 2019-02-25T13:50:53.213 回答
2

我卸载了该应用程序并得到了 INSTALL_FAILED_DEXOPT 错误。如果您正在使用 Android Studio / gradle:gradle clean为我做了诀窍,干杯。

于 2014-11-07T12:24:00.377 回答
2

in build.gradle change compiled and build to latest version. and it worked for me.

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

android {
    compileSdkVersion 22
    buildToolsVersion "22"
于 2015-03-18T18:25:06.873 回答
1

没有通用的解决方案,您必须找到 Logcat 上报告的错误才能弄清楚。有时,由于使用了指定目标 API 上不可用的类,因此无法“索引”类。或者它可能是您在代码中引用的类,但它所在的库没有被打包。

于 2014-08-13T20:05:35.133 回答
1

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

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

于 2014-10-01T08:42:30.410 回答
1

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

于 2013-10-18T11:31:00.917 回答
1

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

于 2014-05-08T10:39:56.153 回答
1

在我的情况下,一些运行 API 21 和 22 的设备上发生了问题。在标签android:vmSafeMode="true"下的清单中设置解决了这个问题。application但是,不建议发布版本,所以我在 values 文件夹中创建了两个 xml 文件。旧 API 的默认设置:

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

对于 API 的 >= 23false值也是如此。在这种情况下,具有较新操作系统的设备不会受到影响,而旧的设备至少可以工作。

于 2020-06-29T10:35:28.803 回答
1

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

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

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

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

于 2017-10-20T08:18:47.547 回答
1

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

 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
    }
于 2018-09-06T14:01:06.420 回答
1

我发现这个问题有一个原因:移动设备上没有足够的空间。所以我从手机上删除了几个APP,它是固定的。

于 2018-06-23T10:11:39.797 回答
0

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

于 2014-10-14T15:08:34.083 回答
0

确保您已经安装了所有需要的 SDK,并且 Gradle 的目标版本是正确的。

我遇到了同样的问题,但这是由于我将我的设备更新到 Android 5.0 然后忘记更改我的所有构建以针对它造成的。

于 2015-01-20T16:41:07.117 回答
0

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

于 2014-11-04T00:50:57.823 回答
0

I had this problem when there were some Unicode characters in my method names (due to, of all things, copy/pasting from a powerpoint file) that Dalvik did not like. You can see this by looking at Logcat output while trying to install the APK.

This was on a real device.

于 2013-06-26T07:30:26.907 回答
0

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

于 2014-12-16T22:51:46.770 回答
0

重新启动您的设备。

就我而言,该应用程序可以在大多数设备上运行,除了一个设备:一部手机太旧并且最近出现故障,即使没有安装一次应用程序,该应用程序也会引发此错误。

于 2017-04-26T15:17:05.547 回答
0

也许这会有所帮助:

  1. 在启动模拟器之前擦除用户数据
  2. 清理项目
  3. 删除不需要的依赖项....
于 2015-09-12T18:29:30.903 回答
0

我遇到了这个问题,因为我使用的库有些不匹配

通过将 android sdk 更新到最新解决。检查 SDK 管理器是否显示更新然后完全更新,清理您的项目然后运行,它将工作:)

于 2015-07-06T12:59:26.633 回答
0

对我来说,是 proguard 在一些带有 Android 5.x 的三星设备上导致了 INSTALL_FAILED_DEXOPT。

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

-keepattributes LocalVariableTable
于 2017-01-18T14:30:08.750 回答
0

对于使用关键字“房间”搜索此内容的任何人。我在实现 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"
于 2020-07-09T20:17:13.203 回答
0

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

于 2015-12-09T08:25:15.973 回答
0

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

项目 > 清洁...

于 2018-06-02T11:19:01.337 回答
0

在 android Studio 点击 File -> Invalidate caches/ restart 。当我在设备而不是模拟器上收到此错误时收到此错误时,这对我有用。

于 2016-04-27T15:59:33.577 回答
0

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

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

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

该错误的核心原因可能是:

  • dx 工具需要当前主工作文件夹中的 classes.dex。但实际上 classes.dex 位于其他地方。
  • aapt 的 classes.dex 位置信息有误。例如与aapt.exe add ... bin/classes.dex. 那是错误的,因为 classes.dex 位于创建的 .apk 文件的子文件夹 /bin 中。
于 2020-02-22T15:07:13.820 回答
-1

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

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

于 2016-04-09T19:54:53.057 回答
-3

如果您有错误 INSTALL_FAIL_DEXOPT,请参阅清单 android:targetSdkVersion。设置版本 < 21 示例:

安卓:targetSdkVersion="19"

这对我有用。

于 2016-04-11T13:38:46.133 回答