com.android.build.transform.api.TransformException

时间:2015-09-27 11:50:40

标签: 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'

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

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

还为app build 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

25 个答案:

答案 0 :(得分:314)

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

 defaultConfig {
    multiDexEnabled true
}

修改

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

:app:dexDebug ExecException finished with non-zero exit value 2

Error:Execution failed for task ':app:dexDebug'. com.android.ide.common.process.ProcessException

答案 1 :(得分:146)

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

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

这将导入所有播放服务,并且它只需要比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'

答案 2 :(得分:137)

我只需要清理我的项目,然后在之后成功构建。

答案 3 :(得分:23)

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

我通过增加:app:transformClassesForDexForDebug任务可用的内存来解决它。我是通过在gradle.build中指定 javaMaxHeapSize 来完成此操作。

<强> gradle.build

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

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

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

错误

  

错误:任务执行失败   &GT; &#39;:应用程序:transformClassesWithDexForDebug&#39 ;.   com.android.build.api.transform.TransformException:   com.android.ide.common.process.ProcessException:   org.gradle.process.internal.ExecException:进程&#39;命令   &#39; /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/bin/java'&#39;   完成非零退出值1

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

答案 4 :(得分: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控制台中提供了大量的注释,使得在构建期间找到其他实际问题感到困惑

答案 5 :(得分: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>

答案 6 :(得分:3)

我使用AS 1.5.1并遇到了同样的问题。但只是清理项目就不行了,所以我尝试了一些东西。

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

这对我有用,所以我希望这有帮助。

答案 7 :(得分:3)

在我的案例中,从&#34; 24&#34;更改buildToolsVersion到&#34; 23.0.2&#34;,解决问题。

答案 8 :(得分: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的执行失败。 检查build.gradle与javaMaxHeapSize“2g”,local.properties org.gradle.jvmargs = -Xmx2048m是2千兆字节。

答案 9 :(得分: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'

答案 10 :(得分:1)

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

转到您的应用gradle文件,

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

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

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

答案 11 :(得分:1)

我通过更改使用最新的buildToolsVersion

解决了这个问题
android {
    //...
    buildToolsVersion '26.0.2' // change from '23.0.2'
    //...
}

答案 12 :(得分:1)

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

Thent add

multiDexEnabled true

即。

defaultConfig {
        multiDexEnabled true
}

这对我有用

答案 13 :(得分:1)

当我通过git回滚到旧版本时,我遇到了同样的问题,那个版本有一个第三方api的以前的.jar库,并且出于某种原因结果发现两个相同的sdk,只是不同版本的jar / libs文件夹。

答案 14 :(得分:0)

我在gradle中更改了几个png和内部版本号,现在我知道了。没有多少清洁和重新启动有帮助。禁用即时运行为我修复了它。 YMMV

答案 15 :(得分:0)

我有相同的选项,只要我关闭即时运行,它在我的API16设备上工作正常,但在API24设备上它可以正常运行。

希望这有助于有同样问题的人

答案 16 :(得分:0)

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

答案 17 :(得分:0)

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

答案 18 :(得分:0)

写回答是 gradle put defaultConfig {         multiDexEnabled是的 } 然后清单中的应用程序名称 机器人:名字= “android.support.multidex.MultiDexApplication” 希望这个答案对某些人来说是个不错的

答案 19 :(得分:0)

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

例如:

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

如果&#34; library1&#34;和&#34; library2&#34;有一个名为xxx.jar的jar,这会产生这样的错误。

答案 20 :(得分:0)

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

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

答案 21 :(得分:0)

此代码解决了问题

public class AppDbInitializer : CreateDatabaseIfNotExists<AppDbContext>
{
    protected override void Seed(AppDbContext context)
    {
        var jsonImporter = new JsonImporter();
        List<DataLoader.Entities.Version> versions = (jsonImporter.ImportFromJson<List<DataLoader.Entities.Version>>("Versions.json"));
        context.Versions.AddRange(versions);
        context.SaveChanges(); // you don't need this, it's automatically called after `Seed` call
    }
}

要以最简单的方式实施Google登录访问: google sign in android

也可以尝试

defaultConfig {
        multiDexEnabled true
}

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

答案 22 :(得分:0)

我通过添加以下内容解决了这个问题: 在build.gradle

defaultConfig {
    multiDexEnabled true
}
<{1>}中的

local.properties

提及依赖:

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

清洁和重建。

答案 23 :(得分:0)

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

答案 24 :(得分:0)

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