com.android.build.transform.api.TransformException

158

Estou tentando integrar o login do Google. No meu aplicativo, adicionei estas bibliotecas:

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

Adicione isso também ao projeto build gradle:

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

Adicione também o plug-in ao aplicativo build gradle:

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

adicione as permissões necessárias, mas ao tentar executar meu aplicativo, recebi este erro:

    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
shaeed shaeed
fonte

Respostas:

312

Tente adicionar multiDexEnabled trueao seu arquivo build.gradle do aplicativo .

 defaultConfig {
    multiDexEnabled true
}

EDITAR:

Tente a resposta de Steve primeiro. Caso isso aconteça com frequência ou o primeiro passo não ajudou, multiDexEnabledpode ajudar. Para quem gosta de se aprofundar aqui, há algumas questões semelhantes (com mais respostas):

: app: dexDebug ExecException finalizado com valor de saída diferente de zero 2

Erro: falha na execução da tarefa ': app: dexDebug'. com.android.ide.common.process.ProcessException

JuliusScript
fonte
3
não funcionou para mim. Resposta de Steve - A limpeza fez o truque. Acabei de atualizar para o AS1.5 Preview
Scott
6
Para ser justo, você deve sempre verificar se um problema pode ser resolvido com a limpeza. Estou convencido de que isso ajudará aqueles a quem a limpeza não fez o truque.
JuliusScript
ambos ajuda não funcionavam para mim - mas reiniciar AS finalmente fez o truque :)
Maciej Boguta
não deles me ajudou, mas começou a trabalhar depois que eu reiniciado AS
Maciej Boguta
1
Eu também aconselho verificar a resposta de A Grandt, abaixo ( stackoverflow.com/a/33690032/1617737 ) antes de entrar nessa solução.
ban-geoengineering
146

Outra coisa a se observar é que você não usa

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

Isso importará TODOS os serviços de reprodução e levará pouco mais que um olá mundo para exceder o limite do método 65535 de um único APK dex.

Sempre especifique apenas os serviços necessários, por exemplo:

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'
A.Grandt
fonte
10
Você é o melhor! Isso resolveu meu problema. A reconstrução não ajuda no meu caso, como mencionado em muitas das soluções. Como você mencionou, a biblioteca dos Serviços do Google Play possui muitos subcomponentes e eles devem ser importados exatamente como você disse - um por um. Muito obrigado novamente!
Ivan Caravanio
2
Eu tive esse problema nos últimos dois dias. Eu pensei que tinha escolhido apenas o que eu precisava. Mas, baixo e eis que, depois de horas de procura, eu estava importando todos os serviços de reprodução quando tudo que eu queria era anúncios de serviços de reprodução. Definitivamente, verifique as suas dependências gradle pessoas!
MCLLC
@ A.Grandt, você poderia adicionar o link que Ivan deu à sua resposta? Ele contém uma lista de nomes de todos os subcomponentes e deve fazer parte da resposta, porque é o próximo passo que todos devem dar.
Murmel
137

Eu só tinha que limpar meu projeto e, em seguida, ele construiu com sucesso depois.

Steve Ganem
fonte
4
Obrigado! Funciona perfeitamente! A resposta aceita seria estranha, pois meu projeto está longe de atingir o limite do método de 65K (o que exigiria multidex).
Louis CAD
4
Sim, a limpeza era o caminho a percorrer. AS 1.4
Felipe Caldas
Se você possui módulos de biblioteca, limpe todos os módulos do projeto para que ele funcione. Limpar apenas módulos individuais não funcionou para mim. Limpe o projeto INTEIRO.
Akh
Alguém pode me dizer como faço para limpar o projeto? Eu tenho tentado muitas "combinações" e nada funciona. Vejo que todo mundo diz "limpo", mas não sabe como. THX.
Alberto Rubio
@AlbertoRubio, em Compilar> Limpar projeto na barra de ferramentas AS.
Chantell Osejo 27/10/16
23

Este erro começou a aparecer para mim quando adicionei novos métodos ao meu projeto. Eu sabia que não estava nem perto do limite do método de 65k e não queria ativar o suporte multiDex para o meu projeto, se eu pudesse ajudá-lo.

Eu o resolvi aumentando a memória disponível para a :app:transformClassesForDexForDebugtarefa. Eu fiz isso especificando javaMaxHeapSize em gradle.build.

gradle.build

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

Eu tentei isso depois de não ter tido sucesso com outras soluções comuns para esse problema:

  • Executando um Projeto clean
  • Excluindo manualmente os diretórios /app/builde /builddo meu projeto
  • Invalidando o Gradle Cache e reiniciando o Android Studio

Erro

Erro: Falha na execução da tarefa> ': app: transformClassesWithDexForDebug'. com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command' /Library/Java/JavaVirtualMachines/jdk1.8.0_45. jdk / Conteúdo / Home / bin / java '' finalizado com valor de saída diferente de zero 1

Nota: aumentar a memória disponível para a tarefa DEX pode causar problemas de desempenho em sistemas com menor vínculo de memória .

Maurice Gavin
fonte
Isso funcionou para mim, só para especificar o tamanho máximo de heap vai resolver o problema, obrigado Maurice
Zeyad Assem
8

Também enfrentei um problema semelhante no Android Studio 1.5.1 e no gradle 1.5.0. Só preciso remover bibliotecas indesejadas de dependências que podem ser adicionadas automaticamente no arquivo build.gradle do meu aplicativo. Um deles foi: compilar 'com.google.android.gms: play-services: 8.4.0'. Portanto, para práticas recomendadas, tente incluir apenas uma biblioteca específica de serviços de reprodução, como para anúncios, inclua apenas

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

Apesar

defaultConfig {
    multiDexEnabled true
}

isso também resolverá o problema, mas fornece muitas anotações no console gradle, tornando confuso encontrar outros problemas reais durante a compilação

raul
fonte
Restringir meu uso da API do Google a apenas play-services-maps fez o truque. Aqui está o detalhamento oficial do Google sobre os vários componentes da API do play-services: developers.google.com/android/guides/…
jperl 27/03/16
4

você pode ver a documentação do 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>
David Hackro
fonte
3

Estou usando o AS 1.5.1 e encontrei o mesmo problema. Mas apenas limpar o projeto simplesmente não funciona, então tentei algo.

  • projeto limpo
  • reinicie o AS
  • Projeto de sincronização

Isso funcionou comigo, então espero que isso ajude.

kcNeko
fonte
3
Isso não faria sentido para projetos que excederam o limite do método Dex de 64k.
IgorGanapolsky
3

No meu caso, altere buildToolsVersion de "24" para "23.0.2", resolva o problema.

Ayman Mahgoub
fonte
2

No meu caso, a exceção ocorreu porque todas as extensões de serviço do Google Play não têm a mesma versão da seguinte forma

 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'

Funcionou quando mudei isso para

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'
Uma Achanta
fonte
1
Eu não procurei todas as respostas e não vi as suas, então ... descobri que esse era o meu caso cerca de uma hora depois: /
denispyr 27/03/17
2

Eu resolvi com o seguinte:

Eu configurei multidex

No build.gradle, você precisa adicionar o próximo.

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'
...
}

Inclua o próximo em local.properties

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

Depois disso, na classe Application, você também precisará adicionar o 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);
   }
}

Não se esqueça de adicionar o código da linha no Manifest.xml

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

É isso, foi o suficiente para resolver o erro: Falha na execução da tarefa ': app: transformClassesWithDexForDebug. Verifique muito bem o build.gradle com javaMaxHeapSize "2g" e o local.properties org.gradle.jvmargs = -Xmx2048m tem 2 gigabytes.

Leonardo Pineda
fonte
2
Por favor, poste apenas em inglês. Parece uma boa resposta, seria uma pena excluí-lo porque não está em inglês.
Tunaki 28/02
1

Eu tive o mesmo problema quando voltei para a versão antiga via git, e essa versão tinha a biblioteca .jar anterior de uma API de terceiros e, por algum motivo, descobriu-se que ambos os jar do mesmo sdk, apenas versões diferentes estavam na pasta / libs .

lxknvlk
fonte
1

Primeiro Exclua os arquivos intermediários SUA PASTA DE APLICATIVO \ app \ build \ intermediates OU Limpe seu projeto e depois reconstrua.

Adicionar

multiDexEnabled true

ie

defaultConfig {
        multiDexEnabled true
}

É trabalho pra mim

Mohd. Jafar Iqbal khan
fonte
1

Resolvi esse problema alterando para usar as últimas buildToolsVersion

android {
    //...
    buildToolsVersion '26.0.2' // change from '23.0.2'
    //...
}
Tung Duong
fonte
1

Uma resposta útil se todas as opções acima não funcionarem para você.

Acesse o arquivo de classificação do aplicativo,

Verifique se todas as versões de dependência são mencionadas com o código de versão adequado, em vez de qualquer valor relativo, como (com.example.demo: +)

Anterior - implementação 'com.google.api-client: google-api-client-android: +'

Após - implementação 'com.google.api-client: google-api-client-android: 1.30.0'

Bishnu Das
fonte
0

Se você estiver usando a versão mais recente do gradle classpath 'com.android.tools.build:gradle:1.5.0' and classpath 'com.google.gms:google-services:1.4.0-beta3', tente atualizar o repositório de suporte mais recente do gerenciador do SDK e reconstrua o projeto inteiro.

goonerDroid
fonte
0

Se você precisar adicionar esta referência para o plug-in cordova, adicione a próxima linha no seu arquivo plugin.xml.

<framework src="com.android.support:support-v4:+" />
Adexe Rivera
fonte
0

Se as diferentes dependências tiverem o mesmo jar, também causará este erro de compilação.

Por exemplo:

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

Se "library1" e "library2" tiverem o mesmo jar nomeado xxx.jar, isso cometerá um erro.

wqycsu
fonte
0

Isso aconteceu comigo por causa do vazamento de memória do Eclipse. Eu tive que reiniciar meu computador.

Ronen Festinger
fonte
0

Alterei alguns pngs e o número da compilação no gradle e agora entendo isso. Nenhuma quantidade de limpeza e reinicialização ajudou. Desativar o Instant Run corrigiu isso para mim. YMMV

SteelBytes
fonte
0

Eu tinha a mesma opção e, assim que desliguei a execução instantânea, funcionou bem no meu dispositivo API16, mas no dispositivo API24 funcionou bem com a execução instantânea.

Espero que isso ajude alguém com o mesmo problema

x10sion
fonte
0

Simplesmente vá para Compilar - Editar tipos de compilação - Guia Propriedades - Versão do tipo de compilação e faça o downgrade para a versão 23.0.1. Clique OK. Isso funciona para o android studio 1.5. Funcionou para mim.

Dima Rowland
fonte
0

a resposta de gravação está em gradle, coloque defaultConfig {multiDexEnabled true} e o nome do aplicativo no manifesto android: name = "android.support.multidex.MultiDexApplication" deseja que esta resposta seja muito útil para alguém

Mosa
fonte
0

este código resolveu o problema

defaultConfig {
        multiDexEnabled true
}

Para a maneira mais fácil de implementar o login do google, visite: google sign in android

Tente também

dexOptions {
        javaMaxHeapSize "4g" 
    }

Mantenha também o mesmo número de versão para diferentes serviços.

user6435056
fonte
0

Resolvi esse problema adicionando build.gradle:

defaultConfig {
    multiDexEnabled true
}

em local.properties,

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

mencionar dependência:

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

Limpe e reconstrua.

Crime_Master_GoGo
fonte
0

Caso o 'Instant Run' esteja ativado, desative-o.

Ravid Rinek
fonte