安卓应用安装失败,错误提示为:[INSTALL_FAILED_DEXOPT]

3
作为前言,我已经在StackOverflow和网络上查找了所有类似的问题,但都没有成功。我已经使用真实设备进行开发数月,没有任何问题。昨天我更新了之前使用的Android Studio到版本0.5.4。这次更新需要我升级Gradle版本到0.9,因为构建系统有一些重大变化。自从升级我的IDE后,当我尝试在设备上运行项目时,在运行控制台中会得到以下输出: 运行控制台输出
Waiting for device.
Target device: samsung-sch_i605-42f7bff119a3bf69
Uploading file
    local path: C:\Users\student\Android studioProjects\DrunkModeAndroid\DrunkMode\build\apk\DrunkMode-debug-unaligned.apk
    remote path: /data/local/tmp/com.launchfuture.drunk_mode
Installing com.launchfuture.drunk_mode
DEVICE SHELL COMMAND: pm install -r "/data/local/tmp/com.launchfuture.drunk_mode"
pkg: /data/local/tmp/com.launchfuture.drunk_mode    // this line is red
Failure [INSTALL_FAILED_DEXOPT]                     // this line is also red

日志输出

04-06 14:44:00.066    8040-8040/? D/Finsky﹕ [1] WorkerTask.onPreExecute: Verification Requested for id = 21, data=file:///data/local/tmp/com.launchfuture.drunk_mode flags=114 fromVerificationActivity=false 
04-06 14:44:01.586  12740-12740/? W/dalvikvm﹕ DexOptZ: zip archive '/data/app/com.launchfuture.drunk_mode-1.apk' does not include classes.dex 
04-06 14:44:01.591    2001-2001/? W/installd﹕ DexInv: --- END '/data/app/com.launchfuture.drunk_mode-1.apk' --- status=0xff00, process failed 
04-06 14:44:01.591    2001-2001/? E/installd﹕ dexopt failed on '/data/dalvik-cache/data@app@com.launchfuture.drunk_mode-1.apk@classes.dex' res = 65280 
04-06 14:44:01.591    2410-2621/? W/PackageManager﹕ Package couldn't be installed in /data/app/com.launchfuture.drunk_mode-1.apk

build.gradle

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.9.+'
    }
}
apply plugin: 'android'

repositories {
    mavenCentral()
}

dependencies {
    compile 'com.google.code.gson:gson:2.2.+'
    compile files('libs/Parse-1.4.0.jar')
    compile files('libs/GoogleAnalyticsServicesAndroid_3.01/libGoogleAnalyticsServices.jar')
    compile 'com.google.android.gms:play-services:4.1.32'
}

android {
    compileSdkVersion 19
    buildToolsVersion '19.0.0'

    defaultConfig {
        minSdkVersion 13
        targetSdkVersion 19
    }
}

我的安卓设备已经获取了Root权限,因此我可以查看指定位置的文件系统。需要注意的是,在/data/dalvik-cache/目录中并没有提到data@app@com.launchfuture.drunk_mode-1.apk@classes.dex。你们有没有处理这个问题的经验?


/data/dalvik-cache 上有多少可用空间? - Eugen Rieck
尝试将0.9.+更改为0.9.0。插件的0.9.1和0.9.2存在一些问题。我不记得它们有这些症状,但是值得一试,因为只需要更改一个字符。 :-) - CommonsWare
@EugenRieck 我不熟悉如何确定特定目录的可用空间,但是我的设备内部存储仍有3.6GB的可用空间。 - Philip Liberato
/data/dalvik-cache下没有DEX文件,因为在尝试创建它时dexopt失败了。 does not include classes.dex表示你的APK文件中没有"classes.dex"条目--可以使用Zip工具自行检查它。 - fadden
@fadden你说的很有道理,我原本以为使用Gradle作为构建系统时classes.dex文件会自动生成。那么我该如何确保在未来的APK文件编译中包含classes.dex文件呢? - Philip Liberato
显示剩余2条评论
2个回答

1
请您清空 /data/dalvik-cache 文件夹并重启设备(或从恢复模式中清除 dalvik 缓存),这样它就会被重新构建。

当你说要清空/data/dalvik-cache的内容时,是要我删除每个应用程序在该目录下的所有内容吗? - Philip Liberato
好的,与其那样做,不如进入恢复模式并从恢复中清除 Dalvik 缓存。这个过程会更加简便。 - CodeWalker
@Philip:你试过fadden的建议了吗?你用zip工具检查过你的APK文件中是否有classes.dex文件吗? - CodeWalker
我遇到了相同的错误,但我可以安装我们商店版本,只是无法在我的Droid3上安装调试版本。 我的调试apk中有classes.dex,在找不到问题所在的情况下。 - JPM

0
在已经root的手机上,安装lucky patcher,然后进入选项构建并通过lucky patcher安装,进入SD卡中所需安装的apk,点击它并选择安装为系统应用程序...完成后重新启动...它可以在移动系统应用程序空间的代价下工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接