Java finalizado com valor de saída diferente de zero 2 - Android Gradle

135

Estou recebendo esse erro ao executar meu aplicativo Android (limpei-o e construí-o, mas o erro ainda está presente)

  • Sincronização: OK
  • Fazer Projeto: OK
  • Limpo: OK
  • Executar: erro

Erro: Falha na execução da tarefa ': app: dexDebug' .com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command' C: \ Program Files \ Java \ jdk1.7.0 _25 \ bin \ java.exe '' finalizado com o valor de saída diferente de zero 2

Meu arquivo gradle:

apply plugin: 'com.android.application'

android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
    applicationId "com.rzr.rzevallosr.miappdepruebas"
    minSdkVersion 19
    targetSdkVersion 21
    versionCode 1
    versionName "1.0"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

productFlavors {
}

repositories {
    mavenCentral()
    flatDir {
        dirs 'libs'
    }
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])

// This library handles authentication and authorization
compile 'com.spotify.sdk:spotify-auth:1.0.0-beta9@aar'
// This library handles music playback
compile 'com.spotify.sdk:spotify-player:1.0.0-beta9@aar'

compile 'com.android.support:appcompat-v7:21.0.3'
compile 'com.android.support:recyclerview-v7:21.0.+'

compile 'com.squareup.retrofit:retrofit:1.9.0'
compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0'
compile 'com.squareup.okhttp:okhttp:2.2.0'

compile files('libs/spotify-web-api-android-master-0.1.0.jar')
compile files('libs/okio-1.3.0.jar')
}

EDIT: eu não vi "compile fileTree (dir: 'libs', inclua: ['* .jar'])" ele estava compilando duas vezes minhas bibliotecas, então apenas comento:

//compile 'com.squareup.retrofit:retrofit:1.9.0'
//compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0'
//compile 'com.squareup.okhttp:okhttp:2.2.0'

//compile files('libs/spotify-web-api-android-master-0.1.0.jar')
//compile files('libs/okio-1.3.0.jar')

e funciona bem.

Maverick.pe
fonte
2
@JaredBurrows O problema no meu caso foi que meu aplicativo estava compilando duas vezes as bibliotecas .. uma em "compile fileTree" (compila todo o diretório libs) e "compile ****".
Maverick.pe
Você pode postar uma resposta e marcar como correta?
Jared Burrows
@JaredBurrows done. Obrigado
Maverick.pe
confira meu post aqui stackoverflow.com/a/33387368/740372
Sanjoy Saha
Estou tendo o mesmo erro, mas meu arquivo gradle não possui tantas compilações. Por favor ajude. Eu postei esta pergunta: stackoverflow.com/questions/34558251/… Sou completamente novo no desenvolvimento do Android.
Ayusch

Respostas:

205

É possível que esse problema ocorra devido à excedência do limite de 65x dos métodos impostos pelo Android. Esse problema pode ser resolvido limpando o projeto e removendo algumas bibliotecas e métodos não utilizados das dependências no build.gradle, OR adicionando suporte multidex.

Portanto, se você precisar manter bibliotecas e métodos, poderá ativar o suporte a multi dex declarando-o na configuração gradle.

defaultConfig {        
    // Enabling multidex support.
    multiDexEnabled true
}

Você pode ler mais sobre o suporte multidex e desenvolver aplicativos com mais de 65 mil métodos aqui .

minhazur
fonte
feliz que isso te ajudou. @ David
minhazur
2
Muito obrigado isso me ajudou
Aayushi
4
E depois disso, substitua o método na classe de inicialização: @Override invalid void attachBaseContext (Base de contexto) {super.attachBaseContext (base); MultiDex.install (isto); }
Gent Berani
Uau, funciona muito bem. Nunca pensei que isso poderia ser o problema.
Neela
Se você quiser ver o que exatamente está causando o erro, tente criar seu projeto via terminal gradle, assim ./gradlew assembleDebug --stacktrace --debug. Eu vi esse erro no meu casocom.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
NecipAllef 5/16
93

Para mim, o problema era que eu havia colocado um código de biblioteca de conformidade desnecessário no build.gradle

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

que estava causando mais de 65k métodos, removendo-o, gradle sync, limpando o projeto e, em seguida, executando novamente e esse erro foi interrompido. Eu precisava apenas de mapas e gcm, então eu coloquei essas linhas e o projeto sincronizado

compile 'com.google.android.gms:play-services-gcm:7.5.0'
compile 'com.google.android.gms:play-services-location:7.5.0'

Oi pessoal, novamente encontrei esse problema e, desta vez, foi por causa da alteração da versão das ferramentas de compilação e realmente foi necessário que eu habilitasse o multidex ... então eu adicionei o arquivo build.gradle do meu aplicativo ..

defaultConfig {
    applicationId "com.am.android"
    minSdkVersion 13
    targetSdkVersion 23
    // Enabling multidex support.
    multiDexEnabled true
}

dexOptions {
    incremental true
    javaMaxHeapSize "2048M"
    jumboMode = true
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:multidex:1.0.1'
}

E crie uma classe que estenda a classe Application e inclua esse método dentro da classe.

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

também incluir no método OnCreate também

@Override
public void onCreate() {
    MultiDex.install(this);
    super.onCreate();
}
Amit Tumkur
fonte
2
Esta é a melhor solução, você deve incluir apenas as bibliotecas que realmente está usando.
Roisgoen 19/08/2015
2
funciona para mim!! altere "compilar 'com.google.android.gms: play-services: 7.5.0'" para compilar "com.google.android.gms: play-services-identity: 8.1.0" compilar "com.google.android. gms: play-services-plus: 8.1.0 "
Oscar Calderon
1
Bom, também consulte: developers.google.com/android/guides/setup - forneça uma lista de várias bibliotecas individuais.
Ed Manners #
@ edsappfactory.com referi que, usado e modificado.
Amit Tumkur
32

Apenas no caso de alguém ainda estar lutando com isso e não ter idéia de por que isso está acontecendo e como consertar. De fato este erro

Erro: falha na execução da tarefa ': app: dexDebug'. > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: processo 'comando' C: \ Arquivos de programas \ Java \ jdkx.x.x_xx \ bin \ java.exe '' concluído com valor de saída diferente de zero 2

pode ter muitas razões para acontecer, mas certamente não algo relacionado à sua versão do JDK; portanto, não perca seu tempo na direção errada. Estas são duas razões principais para que isso aconteça

  1. Você tem a mesma biblioteca ou arquivo jar incluído em vários lugares e alguns deles conflitantes.
  2. Você está prestes a ou já excedeu o limite do método de 65k

O primeiro caso pode ser corrigido da seguinte maneira: Descubra quais dependências você incluiu várias vezes. Para fazer isso, execute o seguinte comando no terminal do android studio

gradlew -q dependencies yourProjectName_usually_app:dependencies --configuration compile

isso retornará todas as dependências, mas os arquivos jar incluídos na pasta lib tentam se livrar da duplicação marcada com asterisco (*), isso nem sempre é possível, mas em alguns casos você ainda pode fazê-lo, depois disso, tente excluir os módulos que estão incluídas muitas vezes, você pode fazer assim

compile ('com.facebook.android:facebook-android-sdk:4.0.1'){
    exclude module: 'support-v4'
}

Para o segundo caso, quando você exceder a sugestão de limite de método, tente minimizá-la removendo as bibliotecas incluídas (a nota soa como a primeira solução) se não houver maneira de adicionar multiDexEnabled true ao seu defaultConfig

defaultConfig {
   ...
   ...
   multiDexEnabled true
}

isso aumenta o limite do método, mas não é a melhor coisa a se fazer devido a possíveis problemas de desempenho. IMPORTANTE adicionar apenas multiDexEnabled truea defaultConfignão é suficiente, de fato, em todos os dispositivos executando o Android <5 Lollipop, isso resultará em um comportamento inesperado e NoClassDefFoundError. como resolvê-lo é descrito aqui

Vilen
fonte
18

Eu não sabia (até então) que "compile fileTree (dir: 'libs', inclua: ['* .jar'])" compile tudo o que tem extensão jar na pasta libs, então apenas comento (ou excluo) isso linhas:

//compile 'com.squareup.retrofit:retrofit:1.9.0'
//compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0'
//compile 'com.squareup.okhttp:okhttp:2.2.0'

//compile files('libs/spotify-web-api-android-master-0.1.0.jar')
//compile files('libs/okio-1.3.0.jar')

e funciona bem. Obrigado mesmo assim! Foi mal.

Maverick.pe
fonte
5
ou o contrário: comente compile fileTree(dir: 'libs', include: ['*.jar'])em gradle. Isso me ajudou.
Tomasz Mularczyk
existe alguma outra solução em relação a esse problema? Eu não compilei cada arquivo jar, mas apenas usei essa linha, compile fileTree(dir: 'libs', include: ['*.jar'])mas ela ainda mostra o mesmo erro.
Kairi San
9

Eu tive o mesmo problema e corrigi a remoção da biblioteca desnecessária

compile fileTree(dir: 'libs', include: ['*.jar'])

Eu removi a biblioteca e pude executar o projeto sem nenhum problema.

Alexiscanny
fonte
Eu estava tentando adicionar a classe slideMenu e removê-la da minha classe principal funcionou para mim. Obrigado! :)
Lucas Senechal
6

O meu foi resolvido ativando o multiDex para compilações de depuração.

defaultConfig {
multiDexEnabled true
}
Armin
fonte
6

Rejeito o JDK incorporado (em 32 bits) porque o JDK incorporado é de 64 bits

Clique com o botão direito do mouse em Projeto -> Configuração do módulo aberto -> Localização do SDK -> Desmarque Usar JDk incorporado e defina seu caminho do JDK, por exemplo, no Ubuntu / usr / lib / jvm / java-8-openjdk-i386

ugali soft
fonte
1
Eu acho que isso funciona porque o JDK incorporado é de 64 bits. Eu tive o mesmo problema na minha máquina de 32 bits.
Lukas Novak #
Isso corrigiu o problema na minha máquina de 32 bits. echo $JAVA_HOMEpara o caminho
SANBI amostras
Sim, eu sabia que tinha a ver com a minha máquina de 32 bits. Obrigado, Zacharia - salvou o meu dia!
Ilonpilaaja 4/16
5

Possível problema: Você excedeu o limite de dex 65k métodos, pode ser que você tenha adicionado alguma biblioteca ou vários métodos antes que o problema ocorresse?

Artem Zinnatullin
fonte
1
Não são vários ... apenas alguns métodos.
Maverick.pe
Hm, tentar construir versão anterior do projeto ou remover biblioteca não utilizado (s) se é possível e não reconstruir
Artem Zinnatullin
Eu tenho apenas alguns métodos também
arqueiro han 5/05
3

Se você já atualizou seu SDK e também está usando o google-play-services, precisará cuidar da dependência, pois há algum tipo de conflito com:

Siga o procedimento abaixo: compile 'com.google.android.gms: play-services: +' Substitua pela compilação 'com.google.android.gms: play-services: 6.5.87'

Nota: Aqui '6.5.87' é a versão do serviço google-play. Eu espero que isso ajude..

Maddy
fonte
2

Eu acho que é conflitos de arquivo .jar em seu projeto.

Eu removi o android-support-v4.jar da pasta libs e está funcionando !!!

se o seu projeto apresentar erro, verifique seu arquivo build.gradle

dependências {

}

Samir Mangroliya
fonte
2

No meu caso, o problema era que a nova biblioteca (dependência gradle) que eu adicionei estava contando com outras dependências e duas dessas dependências subjacentes estavam em conflito / entrando em conflito com algumas dependências de outras bibliotecas / dependências no meu script de construção. Especificamente, adicionei o Apache Commons Validator(para validação de email) e duas de suas dependências (Apache Commons Logginge Apache Commons Collections) estavam em conflito com as usadas pelo Robolectric (porque versões diferentes das mesmas bibliotecas estavam presentes no meu caminho de construção). Portanto, excluí aquelas versões conflitantes das dependências ( modules) ao adicionar a nova dependência (a Validator):

compile ('commons-validator:commons-validator:1.4.1') {
    exclude module: 'commons-logging'
    exclude module: 'commons-collections'
}

Você pode ver as dependências do (s) seu (s) módulo (s) gradle (você pode ter apenas um módulo em seu projeto) usando o seguinte comando gradle (eu uso o wrapper gradle criado para você se você criou seu projeto no Android Studio / Intellij Idéia). Execute este comando no diretório raiz do seu projeto:

./gradlew: SEU-MÓDULO-NOME: dependências

Depois de adicionar essas excludediretivas e tentar executar novamente, recebi um duplicate fileerro, pois NOTICE.txté usado por algumas bibliotecas do apache commons como Logging and Collections. Eu tive que excluir esse arquivo de texto durante a embalagem. No meu build.gradle, adicionei:

packagingOptions {
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/notice.txt'
    exclude 'META-INF/NOTICE.txt'
}

Descobriu-se que a nova biblioteca (the Validator) pode funcionar com versões ligeiramente mais antigas de suas dependências / módulos (que já foram importadas para o meu caminho de construção por outra biblioteca (Robolectric)). Esse foi o caso desta biblioteca específica, mas outras bibliotecas podem estar usando a API mais recente das dependências subjacentes (nesse caso, você deve tentar verificar se as outras bibliotecas que dependem do módulo / dependência conflitantes podem trabalhar com o versão mais recente (excluindo a versão mais antiga do módulo / dependência nas entradas dessas bibliotecas)).

Javad Sadeqzadeh
fonte
1

No meu caso, recebi esse erro quando há 2 ou mais conflitos de bibliotecas (mesma biblioteca, mas versões diferentes). Verifique seu aplicativo build.gradle no bloco de dependências.

Phuc Tran
fonte
1

Existem duas alternativas que funcionarão com certeza:

  1. Limpe seu projeto e construa.

Se o método acima não funcionou, tente o próximo.

  1. Adicione o seguinte ao arquivo build.gradle no nível do aplicativo

    defaultConfig {   
    
    multiDexEnabled true
    
    }
Udit Kapahi
fonte
tentei os dois, mas tenho um novo erro Error:Execution failed for task ':app:packageAllDebugClassesForMultiDex'. > java.util.zip.ZipException: duplicate entry: android/support/v4/view/MotionEventCompatEclair.class, o que devo fazer a seguir?
Kairi San
esse erro está ocorrendo por causa da duplicados / mesmos pacotes em seu projeto
Udit Kapahi
1

Atualizar meu Java SDK para a versão mais recente 1.7.0_79e atualizar o SDK Locationunder Project Structureresolveu o problema para mim.

A coisa
fonte
1

Meu problema era que, além de ter

com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command' /Library/Java/JavaVirtualMachines/jdk1.X.X_XX .jdk / Conteúdo / Home / bin / java '' finalizado com valor de saída diferente de zero 2

Eu também tinha esse traço:

Erro de tradução não capturado: java.lang.IllegalArgumentException: já adicionado: Lcom / mypackage / ClassX;

O problema era que eu estava adicionando a mesma classe em duas bibliotecas diferentes. Removendo o arquivo de classe / jar de uma das bibliotecas, o projeto é executado corretamente

mromer
fonte
Exatamente, eu tive o mesmo problema, a mesma assinatura de classe, felizmente era a minha classe, então refatorei-a. Eu escrevi resposta aqui: stackoverflow.com/a/35045501/3397345
Davideas
1

Para mim, eu estava adicionando todas as dependências do playstore

compilar 'com.google.android.gms: play-services: 8.4.0'

Mas eu precisava apenas do google map, então o tornei mais específico e o erro foi resolvido.

compile 'com.google.android.gms: play-services-maps: 8.4.0'

Ajji
fonte
0

no meu caso, o problema era a versão de ferramentas de compilação, que era 23.0.0 rc3 e eu mudei para 22.0.1 e meu problema foi corrigido.

max
fonte
0

Você pode estar usando um cabo de baixa qualidade / com defeito para conectar seu dispositivo ao PC, troquei o cabo e funcionou para mim.

Mushtaq Jameel
fonte
0

Este erro é causado pelo uso de um número maior de bibliotecas. No meu caso, 'compile' com.google.android.gms: play-services-9.4.0 'causou esse erro. Para evitar esse erro, use as bibliotecas necessárias. Por exemplo, se desejar para usar o Google Maps no seu aplicativo, use a compilação 'com.google.android.gms: play-services-maps: 9.4.0'. Ao adicionar a dependência dos serviços do Google Play, especifique apenas as bibliotecas necessárias. Por padrão, inclui todas as bibliotecas.

Rajesh.k
fonte
0

Em seu gradle.buildarquivo, use este

"compile fileTree(dir: 'libs', include: ['*.jar'])"

E isso funciona bem.

Rishabh Mahatha
fonte
0

Se você quiser ver o que exatamente está causando o erro, tente criar seu projeto via terminal gradle, como este ./gradlew assembleDebug --stacktrace --debug . Eu vi o seguinte erro no meu casocom.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536

Isso aconteceu quando eu estava tentando integrar o Google Maps ao meu projeto. Para corrigi-lo, simplesmente verifiquei as bibliotecas que estava incluindo

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

Eu simplesmente mudei para

compile 'com.google.android.gms:play-services-maps:9.8.0'

e o problema se foi

NecipAllef
fonte
0

Eu tive o mesmo erro depois de converter meu projeto para Kotlin. Meu problema era que minha localização do jre foi alterada para um caminho inválido durante o processo (eu me pergunto por que isso poderia acontecer ... me fez perder tempo). Corrigido, fazendo o seguinte:

File > Project Structure > SDK Location 

Desmarcou a Use embedded JDKopção, que estava apontando para uma instalação antiga do JDK, e selecionou a correta:

/home/my_user/jdk1.8.0_101

Depois de mudar isso, o erro desapareceu

voghDev
fonte
0

TRABALHOU PARA MIM :)

Atualizei o java para a versão mais recente 8 anteriormente, era 7 e, em seguida, vá para OPEN MODULE SETTING clicando com o botão direito do mouse no projeto e alterei o caminho do jdk para / usr / lib / jvm / java-8-oracle o novo java 8 instalado. E reinicie o estúdio

verifique / usr / lib / jvm para o nome da pasta java 8

Estou usando o ubuntuinsira a descrição da imagem aqui

Jayant Singh
fonte