我试图集成Google登录,在我的应用程序中,我添加了以下库:

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


也将其添加到项目构建包中:

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


#1 楼

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

 defaultConfig {
    multiDexEnabled true
}


编辑:

首先尝试Steve的答案。如果它频繁发生或第一步没有帮助,则可能会有所帮助。对于那些喜欢深入了解的人,这里有几个类似的问题(有更多答案):

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

Error:Execution任务':app:dexDebug'失败。 com.android.ide.common.process.ProcessException

评论


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

–斯科特
15年10月13日在21:53

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

– JuliusScript
2015年10月13日在22:00

这两个对我都没有帮助-但是重新启动AS终于成功了:)

– Maciej Boguta
15年11月20日在17:11

这些都不对我有帮助,但是重新启动AS后它开始工作

– Maciej Boguta
15年11月20日在17:17

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

– ban-geoengineering
2015年12月24日0:00



#2 楼

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

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


这将导入所有播放服务,并且只需要一个世界即可超过单个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'


评论


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

–伊万·卡拉瓦尼奥(Ivan Caravanio)
15年11月19日在11:02

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

– MCLLC
15年12月20日在21:11

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

–默默尔
16-10-5在13:12



#3 楼

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

评论


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

–Louis CAD
2015年10月6日,12:08

是的,清洁是必经之路。 AS 1.4

–Felipe Caldas
15年10月16日在22:06

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

–Akh
16 Mar 9 '16 at 20:49

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

–阿尔贝托·卢比奥(Alberto Rubio)
16-09-27在16:29

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

– Chantell Osejo
16-10-27在22:28

#4 楼

当我向项目中添加一些新方法时,此错误开始对我出现。我知道我还远未达到65k的方法限制,并且如果我能帮助的话,我不想为我的项目启用multiDex支持。

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


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


我在其他常见解决方案均未成功后尝试了此方法这个问题:


运行项目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:处理'command
'/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/bin/java''
以非零退出值1结束


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

评论


这对我有用,只是指定最大堆大小即可解决问题,谢谢莫里斯

– Zeyad Assem
16-2-21在10:05

#5 楼

我在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-map可以达到目的。以下是Google对play-services API中各个组件的正式分类:developers.google.com/android/guides/…

– jperl
16-3-27在1:02



#6 楼

您可以查看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>


#7 楼

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


清理项目
重新启动AS
同步项目

和我在一起,希望对您有所帮助。

评论


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

– IgorGanapolsky
16年7月12日在14:24

#8 楼

就我而言,将buildToolsVersion从“ 24”更改为“ 23.0.2”,即可解决问题。

#9 楼

在我的情况下,发生异常是因为所有的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'


评论


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

– denispyr
17 Mar 27 '17 at 17:09

#10 楼

我用下一个解决了它:



我配置了
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。

评论


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

–Tunaki
17年2月28日在22:30

#11 楼

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

#12 楼

首先删除中间文件
您的APP文件夹\ app \ build \ intermediates
OR
清理项目,然后重新构建。

然后添加

multiDexEnabled true


ie

defaultConfig {
        multiDexEnabled true
}


为我工作

#13 楼

我通过更改来解决此问题,以使用最新的buildToolsVersion

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


#14 楼

如果以上所有内容都不适合您,那么将是一个有帮助的答案。

转到您的应用gradle文件,

检查所有依赖项版本是否都带有正确的版本代码,而不是任何版本代码相对值,例如(com.example.demo:+)

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

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

#15 楼

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

#16 楼

如果需要为cordova插件添加此参考,请在plugin.xml文件中添加下一行。

<framework src="com.android.support:support-v4:+" />


#17 楼

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

例如:

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


如果“ library1”和“ library2”有一个名为xxx.jar的罐子,这会导致这样的错误。

#18 楼

由于Eclipse内存泄漏,它发生在我身上。我必须重新启动计算机。

#19 楼

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

#20 楼

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

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

#21 楼

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

#22 楼

写入答案在gradle中放置
defaultConfig {
multiDexEnabled true
}
,然后清单中的应用程序名称
android:name =“ android.support.multidex.MultiDexApplication”
希望这个答案对某些人来说很有意义

#23 楼

此代码解决了问题

defaultConfig {
        multiDexEnabled true
}


实现Google登录最简单的方法是访问:Google登录android

也尝试

dexOptions {
        javaMaxHeapSize "4g" 
    }


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

#24 楼

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

defaultConfig {
    multiDexEnabled true
}


local.properties中,

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


提及依赖项:

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


清理并重建。

#25 楼

如果启用了“即时运行”,则只需禁用它即可。