Android- 错误:执行任务':app:transformClassesWithDexForRelease'失败

201

问题在于当我切换到 debug 模式时,我的应用程序能够运行,但当我切换到 release 模式时,它就会失败。

异常:

**FAILURE: Build failed with an exception.**
> Execution failed for task ':app:transformClassesWithDexForRelease'.
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_65.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1
当我使用 stacktrace 运行 gradle build 命令时,这是我得到的结果。
./gradlew app:transformClassesWithDexForRelease --stacktrace

> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_73.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1

*Exception is:*

>org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformClassesWithDexForRelease'.
            at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
            at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
            at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
            at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
            at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
            at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:52)
            at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
            at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
            at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
            at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:203)
            at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:185)
            at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:66)
            at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:50)
            at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:25)
            at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:110)
            at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:37)
            at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
            at org.gradle.execution.DefaultBuildExecuter.access$000(DefaultBuildExecuter.java:23)
            at org.gradle.execution.DefaultBuildExecuter$1.proceed(DefaultBuildExecuter.java:43)
            at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
            at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
            at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:30)
            at org.gradle.initialization.DefaultGradleLauncher$4.run(DefaultGradleLauncher.java:154)
            at org.gradle.internal.Factories$1.create(Factories.java:22)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:52)
            at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:151)
            at org.gradle.initialization.DefaultGradleLauncher.access$200(DefaultGradleLauncher.java:32)
            at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:99)
            at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:93)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
            at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:62)
            at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:93)
            at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:82)
            at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:94)
            at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28)
            at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
            at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:43)
            at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:28)
            at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:78)
            at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:48)
            at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:52)
            at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
            at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:37)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
            at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
            at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
            at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74)
            at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72)
            at org.gradle.util.Swapper.swap(Swapper.java:38)
            at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
            at org.gradle.launcher.daemon.server.health.DaemonHealthTracker.execute(DaemonHealthTracker.java:47)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
            at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:66)
            at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
            at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:72)
            at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
            at org.gradle.launcher.daemon.server.health.HintGCAfterBuild.execute(HintGCAfterBuild.java:41)
            at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
            at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)
            at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:246)
            at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
            at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
    Caused by: java.lang.RuntimeException: com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_73.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1
            at com.android.builder.profile.Recorder$Block.handleException(Recorder.java:54)
            at com.android.builder.profile.ThreadRecorder$1.record(ThreadRecorder.java:57)
            at com.android.builder.profile.ThreadRecorder$1.record(ThreadRecorder.java:47)
            at com.android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:173)
            at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:75)
            at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$IncrementalTaskAction.doExecute(AnnotationProcessingTaskFactory.java:244)
            at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:220)
            at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$IncrementalTaskAction.execute(AnnotationProcessingTaskFactory.java:231)
            at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:209)
            at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
            at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
            ... 68 more
    Caused by: com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_73.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1
            at com.android.build.gradle.internal.transforms.DexTransform.transform(DexTransform.java:422)
            at com.android.build.gradle.internal.pipeline.TransformTask$3.call(TransformTask.java:178)
            at com.android.build.gradle.internal.pipeline.TransformTask$3.call(TransformTask.java:174)
            at com.android.builder.profile.ThreadRecorder$1.record(ThreadRecorder.java:55)
            ... 77 more
    Caused by: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_73.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1
            at com.android.builder.core.AndroidBuilder.runDexer(AndroidBuilder.java:1472)
            at com.android.builder.core.AndroidBuilder.convertByteCode(AndroidBuilder.java:1389)
            at com.android.build.gradle.internal.transforms.DexTransform.transform(DexTransform.java:250)
            ... 80 more
    Caused by: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_73.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1
            at com.android.builder.core.AndroidBuilder.runDexer(AndroidBuilder.java:1456)
            ... 82 more
    Caused by: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_73.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1
            at com.android.build.gradle.internal.process.GradleProcessResult.assertNormalExitValue(GradleProcessResult.java:43)
            at com.android.builder.core.AndroidBuilder$2.call(AndroidBuilder.java:1464)
            at com.android.builder.core.AndroidBuilder$2.call(AndroidBuilder.java:1456)
    Caused by: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_73.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1
            at org.gradle.process.internal.DefaultExecHandle$ExecResultImpl.assertNormalExitValue(DefaultExecHandle.java:367)
            at com.android.build.gradle.internal.process.GradleProcessResult.assertNormalExitValue(GradleProcessResult.java:41)
            ... 2 more

我正在使用:

  • Android Studio 2.0 Beta 6
  • Java版本:Java(TM) SE Runtime Environment (build 1.8.0_73-b02)
  • Gradle版本:com.android.tools.build:gradle:2.0.0-beta6
  • 我已启用Multidex

我的build.gradle文件:

apply plugin: 'com.android.application'
apply plugin: 'com.getkeepsafe.dexcount'

android {

    def VERSION_CODE = 52
    def VERSION_NAME = "1.0"
    compileSdkVersion 23
    buildToolsVersion '23.0.2'

    defaultConfig {
        applicationId "com.example.app"
        manifestPlaceholders = [appName: "Personal App"]
        minSdkVersion 14
        targetSdkVersion 23
        renderscriptTargetApi 19
        renderscriptSupportModeEnabled true
        versionCode VERSION_CODE
        versionName VERSION_NAME

        // Enabling multidex support.
        multiDexEnabled true
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
        encoding = 'UTF-8'
    }

    signingConfigs {
        livekeystore {
            storeFile file('../key.jks')
            keyAlias 'livekeystore'
            keyPassword '123asd'
            storePassword '123asd'
        }
    }


    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            zipAlignEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
            signingConfig signingConfigs.burgerking

            manifestPlaceholders = [googleMapsKey: "@string/release_google_map_key", appNameSuffix: ""]
        }

        debug {
            applicationIdSuffix '.dev'
            debuggable true
            minifyEnabled false
            shrinkResources false
            zipAlignEnabled false

            manifestPlaceholders = [googleMapsKey: "@string/debug_google_map_key", appNameSuffix: ' (Dev-' + VERSION_CODE + ')']

        }
    }

    dexOptions {
        incremental true
        javaMaxHeapSize "4g" // 2g should be also OK
    }

    useLibrary 'org.apache.http.legacy'

}

repositories {
    maven { url 'https://mint.splunk.com/gradle/' }
    maven { url "http://dl.bintray.com/populov/maven" }
    mavenCentral()
}

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:0.4.2'
        classpath 'com.newrelic.agent.android:agent-gradle-plugin:4.244.0'
    }
}


dependencies {
    compile 'com.google.code.gson:gson:2.4'
    compile 'com.android.support:appcompat-v7:23.2.0'
    compile 'com.android.support:recyclerview-v7:23.2.0'
    compile 'com.android.support:cardview-v7:23.2.0'
    compile 'com.android.support:design:23.2.0'
    compile 'com.android.support:multidex:1.0.1'
    compile 'com.google.android.gms:play-services-base:8.4.0'
    compile 'com.google.android.gms:play-services-location:8.4.0'
    compile 'com.google.android.gms:play-services-analytics:8.4.0'
    compile 'com.google.android.gms:play-services-maps:8.4.0'
    compile 'com.google.android.gms:play-services-ads:8.4.0'
    compile 'com.googlecode.libphonenumber:libphonenumber:7.0.5'
    compile 'com.facebook.android:facebook-android-sdk:4.1.1'
    compile 'de.greenrobot:eventbus:2.4.0'
    compile 'com.viewpagerindicator:library:2.4.1@aar'
    compile 'com.nineoldandroids:library:2.4.0'
    compile 'com.squareup.picasso:picasso:2.5.2'
    compile 'com.squareup:pollexor:2.0.2'
    compile 'com.makeramen:roundedimageview:2.1.0'
    compile 'com.mcxiaoke.volley:library:1.0.16@aar'
    compile files('libs/now-auth-api.jar')
    compile 'com.jakewharton:butterknife:5.1.2'
    compile 'com.github.ksoichiro:android-observablescrollview:1.2.0'
    compile 'io.card:android-sdk:5.3.0'
    compile 'com.appboy:android-sdk-ui:1.10.3'
    testCompile 'junit:junit:4.11'
    testCompile('org.mockito:mockito-core:1.9.5') {
        exclude group: 'org.hamcrest'
    }
    testCompile('org.powermock:powermock-module-junit4:1.5') {
        exclude group: 'org.hamcrest'
    }
    testCompile('org.powermock:powermock-api-mockito:1.6.2') {
        exclude group: 'org.hamcrest'
    }

    compile 'me.grantland:autofittextview:0.2.1'

}

如果我从发布版本中移除minifyEnabled true,似乎可以使其正常工作。为什么会这样,还有其他解决方法吗?


你能否发布你应用程序的 build.gradle 文件? - Harisewak
@Harisewak 我已经更新了问题,请现在看一下。 - Sheraz Ahmad Khilji
是的@Sheraz,你说得对,将minifyEnabled切换为false可以解决这个问题。我在文档中读到了这个:“您必须启用minifyEnabled才能打开代码收缩,然后shrinkResources才能打开资源收缩。如果您之前没有使用minifyEnabled,请确保使其工作,然后再添加shrinkResources,因为您可能需要编辑proguard-rules.pro文件,以确保任何使用反射等方法的访问都列在该文件的keep规则中。”(http://tools.android.com/tech-docs/new-build-system/resource-shrinking)。看看是否符合情况。 - Harisewak
1
@Harisewak,如果我使用调试运行任务仍然无法解决问题,我会得到以下错误信息:“未捕获的翻译错误:com.android.dx.cf.code.SimException: com.android.dx.rop.cst.CstMethodRef 无法转换为 com.android.dx.rop.cst.CstInterfaceMethodRef”。 - Sheraz Ahmad Khilji
我在我的项目中遇到了同样的问题。如果我使用com.android.tools.build:gradle:1.3.0,我可以编译。一旦我使用2.0.0,它就会给我相同的问题。 - Santacrab
显示剩余3条评论
40个回答

193

我只是修复了这段代码。

local.properties

org.gradle.jvmargs=-XX\:MaxHeapSize\=512m -Xmx512m

你应该在 Gradle 上进行这个更改。

defaultConfig {
    applicationId "yourProjectPackage"
    minSdkVersion 15
    versionCode 1
    versionName "1.0"
    targetSdkVersion 23

    multiDexEnabled true //important
}

4
“local.properties”是一个文件名还是一个配置值?它在项目中的哪个文件夹里(例如:在哪个文件夹下)? - Ulysses Alves
1
本地属性文件放在项目的根目录中。如果您遇到有关multiDex的问题-> https://developer.android.com/studio/build/multidex.html - aemre
我刚在我的build.gradle文件中插入了multiDexEnabled true,然后就完成了。谢谢。 - Marcelo Gumiero
我不知道这一切的意思,但对我来说它起作用了! - DaveNOTDavid
在API <21上,如果没有从MultiDexApplication扩展Application类而使用multiDexEnabled将导致NoClassDefFoundError。 - Miha_x64
org.gradle.jvmargs=-XX\:MaxHeapSize\=512m -Xmx512m 对我有用,谢谢! - Olegdater

85

如果您在应用程序的defaultConfig中设置multiDexEnabled = true,则将获得所需的结果。

defaultConfig {
    minSdkVersion 14
    targetSdkVersion 22
    multiDexEnabled = true
}

这不是允许Multidex的唯一步骤。而且,只有在出现DexException时才需要它。https://developer.android.com/studio/build/multidex.html - OneCricketeer

46

对我来说,问题在我从项目中移除 jar 文件后被 解决了。看来我的项目中有一个 jar 文件正在使用旧版本的 google play services


同样的问题出现在jackrabbit-standalone-2.12.2.jar上。如果我将它添加到项目中,那么问题就会出现。 - Alexeev Valeriy
1
@MikeOx 我更新了一些 Android 工具,结果导致我有几个 jar 文件的两个版本,例如 mockable-android-24.jar 和 mockable-android-25.jar。删除旧版本解决了这些构建错误。 - parvus
但我没有使用任何JAR文件,为什么我会遇到这个问题? - Mr. Mad
22
请问您能否提供更详细的解释来说明这个解决方案? - Ivan Milisavljevic
@IvanMilisavljevic 现在你可以使用Gradle,而不是JAR文件。https://developers.google.com/android/guides/setup#split - OneCricketeer
非常感谢。我从来没有想到过这个。 - Kathir

39

我也遇到了同样的错误:

Error:Execution failed for task ':app:transformClassesWithDexForDebug'. com.android.build.api.transform.TransformException: java.lang.RuntimeException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.8.0_60\bin\java.exe'' finished with non-zero exit value 1

我通过以下步骤解决了这个问题:

  1. 打开你应用的 build.gradle(不是项目根目录下的那一个),并添加:

android {
//snippet
//add this into your existing 'android' block

    dexOptions {
    javaMaxHeapSize "4g"
    }

//snip
}
  • 再次尝试构建。

  • 注意:4g代表4千兆字节,这是dex操作的最大堆大小。


    救了我的一天!干杯! - hdotluna
    最好的...我已经四处漫游了几个小时..谢谢! - MbaiMburu

    35

    不需要使用Multidex,我再次强调,不需要使用Multidex


    让我详细说明一下:Multidex基本上是随Android一起提供的工具,如果将其设置为true,则具有超过64,000个方法的应用程序可以使用稍微修改的构建过程编译。然而,只有当您的错误看起来像这样时才需要使用multidex:

    trouble writing output: Too many field references: 131000; max is 65536. You may try using --multi-dex option.

    或者像这样

    Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536

    但这里(至少对我来说)并不是问题所在!这里的问题是由于build.gradle文件中的依赖关系引起的。

    解决方案:利用特定的依赖项-不要仅导入整个依赖项部分!

    例如,如果您需要Play服务依赖项以获取位置,请仅导入与位置相关的依赖项。

    DO:

    compile 'com.google.android.gms:play-services-location:11.0.4'
    

    不要:

    compile 'com.google.android.gms:play-services'
    

    可能导致这个问题的另一个原因是您正在使用某种外部库,该库引用了您依赖项的先前版本。在这种情况下,请按照以下步骤操作:

    1. 进入SDK管理器,并安装您依赖项的任何更新
    2. 确保您的build.gradle文件显示最新版本。要获取最新版本,请使用此链接:https://developers.google.com/android/guides/setup
    3. 编辑您的库(或安装更新版本,如果存在的话),以引用最新版本

    我知道这个问题很久远了,但我需要将这个答案传达出去,因为没有理由使用multidex可能会为您的应用程序造成ANR!只有在确定需要它并且了解它是什么时才使用multidex。

    我自己花了几个小时来解决这个问题,而没有使用multidex,我只是想分享我的发现——希望这能帮到你


    太棒了!完美运行! - stoefln
    1
    你如何知道哪个具体的依赖项引起了问题?我添加了 com.facebook.android:audience-network-sdk:4.+ 之后就无法构建了。 - Ciberman
    你救了我的一天! - Rowan
    1
    这样的回答太愚蠢了。如果你有很多依赖项,你肯定需要使用multi dex。只需添加kotlin库、一些谷歌服务(com.google.android.gms:play-services-*:*)、firebase服务、crashlytics、gson、androidx(支持库)、cardview、recyclerview、android.material:material即可。没有multi dex是不可能的(你喜欢大写锁定吗?我不喜欢,请下次不要在这里回答这样的问题...) - user155
    这里有些聪明的人! 没错!这不是multidex错误,multidex错误是另一回事,它可能来自某些依赖项。 @user155,RUCHIR不负责你的依赖问题!我喜欢大写锁定键 :) - Hossein

    26

    在应用级别的gradle文件中的defaultConfig中添加 multiDexEnabled true

    defaultConfig {
        applicationId "your application id"
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner"android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
    }
    

    24

    我在我的应用程序中也遇到了类似的问题。这是我所做的:

    1.在模块的 build.gradle 文件中添加以下内容: app

    multiDexEnabled = true
    

    所以代码会像这样:

        android {
        compileSdkVersion 25
        buildToolsVersion "25.0.2"
        defaultConfig {
            applicationId "com.example..."
            minSdkVersion 17
            targetSdkVersion 25
            versionCode 1
            versionName "1.0"
            multiDexEnabled = true
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
    
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }
    

    这对我有用,希望对你也有帮助 :)

    在同一项目中我也使用了Firebase。所以启用multiDexEnabled导致在Pre Lollipop设备上的Firebase出现另一个问题。一些FireBase类无法识别(Unable to get provider com.google.firebase.provider)。解决方法在这里有解释。


    minifyEnable true 给我抛出了异常 - 下面是我的问题,https://dev59.com/i63la4cB1Zd3GeqPM3Po 请帮我解决。 - Naveen

    21

    我在将Google Play服务从7.5升级到9.0时遇到了这个错误。

    以下是出错的部分:

    compile 'com.google.android.gms:play-services:9.0.0'
    

    当我改变为

    compile 'com.google.android.gms:play-services:7.5.0'
    

    没有错误。尝试一下这个


    1
    谢谢,我已经将版本更改为compile 'com.google.android.gms:play-services:8.4.0'。我认为Volley使用一些旧的Google Play服务,这些服务与play-services:>9.0不兼容。 - jai_b
    3
    这对我来说是个解决方法。问题在于有几个第三方模块引用了不同版本的play-services,所以这些版本怎么能保持一致呢?这是一个非常奇怪的架构细节。 - Ryan H.
    1
    请勿使用此功能。请选择性编译那些库。https://developers.google.com/android/guides/setup#split - OneCricketeer
    在哪里更改上述更改?你能告诉我文件名吗? - Shashwat Gupta

    14

    我升级到Android 3.4后,开始出现错误,尝试了以上所有解决方案。

    问题的根本原因是,更新Android Studio启用了“即时运行”功能。

    因此,你可以尝试的一种解决方案是禁用即时运行(如果它已启用),这个方法解决了我的问题。


    1
    我曾经遇到过同样的问题。禁用即时运行,然后再启用即时运行对我有用。 - Fogh
    1
    我的问题也解决了。不过要注意 - 即时运行很有用,所以希望很快能有更好的解决方法。 - Simon Hutton
    是的,绝对有用!希望很快就能修复!@SimonH - devDeejay
    1
    啊啊啊,他们总是在更新时启用它,这总是会引起很多问题。 - Oliver Dixon
    1
    是的,这也是我的问题所在,把Firebase放到项目中后,禁用即时运行终于让我构建它了,谢谢! - Starwave
    1
    禁用即时运行对我解决了这个问题。再也没有收到错误信息了。 - wesley franks

    12

    好的,我相信问题已经得到解答并已被接受。 但我将写出我所面临的问题以及我是如何解决它的。

    我也收到了同样的错误:

    错误:执行任务“:app:transformClassesWithDexForDebug”失败。 com.android.build.api.transform.TransformException:java.lang.RuntimeException:com.android.ide.common.process.ProcessException:java.util.concurrent.ExecutionException:com.android.ide.common.process.ProcessException:org.gradle.process.internal.ExecException:进程'command'C:\Program Files\Java\jdk1.8.0_60\bin\java.exe '完成时退出值为1

    我没有幸运地应用所有设置并取得成功。但当我尝试再次调试项目时, 这次我遇到三个错误(包括上述错误):

    错误:Java HotSpot(TM)64位服务器VM警告:CodeCache已满。编译器已禁用。

    错误:Java HotSpot(TM)64位服务器VM警告:请使用-XX:ReservedCodeCacheSize =增加代码缓存大小

    那我做了什么? 我只是去了Android Studio:

    文件 > 无效的高速缓存/重新启动.. > 无效的&重新启动

    快速修复!

    额外说明:

    我在Gradle控制台中发现的内容:

    :app:incrementalDebugTasks :app:prePackageMarkerForDebug :app:fastDeployDebugExtractor :app:generateDebugInstantRunAppInfo :app:transformClassesWithDexForDebug 为了在进程中运行dex,Gradle守护程序需要更大的堆。 它目前大约有910 MB。 为了更快地构建,请将Gradle守护进程的最大堆大小增加到2048 MB以上。 要做到这一点,在项目gradle.properties中设置org.gradle.jvmargs = -Xmx2048M。 有关更多信息,请参见https://docs.gradle.org/current/userguide/build_environment.html

    app:transformClassesWithDexForDebug FAILED

    点击此处查看Oracle博客的详细介绍


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