Android Studio无法解决错误':app:preDexDebug'。

6

我刚刚从Eclipse转移到令人生畏的Android Studio,遇到了一些问题,无法摆脱一个看起来相当常见的错误。

Error:Execution failed for task ':app:preDexDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/usr/lib/jvm/java-7-oracle/bin/java'' finished with non-zero exit value 1

我找遍了所有可能的解决方案,包括简单地重启我的开发工具、无效化和清除缓存、删除相关的JAR文件并尝试再次添加,但目前为止都没有生效。由于我对这个IDE非常陌生,因此我甚至不知道它是如何工作的以及构建文件应该长什么样子。

以下是我当前的build.gradle(Module:app)文件:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.example.culami"
        minSdkVersion 21
        targetSdkVersion 21
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_7
            targetCompatibility JavaVersion.VERSION_1_7
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile 'com.android.support:appcompat-v7:21.0.3'
    compile 'com.android.support:support-v4:21.0.3'
    compile files('libs/WebSocket.jar')
    compile files('libs/android-support-v13.jar')
    compile files('libs/json-org.jar')
    compile files('libs/socketio.jar')
}

这个项目是从Eclipse导入的,原因是我在使用json-org.jar和WebSocket.jar时遇到了一些构建问题。我无法解决这个问题,问题仍然存在。我不确定如何通过gradle添加这些依赖项,因为github页面并没有提供明确的说明。
以下是Gradle控制台的输出结果。
Executing tasks: [:app:assembleDebug]

Configuration on demand is an incubating feature.
:app:preBuild UP-TO-DATE
:app:preDebugBuild UP-TO-DATE
:app:compileDebugNdk UP-TO-DATE
:app:checkDebugManifest
:app:preReleaseBuild UP-TO-DATE
:app:prepareComAndroidSupportAppcompatV72103Library UP-TO-DATE
:app:prepareComAndroidSupportSupportV42103Library UP-TO-DATE
:app:prepareDebugDependencies
:app:compileDebugAidl UP-TO-DATE
:app:compileDebugRenderscript UP-TO-DATE
:app:generateDebugBuildConfig UP-TO-DATE
:app:generateDebugAssets UP-TO-DATE
:app:mergeDebugAssets UP-TO-DATE
:app:generateDebugResValues UP-TO-DATE
:app:generateDebugResources UP-TO-DATE
:app:mergeDebugResources UP-TO-DATE
:app:processDebugManifest UP-TO-DATE
:app:processDebugResources UP-TO-DATE
:app:generateDebugSources UP-TO-DATE
:app:compileDebugJava UP-TO-DATE
:app:preDexDebug UP-TO-DATE
:app:dexDebug
AGPBI: {"kind":"SIMPLE","text":"UNEXPECTED TOP-LEVEL EXCEPTION:","position":{},"original":"UNEXPECTED TOP-LEVEL EXCEPTION:"}
AGPBI: {"kind":"SIMPLE","text":"com.android.dex.DexException: Multiple dex files define Landroid/support/annotation/AnimRes;","position":{},"original":"com.android.dex.DexException: Multiple dex files define Landroid/support/annotation/AnimRes;"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:596)","position":{},"original":"\tat com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:596)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:554)","position":{},"original":"\tat com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:554)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:535)","position":{},"original":"\tat com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:535)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171)","position":{},"original":"\tat com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.merge.DexMerger.merge(DexMerger.java:189)","position":{},"original":"\tat com.android.dx.merge.DexMerger.merge(DexMerger.java:189)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454)","position":{},"original":"\tat com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.command.dexer.Main.runMonoDex(Main.java:303)","position":{},"original":"\tat com.android.dx.command.dexer.Main.runMonoDex(Main.java:303)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.command.dexer.Main.run(Main.java:246)","position":{},"original":"\tat com.android.dx.command.dexer.Main.run(Main.java:246)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.command.dexer.Main.main(Main.java:215)","position":{},"original":"\tat com.android.dx.command.dexer.Main.main(Main.java:215)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.command.Main.main(Main.java:106)","position":{},"original":"\tat com.android.dx.command.Main.main(Main.java:106)"}


 FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:dexDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/usr/lib/jvm/java-7-oracle/bin/java'' finished with non-zero exit value 2

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 23.247 secs

任何关于如何修复这个 preDexDebug 错误的帮助都将是极大的帮助!另外,我也无法在左侧的项目资源管理器中看到我的“libs”文件夹。

在命令行上使用Gradlew。阅读有关使用它的信息。然后将--info --debug --stacktrace开关添加到cli构建中。如果需要处理大量输出,请将cli stdout保存到文件中。仔细查看输出。 - Robert Rowntree
我将研究如何使用CLI。你能指点我一个好的资源吗?此外,我还不确定如何获得这个输出,但我会尝试获取并上传到问题中以进一步明确。 - Darth Coder
2个回答

7

如果您的"gradle.build"文件中有一个或多个出现多次的jar文件或库,并且需要使用"配置"来处理它们,请按照以下步骤操作:

查找如何使用类似以下方式分析依赖项:

./gradlew :app:dependencies

Wrapper的背景

./gradlew --info clean assembleDebug > ../myProj_build

会在构建文件中提供额外的信息,您可以分析这些信息以获取有关“preDex”错误的详细信息。


4
你把jar依赖项添加为编译依赖项。你应该将其添加为“提供的”(请参见自述文件)。

1
是的,将build.gradle脚本中的compile fileTree(dir: 'libs', include: '*.jar')compile files('libs/xyz.jar')更改为provided fileTree(dir: 'libs', include: '*.jar')解决了这个问题。然而,这个问题的出现是因为当用户选择将其作为库包含时,Android Studio会自动将JAR文件放置在compile files('libs/xyz.jar')中,没有选择编译标签与提供标签之间的选项。 - cyber101

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