我正在使用Android 2.2开发一个Android应用程序,我的应用程序APK大小是22.5 MB,我想为三星平板电脑创建一个新的构建。我得到了以下错误:
INSTALL_FAILED_DEXOPT
如何解决这种错误?
我正在使用Android 2.2开发一个Android应用程序,我的应用程序APK大小是22.5 MB,我想为三星平板电脑创建一个新的构建。我得到了以下错误:
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
}
其他回答
这个错误消息似乎有许多不同的原因。我遇到的情况是在一个真实的设备上(因此模拟器基础解决方案不适用)。
基本上,当发生这种情况时,将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)
在构建中启用jumboMode标志(dex.force.jumbo=true)后,我遇到了这个问题。在更新的Android设备上一切正常,但在Gingerbread上安装失败。
因此,如果你的应用程序由于烦人的65k限制而需要巨型模式,尝试删除一些未使用的代码/字符串,并将巨型模式设置为false。
对我来说,这是proguard导致INSTALL_FAILED_DEXOPT在一些三星设备与Android 5.x。
也就是说,我必须添加这个来保护-不知道为什么它有帮助。
-keepattributes LocalVariableTable
在我的案例中,问题发生在一些运行API 21和22的设备上。在应用程序标签下的manifest中设置android:vmSafeMode="true"解决了这个问题。但是,不建议发布版本使用它,所以我在values文件夹中创建了两个xml文件。旧API的默认值:
<resources>
<bool name="vm_safe_mode">true</bool>
</resources>
API的>= 23值为假,也是如此。在这种情况下,操作系统更新的设备不会受到影响,旧的设备至少可以工作。
我得到了同样的错误,并通过增加内部存储的大小来修复它。
内部存储最初设置为32MB(我知道),然后我在上面安装了几个apks,这比需要安装的apks所留下的空间要小。