com.android.build.transform.api.TransformException

sae*_*ini 159 java android gradle google-play-services google-signin

我正在尝试整合谷歌登录,在我的应用程序中,我添加了这些库:

compile 'com.google.android.gms:play-services-identity:8.1.0'
compile 'com.google.android.gms:play-services-plus:8.1.0'
Run Code Online (Sandbox Code Playgroud)

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

classpath 'com.google.gms:google-services:1.4.0-beta3'
Run Code Online (Sandbox Code Playgroud)

还为app build gradle添加插件:

apply plugin: 'com.google.gms.google-services'
Run Code Online (Sandbox Code Playgroud)

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

    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
Run Code Online (Sandbox Code Playgroud)

Jul*_*ipt 312

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

 defaultConfig {
    multiDexEnabled true
}
Run Code Online (Sandbox Code Playgroud)

编辑:

首先尝试史蒂夫的回答.如果它经常发生或第一步没有帮助multiDexEnabled可能会有所帮助.对于那些喜欢深入挖掘的人来说,有几个类似的问题(有更多的答案):

:app:dexDebug ExecException以非零退出值2结束

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

  • 为了公平起见,您应该始终检查是否可以通过清洁解决问题.我相信这对那些清洁不起作用的人有帮助. (6认同)
  • 不适合我.史蒂夫的回答 - 清洁就行了.我刚刚升级到AS1.5预览版 (3认同)

A.G*_*ndt 146

另一件需要注意的事情是你不使用

compile 'com.google.android.gms:play-services:8.3.0'
Run Code Online (Sandbox Code Playgroud)

这将导入所有的游戏服务,并且它只需要比一个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'
Run Code Online (Sandbox Code Playgroud)

  • 你是最棒的!这解决了我的问题.正如许多解决方案中提到的那样,重建对我的情况没有帮助.正如您所提到的,Google Play服务库有[很多子组件](https://developers.google.com/android/guides/setup),它们应该像您所说的一样逐一导入.非常感谢,再次! (9认同)
  • 这正是它!谢谢你!:d (2认同)
  • 我在过去几天遇到过这个问题.我以为我只挑选了我需要的东西.但是,很少看,经过几个小时的观察后,当我想要的只是播放服务广告时,我正在导入所有的游戏服务.绝对检查你的gradle依赖人! (2认同)
  • 你先生是一个传奇. (2认同)
  • 最好的答案. (2认同)

Ste*_*nem 137

我只需要清理我的项目,然后它就成功建立了.

  • 这应该是公认的答案.multiDexEnabled true会产生其他问题. (17认同)
  • 谢谢!它完美无瑕!接受的答案很奇怪,因为我的项目远未达到65K方法限制(这需要multidex). (4认同)
  • 是的,清洁是要走的路.AS 1.4 (4认同)

Mau*_*vin 23

当我向项目中添加一些新方法时,这个错误就开始出现了.我知道我没有接近65k方法限制,如果我能帮助它,我不想为我的项目启用multiDex支持.

我通过增加:app:transformClassesForDexForDebug任务可用的内存来解决它.我通过在中指定javaMaxHeapSize来做到这一点gradle.build.

gradle.build

android {
    ...
    dexOptions {
        javaMaxHeapSize "4g" //specify the heap size for the dex process
    }
}
Run Code Online (Sandbox Code Playgroud)

在尝试解决此问题的其他常见解决方案后,我尝试了这个问题:

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

错误

错误:任务>':app:transformClassesWithDexForDebug'的执行失败.com.android.build.api.transform.TransformException:com.android.ide.common.process.ProcessException:org.gradle.process.internal.ExecException:流程 '命令' /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'
}
Run Code Online (Sandbox Code Playgroud)

虽然

defaultConfig {
    multiDexEnabled true
}
Run Code Online (Sandbox Code Playgroud)

这也将解决问题,但在gradle控制台中提供了大量的Notes,这使得在构建期间找到其他实际问题变得困惑