com.android.build.transform.api.TransformException


158

我试图将Google登录集成到我的应用中,并添加了以下库:

compile 'com.google.android.gms:play-services-identity:8.1.0'
compile 'com.google.android.gms:play-services-plus:8.1.0'

还将其添加到项目构建gradle:

classpath 'com.google.gms:google-services:1.4.0-beta3'

还将插件添加到应用程序构建gradle:

apply plugin: 'com.google.gms.google-services'

然后添加所需的权限,但是当我尝试运行我的应用程序时,收到此错误:

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

Answers:


312

尝试添加multiDexEnabled true到您的应用程序build.gradle文件中。

 defaultConfig {
    multiDexEnabled true
}

编辑:

首先尝试史蒂夫的答案。万一它经常发生或第一步没有帮助multiDexEnabled可能会有所帮助。对于那些喜欢在这里进行更深入研究的人,还有几个类似的问题(有更多答案):

:app:dexDebug ExecException完成,退出值非零2

错误:任务':app:dexDebug'的执行失败。com.android.ide.common.process.ProcessException


3
没有为我工作。史蒂夫的答案-清洁就可以解决问题。我刚刚升级到AS1.5预览版
Scott Scott

6
公平地说,您应始终检查是否可以通过清洁解决问题。我坚信,这将对那些清洗不了的人有所帮助。
JuliusScript

这两个对我都没有帮助-但重新启动AS最终成功了:)
Maciej Boguta 2015年

这些
都不

1
我还建议您在使用此解决方案之前先在下面(stackoverflow.com/a/33690032/1617737)中查看A Grandt的答案。
ban-geoengineering 2015年

146

要注意的另一件事是,您不使用

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

这将导入所有play服务,并且只需要一个hello世界,就可以超过单个dex APK的65535方法限制。

始终仅指定您需要的服务,例如:

compile 'com.google.android.gms:play-services-identity:8.3.0'
compile 'com.google.android.gms:play-services-plus:8.3.0'
compile 'com.google.android.gms:play-services-gcm:8.3.0'

10
你是最棒的!这解决了我的问题。如许多解决方案中所述,对于我而言,重建无济于事。正如您所提到的,Google Play服务库包含许多子组件,应按您所说的那样逐一导入。再次非常感谢!
伊万·卡拉瓦尼奥

2
最近几天我遇到了这个问题。我以为我只选了我需要的东西。但是,瞧瞧,经过数小时的观察,我想导入所有的播放服务,而我想要的只是播放服务广告。绝对检查您的gradle依赖人!
MCLLC

@ A.Grandt您可以在答案中添加Ivan给出的链接吗?它包含所有子组件名称的列表,应该作为答案的一部分,因为这是每个人都必须采取的下一步。
Murmel '16

137

我只需要清理我的项目,然后就可以成功构建它。


4
谢谢!它完美地工作!可以接受的答案很奇怪,因为我的项目还远远没有达到65K的方法极限(这需要multidex)。
路易CAD

4
是的,清洁是必经之路。AS 1.4
费利佩·卡尔达斯

如果您有库模块,请清除项目中的所有模块以使其正常运行。仅清洁单个模块对我不起作用。清理整个项目。
2016年

有人可以告诉我如何清理项目吗?我一直在尝试很多“组合”,但没有任何效果。我看到每个人都说“干净”,但不知道如何。谢谢。
阿尔贝托·卢比奥

@AlbertoRubio,在AS工具栏中的Build> Clean Project下。
Chantell Osejo

23

当我向项目中添加一些新方法时,这个错误就开始出现。我知道我距离65k方法的极限还很遥远,并且如果可以帮助我,不想为我的项目启用multiDex支持。

我通过增加:app:transformClassesForDexForDebug任务可用的内存来解决它。我通过指定这样做javaMaxHeapSizegradle.build

gradle.build

android {
    ...
    dexOptions {
        javaMaxHeapSize "4g" //specify the heap size for the dex process
    }
}

在解决此问题的其他常见解决方案均未成功之后,我尝试了以下方法:

  • 运行一个项目 clean
  • 从我的项目中手动删除/app/build/build目录
  • 使Gradle缓存无效并重新启动Android Studio

错误

错误:任务>':app:transformClassesWithDexForDebug'的执行失败。com.android.build.api.transform.TransformException:com.android.ide.common.process.ProcessException:org.gradle.process.internal.ExecException:处理'command'/Library/Java/JavaVirtualMachines/jdk1.8.0_45。 jdk / Contents / Home / bin / java''完成,退出值非零1

注意:增加DEX任务可用的内存可能会导致内存链接较低的系统出现性能问题。


这对我
有用

8

我在Android Studio 1.5.1和Gradle 1.5.0中也遇到了类似的问题。我只需要从依赖项中删除不需要的库,这些库可能会自动添加到我的应用程序的build.gradle文件中。一个是:编译'com.google.android.gms:play-services:8.4.0'。因此,对于最佳做法,请尝试仅包含特定的播放服务库,例如仅包含广告

dependencies {
    compile 'com.google.android.gms:play-services-ads:8.4.0'
}

虽然

defaultConfig {
    multiDexEnabled true
}

这也可以解决问题,但是在gradle控制台中提供了许多Notes,这使得在构建过程中查找其他实际问题变得令人困惑


将我的Google api的使用范围缩小到仅play-services-maps就可以了。这是Google对play-services API中各个组件的正式分类:developers.google.com/android/guides/…–
jperl

4

您可以查看Android的文档

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.0"

    defaultConfig {
        ...
        minSdkVersion 14
        targetSdkVersion 21
        ...

        // Enabling multidex support.
        multiDexEnabled true
    }
    ...
}

dependencies {
  compile 'com.android.support:multidex:1.0.0'
}

Manifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.multidex.myapplication">
    <application
        ...
        android:name="android.support.multidex.MultiDexApplication">
        ...
    </application>
</manifest>

3

我正在使用AS 1.5.1并遇到相同的问题。但是仅仅清理项目是行不通的,所以我尝试了一些。

  • 清洁项目
  • 重新启动AS
  • 同步项目

这与我合作,所以希望对您有所帮助。


3
对于超出64k Dex方法限制的项目,这将毫无意义。
IgorGanapolsky '16


2

就我而言,发生异常是因为所有的Google Play服务扩展名都不具有相同的版本,如下所示

 compile 'com.google.android.gms:play-services-plus:9.8.0'
 compile 'com.google.android.gms:play-services-appinvite:9.8.0'
 compile 'com.google.android.gms:play-services-analytics:8.3.0'

当我将其更改为

compile 'com.google.android.gms:play-services-plus:9.8.0'
 compile 'com.google.android.gms:play-services-appinvite:9.8.0'
 compile 'com.google.android.gms:play-services-analytics:9.8.0'

1
我没有浏览所有的答案,也没有看到您的答案,所以…… 大约一个小时后,我发现是我的情况:/
denispyr

2

我用下一个解决了:

我配置了 multidex

在build.gradle中,您需要添加下一个。

android {
...
   defaultConfig {
       ...
       // Enabling multidex support.
       multiDexEnabled true
       ...
   }
   dexOptions {
      incremental true
      maxProcessCount 4 // this is the default value
      javaMaxHeapSize "2g"
   }
...
}
dependencies {
...
   compile 'com.android.support:multidex:1.0.1'
...
}

在local.properties中添加下一个

org.gradle.parallel=true
org.gradle.configureondemand=true
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

之后将其添加到Application类中,您还需要添加Multidex。

 public class MyApplication extends MultiDexApplication {

   @Override
   public void onCreate() {
       super.onCreate();
       //mas codigo
   }

   @Override
   protected void attachBaseContext(Context base) {
       super.attachBaseContext(base);
       MultiDex.install(this);
   }
}

不要忘记将行代码添加到Manifest.xml中

<application
    ...
    android:name=".MyApplication"
    ...
/>

足以解决错误:任务':app:transformClassesWithDexForDebug执行失败。用javaMaxHeapSize“ 2g”很好地检查build.gradle,并且local.properties org.gradle.jvmargs = -Xmx2048m的大小为2 GB。


2
请仅以英文发布。这看起来像是一个不错的答案,因为它不是英语,所以删除它是一个耻辱。
Tunaki

1

当我通过git回滚到旧版本时,我遇到了同样的问题,并且该版本以前具有一个第三方api的.jar库,由于某种原因,原来两个sdk的jar都在/ libs文件夹中, 。


1

首先删除您的APP FOLDER \ app \ build \ intermediates中间文件或清洁您的项目,然后重新生成。

新增

multiDexEnabled true

defaultConfig {
        multiDexEnabled true
}

对我有用


1

我通过更改使用最新解决了这个问题 buildToolsVersion

android {
    //...
    buildToolsVersion '26.0.2' // change from '23.0.2'
    //...
}

1

如果以上所有方法都不适合您,则将是一个有用的答案。

转到您的应用gradle文件,

检查是否使用正确的版本代码而不是(com.example.demo:+)之类的任何相对值提到了所有依赖项版本

上一个-实施'com.google.api-client:google-api-client-android:+'

之后-实施'com.google.api-client:google-api-client-android:1.30.0'


0

如果您使用的是最新的gradle版本(即) classpath 'com.android.tools.build:gradle:1.5.0' and classpath 'com.google.gms:google-services:1.4.0-beta3',请尝试从SDK管理器中更新最新的支持资源库,然后重建整个项目。



0

如果不同的依赖项具有相同的jar,也会导致此生成错误。

例如:

compile('com.a.b:library1');
compile('com.c.d:library2');

如果“ library1”和“ library2”具有相同的jar xxx.jar,则将产生此错误。



0

我在gradle中更改了几个png和内部版本号,现在我明白了。没有任何清理和重新启动的帮助。禁用Instant Run为我修复了它。青年汽车


0

我有相同的选择,并且一旦我关闭即时运行,它就可以在我的API16设备上正常运行,但是在API24设备上,它可以与即时运行一起正常运行。

希望这可以帮助遇到同样问题的人


0

只需转到Build-Edit Build Types-Properties选项卡-Build Type Version并将其降级到ver 23.0.1。单击确定。这适用于android studio 1.5。它为我工作。


0

写答案在gradle中,将defaultConfig {multiDexEnabled true} 放在清单 android:name =“ android.support.multidex.MultiDexApplication”中,希望该答案对某些人有用


0

此代码解决了问题

defaultConfig {
        multiDexEnabled true
}

实现Google登录最简单的方法,请访问:Google登录Android

也试试

dexOptions {
        javaMaxHeapSize "4g" 
    }

同时为不同的服务保留相同的版本号。


0

我通过添加以下内容解决了此问题build.gradle

defaultConfig {
    multiDexEnabled true
}

local.properties

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

提及依赖:

compile 'com.android.support:multidex:1.0.1'

清理并重建。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.