问题
I am developing an Android application using Android 2.2, my application APK size is 22.5 MB, and I would like to create a new build for a Samsung tablet. I got the following error:
INSTALL_FAILED_DEXOPT
How do I solve this kind of error?
回答1:
Restarting the emulator from the Android SDK and AVD Manager
and selecting the option Wipe User Data
has solved this problem for me.
You can find the option as highlighted in the below given image:
回答2:
This seemed to be related to disk space for me. A newly rolled 5.1 emulator boots with a "low on disk space" error - and looking at the emulator properties, the default space allocated for internal storage is 800MB which seems low.
Solution, therefore was to increase this (I went to 4GB). Oddly the emulator still boots with the same disk space warning but factory resetting it (Settings --> Backup and Restore inside the emulator) solved it entirely for me.
Just a bit odd that it doesn't work out of the box with default settings.
回答3:
Your old version of the app that you are installing has dependent libraries / jars that have been changed. I ran into this issue when updating other jar files that my app was refrencing.
You will need to Uninstall your old version and then you should have no more issues...
Settings-->Applications-->Manage Applications-->[Find and Uninstall your App]
INSTALL_FAILED_DEXOPT errors should not erupt. Like
[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.
回答4:
If you are using Android Studio, try clean your project:
Build > Clean Project
回答5:
It seems like this error message can have many different causes. The case I came across was on a real device (so the emulator bases solutions did not apply).
Basically, when this happens, set your Logcat filter to Verbose or Warn, which will help you get more information about the cause.
In my case, multiple or conflicting versions of JUnit were being included in the project I was working on (a large existing codebase). The Android app I was trying to deploy had several library projects as dependencies, and I had mistakenly set things up to include multiple JUnit jar files.
I discovered this based on a series of Logcat messages. Note that the WARN line gives the cause:
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)
回答6:
I' changed the RAM size and internel storage capacity of the emulator Now IT IS Working... in eclipse AVD manager
回答7:
try my answer https://stackoverflow.com/a/34918549/3737254
if you use android studio 2.0, DISABLE the instant run.
FYI, instant run is new feature from android studio 2.0 (i never used it >.<)
how to disable : preferences -> build, execution & deployment -> instant run -> disable, then works like magic
Enjoy!
回答8:
Ran into this with Android Studio 3.4.1 but using an older (5.0) emulator. This procedure (on Mac) fixed the issue:
- stop emulator
- cd ~/.android/avd/[emulator name].avd
- rm *.lock
- wipe emulator
- start emulator
回答9:
I needed to disable Instant Run to fix the issue. To disable Instant Run on OS X, go to Android Studio > Preferences > Build, Execution, Deployment > Instant Run then remove the tick from Enable Instant Run to hot swap code/resource changes on deploy (default enabled)
.
回答10:
I am working with Android Studio and had the same error.
Deleting the build folder of the main Modul helped. After deleting everything get back to normal.
回答11:
I had the same issue today with Android Studio on a new virtual device. It appeared I had downloaded the x86_64
image, recreating the VD with the equivalent x86
image fixed it.
I expected to get a INSTALL_FAILED_NO_MATCHING_ABIS
in this case but somehow I was stuck with INSTALL_FAILED_DEXOPT
回答12:
INSTALL_FAIL_DEXOPT usually has to do with the limit placed on classes.dex. On anything pre-ICS dexopt will fail on anything over 5 MB. Recent versions of Android use an 8 or 16 MB buffer.
Check the size of classes.dex in your APK. It would also be good to see what your method count is, as dex has a 65536 method/field limit.
References:
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
回答13:
I ran into this problem after enabling the jumboMode flag in the build (dex.force.jumbo=true
). Everything worked fine on newer Android devices, but installation failed on Gingerbread.
So if your app requires jumbo mode due to the annoying 65k restriction, try cutting some unused code/strings and setting jumbo mode back to false.
回答14:
classes.dex
does not make it to the final .apk
. Running gradlew --offline clean && gradlew --offline assembleDebug
fixed things for me every time. From that point you can start launching the app from Android Studio again.
EDIT: Before what I said above go to Task Manager and kill all cmd.exe
and conhost.exe
processes (or just the one in which aapt
got stuck). Otherwise aapt
would crash from now on when launched from command line with the infamous error -1073741819
.
回答15:
I got the same error and fixed it by increasing the size of internal storage.
The internal storage was initially set to 32MB(I know) and then I installed a couple of apks on it, which had left less space than what was needed for the one to be installed.
回答16:
verify the storage space on your device
回答17:
I had the app uninstalled and got the INSTALL_FAILED_DEXOPT error nevertheless. If you are working with Android Studio / gradle: gradle clean did the trick for me, Cheers.
回答18:
in build.gradle change compiled and build to latest version. and it worked for me.
================
android {
compileSdkVersion 22
buildToolsVersion "22"
回答19:
targetSdkVersion 22//17==========================> set this number less then or equal to the version of Android OS on devices might help
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
}
回答20:
The only solution that worked for me to fixed this was to increase the VM's RAM to 4GB.
回答21:
I was getting this issue when trying to install on 2.3 devices (fine on 4.0.3). It ended up being due to a lib project i was using had multiple jars which were for stuff already in android e.g. HttpClient and XML parsers etc. Looking at logcat
led me to find this as it was telling me it was skipping classes due to them already being present. Nice unhelpful original error there!
回答22:
I had this error testing on a real device. Clearing cache/uninstalling, restarting everything didn't work for me, deleting the contents of the build folder did :) (Android studio)
回答23:
There's no generic solution, you have to find the error reported on your Logcat to be able to figure it out. Sometimes it's a class that can't be 'dexed' due to an usage of a class not available on the specified Target API for instance. Or it could be a class that you're making reference in your code, but the library that it is in is not being packaged.
回答24:
Consider using proguard to shrink your APK. I have the same issue if I try to install a large 25MB+ APK on an old Samsung Galaxy Ace 2.3.6 device without shrinking/optimizing code with proguard.
Jumbo mode and restarting the device is not working.
回答25:
In my case, this was a bug in kotlin plugin, version 1.1.51
https://youtrack.jetbrains.com/issue/KT-20034
This error appeared on old devices (API 16).
Fixed this by removing @Parcelize annotations and replacing them with this code generator: https://github.com/nekocode/android-parcelable-intellij-plugin-kotlin
回答26:
I found there's one reason for this problem: not enough space on mobile. So I delete several APP from mobile and it's fixed.
回答27:
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.
回答28:
Solved by correcting date time on the phone (it was some default date 01.01.1980), and cleaning the project.
回答29:
I had changed my version of android version 4 support for sdk 21 and had this error. So I went back the version of support for the old version (before 21) and it worked. The error was occurring only in android 2.3
回答30:
I've ran into this problem when I was trying to update new build tools 24.0.1. Internet connection was lost and tools was not downloaded successfully, after that I got this error and spent a lot of time trying to solve it. But when I succesfully updated build tools - problem solved. Good luck.
来源:https://stackoverflow.com/questions/5153515/how-do-i-solve-the-install-failed-dexopt-error