Vários arquivos dex definem Landroid / support / v4 / accessibilityservice / AccessibilityServiceInfoCompat

212

Se eu executar a gradle assembleDebugpartir da linha de comando, de repente estou recebendo este erro:

UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dx.util.DexException: Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl;
    at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:592)
    at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:550)
    at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:531)
    at com.android.dx.merge.DexMerger.mergeDexBuffers(DexMerger.java:168)
    at com.android.dx.merge.DexMerger.merge(DexMerger.java:186)
    at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:300)
    at com.android.dx.command.dexer.Main.run(Main.java:232)
    at com.android.dx.command.dexer.Main.main(Main.java:174)
    at com.android.dx.command.Main.main(Main.java:91)

Se eu grep para v4, vejo dois arquivos dentro da minha pasta de compilação.

Binary file build/pre-dexed/debug/support-v4-19.0.0-2ba5fdd60a6c3836b3104a863fe42897da1fa9d1.jar matches
Binary file build/pre-dexed/debug/support-v4-r7-227d905d79b23b20866531d4f700446c040a2ccb.jar matches

Meu arquivo gradle inclui apenas esta biblioteca de suporte:

compile 'com.android.support:support-v13:19.0.0'

Estou perplexo sobre como a biblioteca r7 está incluída de alguma forma. Eu corri gradle cleane sempre aparece lá quando executo o assembleDebug.

Se eu grep for r7 dentro do diretório build, eu o vejo dentro do arquivo:

Binary file build/exploded-bundles/ComGoogleAndroidGmsPlayServices4030.aar/classes.jar matches

Se eu não incluir a v13, outras coisas não serão compiladas.

Mas a v13 não inclui a biblioteca de suporte da v4?

Isso é incompatível entre o pacote AAR dos serviços de reprodução e a biblioteca v13?

Peguei o arquivo gradle de gradleplease.appspot.com.

A remoção dos serviços de reprodução não o corrige; mesmo erro.

Minhas dependências dentro do build.gradle:

 dependencies {


 // Google Play Services
//compile 'com.google.android.gms:play-services:4.0.30'

// Support Libraries
//compile 'com.android.support:support-v4:19.0.0'
///compile 'com.android.support:appcompat-v7:19.0.0'
//compile 'com.android.support:gridlayout-v7:19.0.0'
compile 'com.android.support:support-v13:19.0.0'
compile 'org.eclipse.mylyn.github:org.eclipse.egit.github.core:2.1.5'
compile 'commons-codec:commons-codec:1.9'
compile 'com.madgag:markdownj-core:0.4.1'
compile 'com.wu-man:android-oauth-client:0.0.2'
compile 'com.google.http-client:google-http-client-jackson2:1.17.0-rc'
compile 'org.apache.commons:commons-lang3:3.2'
compile 'com.google.code.gson:gson:2.2.4'
}
xrd
fonte
1
Tentei todas as soluções e aconteceu que todas elas não funcionaram. Acabei de criar um novo projeto com o mesmo nome e copiei todos os arquivos do projeto antigo. E funciona muito bem agora. Espero que ajude.
Sam003 25/03/2015
Eu tive esse problema com um componente no suporte-v13. Após muita depuração e tentativa de todas as respostas inúteis, descobri que ela foi introduzida quando tentei integrar o kotlin no projeto, que era um projeto java existente. Eu removi a biblioteca padrão do kotlin e outras bibliotecas do kotlin e estava tudo bem. Ainda tentaria resolver o problema com o kotlin, mas por enquanto, tenho que trabalhar. Qualquer informação ajudaria também, realmente amo kotlin.
clementiano

Respostas:

304

Execute gradle -q dependencies(ou gradle -q :projectName:dependencies) para gerar um relatório de dependência. Você deve ver de onde r7vem, como:

compile - Classpath for compiling the main sources.
+--- com.commonsware.cwac:camera-v9:0.5.4
|    +--- com.actionbarsherlock:actionbarsherlock:4.4.0
|    |    \--- com.google.android:support-v4:r7
|    +--- com.commonsware.cwac:camera:0.5.4
|    \--- com.android.support:support-v4:18.0.+ -> 18.0.0
\--- com.android.support:support-v4:18.0.+ -> 18.0.0

Em seguida, use a excludediretiva para bloquear essa dependência. No meu caso, é proveniente da minha biblioteca CWAC-Camera e, portanto, uso:

dependencies {
    compile('com.commonsware.cwac:camera-v9:0.5.4') {
      exclude module: 'support-v4'
    }

    compile 'com.android.support:support-v4:18.0.+'
}

(onde a segunda compileinstrução indica qual versão você realmente deseja)

Isso deve esclarecer tudo, pois você verá se você executar o relatório de dependência novamente:

compile - Classpath for compiling the main sources.
+--- com.commonsware.cwac:camera-v9:0.5.4
|    +--- com.actionbarsherlock:actionbarsherlock:4.4.0
|    \--- com.commonsware.cwac:camera:0.5.4
\--- com.android.support:support-v4:18.0.+ -> 18.0.0
CommonsWare
fonte
3
Existe um método para inspecionar / excluir módulos de dependências .jar não disponíveis no Maven? gradle dependenciesparece não relatar dependências adicionadas comcompile files('libs/example.jar')
dbro 21/01
3
Digamos que eu tenha duas libs/*.jardependências com um módulo em comum, nenhuma delas está disponível como um artefato. Existe alguma maneira de executar uma inspeção de dependência / exclusão de classe semelhante?
dbro 21/01
2
@ dbro: Não que eu saiba, mas, novamente, eu não pesquisei esse ponto. IMHO, fora do manguito, um ou ambos os arquivos JAR parecem mal embalados, pois o módulo em comum deve ser fatorado em seu próprio JAR.
CommonsWare
12
./gradlew -q: projectName: dependências funcionaram para mim
Defuera
15
Dica rápida para quem está exluindo um módulo a partir de uma dependência de módulo: Você precisa transformar seu compile project(':foo')em compile(project(':foo')) { exclude module: 'support-v4' }. Observe os parênteses.
Espinchi
122

Resolvi um erro semelhante adicionando o seguinte pedaço de código ao meu arquivo build.gradle dentro do bloco android.

android {
    dexOptions {
        preDexLibraries = false
    }
}
mike.tihonchik
fonte
4
Trabalhou para mim! Existe alguma desvantagem em fazer dessa maneira?
Barrie Galitzky
@BarrieGalitzky Ainda não encontrei nenhum problema até agora #
mike.tihonchik
3
Obrigado cara, isso funcionou perfeitamente para resolver o problema! Enfim, acho que tem alguns efeitos colaterais. A tarefa assembleDebug ficou três vezes mais lenta!
Marino
dexOptions não encontrado.
Oliver Dixon
10
Depois de adicionar isso, recebi o erro "A tradução foi interrompida". Acho que preciso experimentar o método CommonsWare.
DroidHeaven #
36

Uma vez que uma imagem vale mais que mil palavras

Para tornar mais fácil e rápido concluir essa tarefa com iniciantes como eu. estas são as capturas de tela que mostram a resposta postada por @ edsappfactory.com que funcionou para mim:

Primeiro, abra a visualização Gradle no lado direito do Androidstudio, no item do seu aplicativo, vá para Tasks, em Androidseguida, clique com o botão direito do mouse androidDependenciese escolha Run:

passo 1

Segundo, você verá algo assim:

Passo 2

A principal razão pela qual publiquei isso não foi fácil saber onde executar uma gradletarefa ou os comandos publicados acima. Portanto, é aqui que os excuta também.

SO, para executar o comando gradle:

Primeiro:

primeiro

Segundo:

segundo

Fácil como é.

É isso aí.

Obrigado.

MBH
fonte
33

Observe também que você pode ver suas dependências do Android, acessando a visualização Android Studio Gradle e selecionando o destino "androidDependencies".

Mais uma dica: Eu estava tendo esse problema, até remover a lib de suporte à v4 da pasta libs no projeto e no (s) projeto (s) de módulo / biblioteca relacionados.

Ed Manners
fonte
3
Instrução mais específica? Não foi possível encontrar "androidDependencies". Thx
CopperCash
Vá para a visualização Gradle, encontre o cabeçalho Todas as tarefas, faça uma busca detalhada no nome do seu aplicativo e, em seguida, faça uma busca detalhada em ": app"; você encontrará "androidDependencies" lá.
AutoM8R
2
Onde está a visualização Gradle?
Paul Beusterien
4
@PaulBeusterien Se você olhar para o lado direito da janela, há uma guia lateral marcada Gradle. Clique nele para abrir uma visualização fixada. Os androidDependencies é realmente uma tarefa Gradle
JCricket
obrigado cara, eu publiquei capturas de tela explicando sua resposta para facilitar.
MBH
11

Comecei a receber esse erro ao atualizar para o ButterKnife 8.5.1. Nenhuma das outras respostas aqui funcionou para mim.

Eu costumava gradle -q :app:dependenciesver a árvore e depois olhava os arquivos jar até encontrar o conflito. O conflito era que a dependência do butterknife com.android.support:support-compat:25.1.0contém uma versão da classe de acessibilidade e com.android.support:support-v4:23.1.1também a classe.

Eu o resolvi alterando minha dependência disso:

compile 'com.jakewharton:butterknife:8.5.1'

para isso:

compile('com.jakewharton:butterknife:8.5.1') {
    exclude module: 'support-compat'
}

Parece não afetar a operação do ButterKnife até agora.

Edit: Existe uma solução melhor, que foi atualizar minhas bibliotecas de suporte para Android para coincidir com ButterKnife:

compile('com.android.support:appcompat-v7:25.2.0')
compile('com.android.support:design:25.2.0')
compile 'com.jakewharton:butterknife:8.5.1'
user3562927
fonte
manter a versão de suporte para ser o mesmo é solução simples e excluir módulo não é trabalho para mim.
Jay
Eu resolvi com a segunda solução também! Mesmo conflito, mas com o Butter Knife versão 8.8.1 Exemplo: implementação ('com.jakewharton: butterknife: 8.8.1') {módulo de exclusão: 'support-compat'} annotationProcessor 'com.jakewharton: butterknife-compiler: 8.8.1'
GFPF
9

Caso alguém descubra que a resposta do CommonsWare não pôde ser aplicada ao projeto da biblioteca do Android, aqui está o trecho a ser corrigido

compilar (projeto (': yourAndroidLibrary')) {excluir módulo: 'support-v13'}

Você encontrará problemas

Método DSL Gradle não suportado encontrado: 'exclude ()'

se você usar o projeto de compilação (': yourAndroidLibrary') {excluir módulo: 'support-v13'}

As diferenças são a pulseira "(" e ")" antes de "projeto" .

Tony Thompson
fonte
Obrigado, faltava parêntese duplo!
Marko
8
exclude module: 'support-v4'

Não funcionaria para mim com uma dependência de projeto, a única maneira de fazê-lo funcionar era através da seguinte sintaxe:

configurations {
    dependencies {
        compile(project(':Android-SDK')) {
            compile.exclude module: 'support-v4'
        }
    }
}

Onde: Android-SDK é o nome do seu projeto.

Pellet
fonte
8

Eu tive o mesmo problema e parece que meu aplicativo tinha muitos métodos por causa das bibliotecas: http://developer.android.com/tools/building/multidex.html

Resolvido com:

android {
   defaultConfig {
   ...
   multiDexEnabled = true
   }
}

Mais aqui Erro: Falha na execução da tarefa ': app: dexDebug'. > comando finalizado com valor de saída diferente de zero 2

Giannis P
fonte
1
O multidexing pode tornar a velocidade de inicialização do aplicativo mais lenta; use-a somente se for necessário.
James Goodwin
6

Eu tive esse mesmo erro, mas foi porque eu havia mudado recentemente do uso da v4 para a v13. Então tudo que eu tinha que fazer era limpar o projeto.

ashishduh
fonte
1
Teve o mesmo erro após a atualização do intellij, a limpeza do projeto corrigiu o problema.
Vlad Spreys
5

Eu tive o mesmo erro em um projeto legado. Minha culpa foi que a biblioteca de suporte foi incluída duas vezes: uma vez dentro da biblioteca do google-play-services e outra como autônoma.

Foi assim que eu consertei:

BAD build.gradle:

dependencies {
   compile files('libs/android-support-v4.jar') 
   compile files('libs/core-2.2.jar')
   compile files('libs/universal-image-loader-1.8.5-with-sources.jar')
   compile 'com.google.android.gms:play-services:3.2.65'
}

BOM build.gradle:

dependencies {
   // compile files('libs/android-support-v4.jar')  // not needed 
   compile files('libs/core-2.2.jar')
   compile files('libs/universal-image-loader-1.8.5-with-sources.jar')
   compile 'com.google.android.gms:play-services:3.2.65'
}

Espero que ajude alguém :-)

voghDev
fonte
3

Estou usando com.google.android.gms:play-services-analytics:8.3.0e android-support-v13.jarnão consegui exclude module: 'support-v4'trabalhar.

O que funcionou para mim foi usar o android-support-v13artefato em vez do android-support-v13.jararquivo.

Ou seja, em vez de

dependencies {
compile ('com.google.android.gms:play-services-analytics:8.3.0')
compile files('libs/android-support-v13.jar')

}

eu usei

dependencies {
compile ('com.google.android.gms:play-services-analytics:8.3.0')
compile ('com.google.android:android-support-v13')

}

barry
fonte
3

No meu caso, o problema foi causado por inconsistência de versão :

Build tools 25
compileSdk 24
targetSdk 24
Support library 24

A solução foi simples: faça tudo versão 25

Cavaleiro do Vento
fonte
3

Um problema dex semelhante resolvido

gradle.build estava contendo:

compile files('libs/httpclient-4.2.1.jar')
compile 'org.apache.httpcomponents:httpclient:4.5'
compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1'

O problema foi resolvido quando eu removi

compile files('libs/httpclient-4.2.1.jar') 

Meu gradle agora se parece com:

apply plugin: 'com.android.application'

android {

compileSdkVersion 24
buildToolsVersion "24.0.3"

defaultConfig {
    applicationId "com.mmm.ll"
    minSdkVersion 16
    targetSdkVersion 24
    useLibrary  'org.apache.http.legacy'
}

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
}
}

dependencies {

compile 'com.google.android.gms:play-services:6.1.+'
compile files('libs/PayPalAndroidSDK.jar')
compile files('libs/ksoap2-android-assembly-3.0.0-RC.4-jar-with-dependencies.jar')
compile files('libs/picasso-2.1.1.jar')
compile files('libs/gcm.jar')
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'org.apache.httpcomponents:httpclient:4.5'
compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1'
}

Houve uma redundância no arquivo JAR e no projeto gradle compilado

Portanto, procure profundamente os arquivos jar e de dependência com as mesmas classes.

E remova a redundância.
Isso funcionou para mim.

vn brilhante
fonte
2

Se você importou seu projeto do Eclipse .

1. The select project 
2. Go to File -> **Project Structure**
3. Select app in **module** section on left hand panel
4. Select **Dependency** tab
5. Your able to see jars you have added in eclipse project for v4 and v13.
6. Remove that jar by clicking on minus sign at bottom after selection
7. Click on Plus sign select **Library Dependency** 
8. Choose V4 and V13 if added
9. Press Ok and Clean and Rebuild your project

O cenário que enfrentei depois de importar o projeto Eclipse para o Android studio.

Espero que isto ajude..

MobileEvangelist
fonte
2

Este é um problema irritante, que pode levar algum tempo para descobrir o caso raiz. A maneira como você deve proceder é a resposta do @CommonsWare.

Eu enfrentei esse problema recentemente e achei difícil de resolver.

Meu problema foi que eu estava incluindo uma biblioteca da versão "+" no build.gradle. A versão mais recente da biblioteca continha um dos dex e bang mais antigos.

Voltei à versão mais antiga da biblioteca e a resolvi.

É bom executar suas dependências do Android e ver o que realmente está acontecendo. Também é bom pesquisar na sua pasta de compilação.

Acima de tudo, o Android Studio 2.2 fornece recursos de compilação para rastrear esse problema.

Happy Coding Guys

Arun C
fonte
2

No Android Studio, acesse seu build.gradle (verifique os arquivos build.gradle do projeto e dos módulos) e procure dependências duplicadas.

Exclua aqueles que o seu projeto não precisa.

KadoLakatt
fonte
2

A exclusão de todos os arquivos do cache do Gradle corrigiu meu problema.

no Linux:

rm -rf ~/.gradle/caches/*
Yuliia Ashomok
fonte
1

Eu removi a compilação 'com.android.support:support-v4:18.0.+' nas dependências e funciona

Albert
fonte
2
isso deve ser um comentário ou você deve explicá-lo de uma maneira melhor.
Anirudh Sharma
1

Consegui resolver o problema no meu projeto nativo de reação simplesmente adicionando

configurations {
        all*.exclude group: 'com.android.support', module: 'support-compat'
        all*.exclude group: 'com.android.support', module: 'support-core-ui'
    }

no final do meu arquivo android \ app \ build.gradle

Yusuf Khan
fonte
0

Finalmente, resolvi modificar esses atributos no arquivo gradle do módulo

  1. compileSdkVersion 25
  2. targetSdkVersion 25
  3. compilar 'com.android.support:appcompat-v7:+'
  4. compilar 'com.android.support:recyclerview-v7:+'
Val Martinez
fonte
0

Eu tive o mesmo problema ao adicionar react-native-paletteao meu projeto, aqui está a minha árvore de dependências:

./gradlew app:dependencies
+--- project :react-native-palette
|    +--- com.facebook.react:react-native:0.20.+ -> 0.44.2
|    |    +--- javax.inject:javax.inject:1
|    |    +--- com.android.support:appcompat-v7:23.0.1
|    |    |    \--- com.android.support:support-v4:23.0.1
|    |    |         \--- com.android.support:support-annotations:23.0.1 -> 24.2.1
...
|    \--- com.android.support:palette-v7:24.+ -> 24.2.1
|         +--- com.android.support:support-compat:24.2.1
|         |    \--- com.android.support:support-annotations:24.2.1
|         \--- com.android.support:support-core-utils:24.2.1
|              \--- com.android.support:support-compat:24.2.1 (*)
+--- com.android.support:appcompat-v7:23.0.1 (*)
\--- com.facebook.react:react-native:+ -> 0.44.2 (*)

Eu tentei muitas soluções e não consegui corrigi-lo, até alterar a com.android.support:appcompatversão android/app/build.gradle, desejo que isso possa ajudar:

dependencies {
    compile project(':react-native-palette')
    compile project(':react-native-image-picker')
    compile project(':react-native-camera')
    compile fileTree(dir: "libs", include: ["*.jar"])
    // compile "com.android.support:appcompat-v7:23.0.1"
    compile "com.android.support:appcompat-v7:24.2.1"
    compile "com.facebook.react:react-native:+"
}

parece que várias entradas não são um grande problema, a incompatibilidade de versão é

matricial
fonte
0

Trabalhei por um compile file('...') conflito aumentando a minSdkVersion para 21 e habilitando o multidex. Não tenho certeza se essa é a melhor solução, mas a única maneira de fazê-la funcionar no meu caso.

Nota: compile file('...')pois parece que você não pode inserir uma excludecláusula para que a opção não estivesse disponível.

Ben Kleywegt
fonte
0

Eu tive o mesmo problema e minha solução está alterando a versão de suporte '27. + '(27.1.0) para '27 .0.1'

Mingyong Gu
fonte
0

Eu tive o mesmo problema. No meu projeto, eu tinha as seguintes dependências:

  • appcompat-v7
  • android-support-v13

Por motivos legados, o appcompat foi buscado no repositório do Google Maven, enquanto o suporte para Android era um .jar local.

Quando descobri isso e substitui essa referência local por uma referência simplificada, ele resolveu o meu problema de compilação.

Aqui está o diff do meu app / build.gradle:

insira a descrição da imagem aqui

kall2sollies
fonte
0

Resolvi todos os meus problemas adicionando isso em project.properties

cordova.system.library.7=com.android.support:appcompat-v7:27.1.0
eatmeimadanish
fonte
0

Recebeu o seguinte erro

Falha na execução da tarefa ': app: transformDexArchiveWithDexMergerForDebug'.

com.android.build.api.transform.TransformException: com.android.dex.DexException: vários arquivos dex definem Landroid / support / constraint / ConstraintSet $ ​​1

Correção: vá para Build -> Clean Project

Ragunath CR
fonte
Oi Bem-vindo ao Stack Overflow. Mas por favor, não repita as respostas, além de já ter 24 respostas, a construção limpa já foi fornecida como resposta por ashishduh. Obrigado!
Elletlar