我正在使用Android 2.2开发一个Android应用程序,我的应用程序APK大小是22.5 MB,我想为三星平板电脑创建一个新的构建。我得到了以下错误:
INSTALL_FAILED_DEXOPT
如何解决这种错误?
我正在使用Android 2.2开发一个Android应用程序,我的应用程序APK大小是22.5 MB,我想为三星平板电脑创建一个新的构建。我得到了以下错误:
INSTALL_FAILED_DEXOPT
如何解决这种错误?
您正在安装的应用程序的旧版本有已更改的依赖库/ 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!
呜。
这个错误消息似乎有许多不同的原因。我遇到的情况是在一个真实的设备上(因此模拟器基础解决方案不适用)。
基本上,当发生这种情况时,将Logcat过滤器设置为Verbose或Warn,这将帮助您获得有关原因的更多信息。
以我为例,我正在从事的项目(一个大型现有代码库)中包含了多个或相互冲突的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)
我有这个问题时,有一些Unicode字符在我的方法名称(由于,所有的事情,复制/粘贴从powerpoint文件),Dalvik不喜欢。在尝试安装APK时,您可以通过查看Logcat输出来了解这一点。
这是在一个真实的设备上。
当我尝试在2.3设备上安装时遇到了这个问题(在4.0.3上没问题)。它最终是因为我正在使用的lib项目有多个jar,这些jar用于android中已经存在的东西,例如HttpClient和XML解析器等。看着logcat让我发现这个,因为它告诉我它正在逃课,因为他们已经存在了。很好的无用的原始错误!
在构建中启用jumboMode标志(dex.force.jumbo=true)后,我遇到了这个问题。在更新的Android设备上一切正常,但在Gingerbread上安装失败。
因此,如果你的应用程序由于烦人的65k限制而需要巨型模式,尝试删除一些未使用的代码/字符串,并将巨型模式设置为false。
没有通用的解决方案,你必须找到你的Logcat上报告的错误,才能解决它。有时它是一个不能被“解码器”的类,因为它使用了一个在指定的目标API上不可用的类。或者它可能是一个你在代码中引用的类,但是它所在的库没有被打包。
考虑使用proguard来缩小APK。如果我试图在旧的三星Galaxy Ace 2.3.6设备上安装25MB以上的APK,而没有使用proguard收缩/优化代码,我也会遇到同样的问题。
Jumbo模式和重新启动设备无效。
Classes.dex不会进入最终的。apk。运行gradlew—脱机清洁&& gradlew—脱机组装调试每次都为我解决问题。从那时起,你可以再次从Android Studio启动应用程序。
编辑:在我上面所说的之前,进入任务管理器并杀死所有cmd.exe和conhost.exe进程(或者只是一个aapt卡住的进程)。否则,aapt从现在开始从命令行启动时会崩溃,并出现臭名昭著的错误-1073741819。
我已经更改了android版本4对sdk 21的支持,并出现了这个错误。所以我回到了旧版本(21年前)的支持版本,它工作了。该错误只发生在android 2.3
我已经卸载了应用程序,并得到INSTALL_FAILED_DEXOPT错误。 如果你正在使用Android Studio / gradle: gradle clean, 欢呼。
我得到了同样的错误,并通过增加内部存储的大小来修复它。
内部存储最初设置为32MB(我知道),然后我在上面安装了几个apks,这比需要安装的apks所留下的空间要小。
我在尝试更新新的构建工具24.0.1时遇到了这个问题。互联网连接丢失,工具下载不成功,之后我得到了这个错误,花了很多时间试图解决它。但是当我成功地更新构建工具时,问题就解决了。祝你好运。
确保你已经安装了所有你需要的SDK,并且Gradle瞄准了正确的版本。
我也遇到过同样的问题,但这是由于我将设备更新到Android 5.0,然后忘记更改所有的构建来针对它。
在build.gradle 更改已编译并构建到最新版本。这对我很有效。
================
android {
compileSdkVersion 22
buildToolsVersion "22"
我遇到过这个问题,因为我使用的库有一些不匹配
通过更新android sdk到最新解决。检查SDK管理器,如果它显示更新,然后完全更新,清理你的项目,然后运行,它会工作:)
INSTALL_FAIL_DEXOPT通常与放在classes.dex上的限制有关。在ics之前的任何版本上,dexopt在超过5 MB的地方都会失败。最近版本的Android使用8或16 MB的缓冲区。
检查APK中classes.dex的大小。看看方法计数是多少也很好,因为dex有65536个方法/字段限制。
引用:
安装应用程序时出现错误
https://www.facebook.com/notes/facebook-engineering/under-the-hood-dalvik-patch-for-facebook-for-android/10151345597798920
如何缩小代码- 65k方法限制在dex
试试我的答案https://stackoverflow.com/a/34918549/3737254
如果你使用android studio 2.0,禁用即时运行。
仅供参考,即时运行是android studio 2.0的新功能(我从未使用过>。<)
如何禁用:首选项->构建,执行和部署->即时运行->禁用,然后像魔法一样工作
享受吧!
我需要禁用即时运行来解决这个问题。要禁用OS X上的即时运行,请进入Android Studio >首选项>构建,执行,部署>即时运行,然后从“启用即时运行”中删除“部署时热插拔代码/资源更改”(默认启用)。
因为这似乎是我自己遇到过多次的问题,这次没有一个分享的解决方案对我有帮助,我仍然会发布一些对我个人有帮助的东西,以及我认为将来可能会帮助其他人的东西:
进入项目目录,找到build/intermediates/dex-cache/cache文件。删除它——顾名思义,这是一个缓存的dex文件,如果你改变了项目的依赖关系,构建工具版本等,它可能已经过时了。
如果你有INSTALL_FAIL_DEXOPT错误,请查看manifest android:targetSdkVersion。 设定版本< 21 示例:
android:targetSdkVersion=“19”
这对我很管用。
在android Studio中点击File -> Invalidate cache / restart。当我在设备而不是模拟器上得到这个错误时,这个对我有用。
对我来说,这是proguard导致INSTALL_FAILED_DEXOPT在一些三星设备与Android 5.x。
也就是说,我必须添加这个来保护-不知道为什么它有帮助。
-keepattributes LocalVariableTable
重新启动设备。
以我为例,这个应用程序在大多数设备上都能运行,只有一个例外:我的手机太旧了,最近一直在故障,即使没有安装一次应用程序,应用程序也会抛出这个错误。
在我的案例中,这是kotlin插件1.1.51版本中的一个bug
https://youtrack.jetbrains.com/issue/KT-20034
此错误出现在旧设备上(API 16)。
通过删除@Parcelize注释并将其替换为以下代码生成器:https://github.com/nekocode/android-parcelable-intellij-plugin-kotlin修正了此问题
我今天在新的虚拟设备上使用Android Studio时也遇到了同样的问题。似乎我已经下载了x86_64映像,用等效的x86映像重新创建了VD。
在这种情况下,我期望得到一个INSTALL_FAILED_NO_MATCHING_ABIS,但不知何故,我被INSTALL_FAILED_DEXOPT卡住了
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
}
对我来说,这似乎与磁盘空间有关。新推出的5.1仿真器启动时出现了“磁盘空间不足”错误——查看仿真器属性,为内部存储分配的默认空间是800MB,这看起来很低。
因此,解决方案是增加内存(我增加到4GB)。奇怪的是,模拟器仍然引导相同的磁盘空间警告,但出厂重置(设置->备份和恢复在模拟器内部)完全解决了我的问题。
只是有点奇怪,它不能在默认设置下开箱即用。
在使用Android Studio 3.4.1时遇到了这种情况,但使用的是较旧的模拟器(5.0)。这个过程(在Mac上)修复了这个问题:
停止模拟器 cd ~ /。安卓/ avd / .avd模拟器的名字 rm * .lock 擦模拟器 启动模拟器
这里有很多答案,但也许能帮到别人 我有这个问题与真正的设备和问题是与D8
试着把这个添加到你的gradle中。它对我有用
android.enableD8=false
android.enableD8.desugaring= false
一个原因是classes.dex在.apk-package的根目录中找不到。 要么
该文件在apk-package或 它位于.apk文件中的子文件夹中。
这两种情况都会导致终止,因为Android只搜索apk文件的根目录。造成这种混乱的原因是.apk文件的构建运行没有错误消息。
造成这种错误的核心原因可能是:
dx工具需要在当前的主工作文件夹中找到classes.dex。但实际上,classes.dex位于其他位置。 Aapt在classes.dex的位置有错误信息。例如,在aapt.exe中添加…bin / classes.dex。这是错误的,因为classes.dex在创建的.apk文件的子文件夹/bin中。
在我的案例中,问题发生在一些运行API 21和22的设备上。在应用程序标签下的manifest中设置android:vmSafeMode="true"解决了这个问题。但是,不建议发布版本使用它,所以我在values文件夹中创建了两个xml文件。旧API的默认值:
<resources>
<bool name="vm_safe_mode">true</bool>
</resources>
API的>= 23值为假,也是如此。在这种情况下,操作系统更新的设备不会受到影响,旧的设备至少可以工作。
给任何搜索关键词“房间”的人。我在实现Room来管理数据库时遇到了这个问题。原因是我从Android文档中复制了所有依赖项。只复制你需要的文件。如果您没有使用Kotlin或番石榴,只需添加:
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"
testImplementation "androidx.room:room-testing:$room_version"
我添加了下面的行到gradle。属性文件,问题得到解决:
android.enableD8=false
android.enableD8.desugaring= false
我在真正的设备上运行这个应用程序。