As versões resolvidas para aplicativo (22.0.0) e aplicativo de teste (21.0.3) diferem


179

Após a atualização para a API 22 e o suporte à revisão 22 da lib, recebo o seguinte aviso:

Aviso: Conflito com a dependência 'com.android.support:support-annotations'. As versões resolvidas para o aplicativo (22.0.0) e de teste (21.0.3) são diferentes.

Gradle em si é mais tolerante, mas o Android Studio, nem tanto.

Não tenho dependências declaradas com 21.0.3 ... é uma das bibliotecas dependentes que usa 21.0.3 e o Google esqueceu de atualizá-lo com o restante do lote?

Meu build.gradlecom os extras cortados

android {
  compileSdkVersion 22
  buildToolsVersion '22'

  defaultConfig {
    applicationId "com.REDACTED.android"
    minSdkVersion 14
    targetSdkVersion 22
    renderscriptSupportModeEnabled true
    versionName '1.0.0'
    versionCode 100
  }

  buildTypes {
    release {
      minifyEnabled true
      zipAlignEnabled true
      signingConfig signingConfigs.release
    }

    debug {
      minifyEnabled false
      zipAlignEnabled true
      signingConfig signingConfigs.debug
    }
  }

  dependencies {
    provided 'org.projectlombok:lombok:1.16.2'
    googleCompile 'com.google.android.gms:play-services-base:6.5.87'
    compile 'com.android.support:support-v4:22.0.0'
    compile 'com.android.support:appcompat-v7:22.0.0'
    compile 'com.android.support:support-v13:22.0.0'
    compile 'com.android.support:cardview-v7:22.0.0'
    compile 'com.android.support:palette-v7:22.0.0'
    compile 'com.android.support:support-annotations:22.0.0'
    compile 'com.github.chrisbanes.photoview:library:1.2.3'
    compile 'org.apache.commons:commons-lang3:3.3.2'
    compile 'commons-io:commons-io:2.4'
    compile 'commons-codec:commons-codec:1.10'
    compile 'com.jakewharton:butterknife:6.1.0'
    compile 'com.jakewharton:disklrucache:2.0.2'
    compile 'com.squareup:otto:1.3.6'
    compile 'com.squareup.picasso:picasso:2.5.0'
    compile 'com.squareup.retrofit:retrofit:1.9.0'
    compile 'com.squareup.okhttp:okhttp:2.2.0'
    compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0'
    compile 'com.squareup.okio:okio:1.2.0'
    compile 'com.flaviofaria:kenburnsview:1.0.6'
    compile 'com.edmodo:cropper:1.0.1'
    compile 'com.getbase:floatingactionbutton:1.8.0'
    compile 'com.nispok:snackbar:2.10.2'
    compile 'com.github.ksoichiro:android-observablescrollview:1.5.0'
    compile 'in.srain.cube:grid-view-with-header-footer:1.0.9'
    compile 'de.hdodenhof:circleimageview:1.2.2'
    compile fileTree(dir: 'libs', include: '*.jar')
    // Test Only Dependencies
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.0'
    androidTestCompile 'com.android.support.test:testing-support-lib:0.1'
    androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.0'
  }

Atualização: (Obrigado Mark)

Parece que é expresso-contrib

+--- com.android.support.test:testing-support-lib:0.1 (*)
\--- com.android.support.test.espresso:espresso-contrib:2.0
     +--- com.android.support:recyclerview-v7:21.0.3
     |    +--- com.android.support:support-annotations:21.0.3
     |    \--- com.android.support:support-v4:21.0.3
     |         \--- com.android.support:support-annotations:21.0.3
     +--- com.android.support:support-v4:21.0.3 (*)
     \--- com.android.support.test.espresso:espresso-core:2.0 (*)

5
A dependenciestarefa Gradle pode ajudá-lo a identificar o culpado: gradle.org/docs/current/userguide/…
CommonsWare

1
Obrigado Mark. Parece que espresso-contribé a causa ...
copolii

2
Você pode tentar excludebloquear a edição 21.0.3 recyclerview-v7, puxar a edição 22.0.0 e rezar para que eles sejam suficientemente compatíveis com espresso-contribas necessidades. Pessoalmente, estou surpreso que você esteja mantendo sua sanidade com essa longa lista de dependências ... :-)
CommonsWare

1
Sim. Isso fez o truque. Se você colocar isso como resposta, eu darei a você o melhor :) androidTestCompile ('com.android.support.test.espresso: espresso-contrib: 2.0') {excluir módulo: 'support-
anototations

1
Meu mesmo problema foi resolvido apenas pelo simples restart estúdio android :)
Lakhwinder Singh Dhillon

Respostas:


286

O passo 1 ao lidar com esse tipo de coisa é se familiarizar com o Gradle da linha de comando.

A etapa 2 é executar o relatório de dependências Gradle (por exemplo, a gradle -q app:dependenciespartir da raiz do projeto). Isso fornecerá a árvore ASCII, como mostrado na atualização da pergunta, e deve ajudá-lo a identificar o que está solicitando as versões conflitantes do artefato.

O passo 3 é decidir o que precisa ser substituído. Você optou por substituir apenas o conflito ( support-annotations). Pessoalmente, eu teria seguido a raiz da árvore da versão incorreta ( recyclerview-v7), embora, pelo que sei, possa não ser o melhor curso de ação nesse caso.

A etapa 4 é adicionar a excludediretiva para bloquear o que você escolheu na etapa 3:

androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.0') {
    exclude module: 'support-annotations'
}

O passo 5 é testar o que há de errado nessa alteração. O que você está fazendo é dizer que espresso-contrib tem que lidar com a edição 22.0.0 do support-annotations. Isso pode funcionar. Isso não pode. Depende da compatibilidade com versões anteriores do conflito. Nesse caso, support-annotationsdeve ser muito bom nisso.

O passo 6 é consumir a bebida de sua escolha, uma apropriada para seu local e hora do dia.


4
Eu usei exclude group: 'com.android.support', module: 'support-annotations' uma vez a sua versão levantou uma "não se pode inferir tipos de argumentos" aviso de Gradle
appoll

2
Funciona ... também considere aplicar isso a com.android.support.test: runner: 0.3, com.android.support.test: rules: 0.3 e com.android.support.test.espresso: espresso-core: 2.2
uudashr 31/07/2015

Na etapa 4, onde você está adicionando a diretiva androidTestCompile? Se eu tentar adicionar essa sintaxe ao bloco de dependências do meu aplicativo, recebo alguns erros de sintaxe. Como está escrito agora, é um pouco difícil dizer com precisão onde você o adiciona.
OYRM

1
@OYRM: "onde você está adicionando a diretiva androidTestCompile?" - dentro dependencies. Veja este exemplo de Chiu-Ki Chan.
CommonsWare

16
Etapa 6 é a chave aqui
Odaym

146

O que fiz para resolvê-lo foi adicionar a linha abaixo ao meu script build.gradle

androidTestCompile 'com.android.support:support-annotations:xx.x.x'

Substitua xx.x.xpor qualquer versão das anotações de suporte que seu aplicativo estiver usando - isso será mostrado em suas dependências ou na mensagem de sincronização Gradle como: Resolved version for app (xx.x.x)se houver um problema na sincronização.


Uau. Eu faço isso para atualizar, Junitmas, totalmente, consegui fazê-lo para outras dependências também.
Jared Burrows

10
É realmente assim que as amostras do Google fazem isso , um comentário que diz "Forçar o uso de anotações de suporte no aplicativo de teste, pois é usado internamente pelo módulo do corredor".
desseim

Essa foi a melhor resposta para mim. Nota: Deve atualizar para '23 .1.1 ':androidTestCompile 'com.android.support:support-annotations:23.1.1'
David Manpearl

Obrigado, no meu caso, a linha já estava lá, mas declarou explicitamente uma versão conflitante, atualizada para a exigida e tudo funcionou como um encanto.
precisa saber é o seguinte

como adicionar isso ao build.gradle?
ubuntu_noob

58

Na verdade, é um bug da nova versão de atualização do Espresso Contrib, você pode consultar esta solução alternativa: android-testing / build.gradle

configurations.all {
    resolutionStrategy.force 'com.android.support:support-annotations:22.1.0'
}

2
Este foi o meu problema. O ingresso está aqui .
theblang

3
Isso cria um aviso, @ solução de RenanNery é melhor
Diego Palomar

Isso não funciona. Ainda recebo o erro de conflito por causa deandroidTestCompile 'com.android.support.test:runner:0.5'
IgorGanapolsky 22/03

1
@bony - Link quebrado
Mushtaq Jameel /

Isso funcionou para mim. Coloquei esse bloco no "android {testOptions {<here>}}"
jwehrle

23

Consulte https://github.com/JakeWharton/u2020/blob/05a57bf43b9b61f16d32cbe8717af77cd608b0fb/build.gradle#L136-L140

configurations.all {
  resolutionStrategy {
    force 'com.android.support:support-annotations:23.1.1'
  }
}

Isso resolveu meu problema.

Como alternativa, você pode executar o gradlew no windows e ./gradlew para mac / linux. Isso fará o download da sua dependência quando necessário


1
Isso também me ajudou hoje (10/11/2018), mas com a versão 26.1.0, a evitar um conflito com a versão 27.1.1.
JB Rainsberger #

8

Também encontrei esse problema, além de outros conflitos envolvendo appcompat, e a solução encontrada foi adicionar compilações de teste e defini-las para o sdk que você está usando no momento. No meu caso, são 25, então fica assim:

androidTestCompile 'com.android.support:support-annotations:25.+'
androidTestCompile 'com.android.support:appcompat-v7:25.+'
androidTestCompile 'com.android.support:support-v4:25.+'
androidTestCompile 'com.android.support:recyclerview-v7:25.+'
androidTestCompile 'com.android.support:design:25.+'

Além disso, como você pode ver, eu adicionei a dependência do design, relacionada ao Android Material Design.

Espero que ajude =)


8

para sdkversion 25

     androidTestCompile 'com.android.support:support-annotations:25.2.0'

3

você pode executar o gradlew no windows e ./gradlew para mac / linux. Isso fará o download da sua dependência quando necessário.

Você pode verificar se uma das bibliotecas depende da anotação de suporte ou se alguma biblioteca com o nome está com erro e tentar excluí-la no gradle, algo como abaixo

compile ("org.apache.maven: maven-ant-tasks: $ {mavenAntTaskVer} ‌") {excluir grupo: 'junit'}

Erro: Conflito com a dependência 'junit: junit'. As versões resolvidas para o aplicativo (3.8.1) e o aplicativo de teste (4.12) são diferentes. Consulte g.co/androidstudio/app-test-app-conflict para obter detalhes.

esse foi o erro que eu estava recebendo, então usei a linha gradle para corrigir o problema


Esta parece ser uma boa maneira de resolver um problema como este. Além disso, tente executar esta linha de comando ./gradlew: app: dependencies no diretório raiz do seu projeto, ele fará uma árvore sobre as dependências do seu projeto e fará uma verificação cuidadosa, para descobrir de onde o conflito está.
precisa saber é o seguinte

2

Simplesmente exclua estas linhas no seu arquivo build.gradle:

androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

Isto não funciona dessa forma. Isso causa mais erros no projeto

0

Esse é um problema comum no teste de instrumentação, conforme indicado aqui e pode ser resolvido simplesmente adicionando as dependências para androidTestCompile dentro do build.gradle. No meu caso, surgiram conflitos nas dependências appcompat, recyclerview e design. E resolvido adicionando as seguintes linhas

    androidTestCompile 'com.android.support:appcompat-v7:23.4.0'
    androidTestCompile 'com.android.support:recyclerview-v7:23.4.0'
    androidTestCompile 'com.android.support:design:23.4.0'

0

Eu estava tendo o mesmo problema com 26.0.0 e 27.1.1 e, na verdade, apenas atualizei o anterior para o posterior para fazê-lo funcionar.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.