アプリ(22.0.0)とテストアプリ(21.0.3)の解決済みバージョンが異なる


179

API 22にアップグレードしてlibリビジョン22をサポートした後、次の警告が表示されます。

警告:依存関係「com.android.support:support-annotations」と競合しています。アプリ(22.0.0)とテストアプリ(21.0.3)の解決済みバージョンは異なります。

Gradle自体はより寛容ですが、Android Studioではそれほどではありません。

21.0.3で宣言された依存関係はありません... 21.0.3を使用する依存ライブラリの1つであり、Googleは残りのバッチで更新するのを忘れていますか?

build.gradle余分なものを切り取った私の

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

更新:(ありがとうマーク)

エスプレッソコントリビュートのようです

+--- 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
Gradleのdependenciesタスクは、あなたが犯人を識別しやすくすることができる場合がありますgradle.org/docs/current/userguide/...
CommonsWare

1
マークありがとう。espresso-contrib原因のようです...
copolii 2015年

2
を試して、excludeの21.0.3エディションをブロックし、自分で22.0.0エディションをrecyclerview-v7プルし、espresso-contribのニーズに十分に対応できるように祈ることができます。個人的には、長い依存関係リストで正気を維持していることに驚いています... :-)
CommonsWare

1
うん。これでうまくいきました。あなたが答えとしてそれを上げたら、私はあなたに豆をあげます:) androidTestCompile( 'com.android.support.test.espresso:espresso-contrib:2.0'){exclude module: 'support-annotations'}
copolii

1
私の同じ問題は、単純なAndroidスタジオの再起動によって解決されました:)
Lakhwinder Singh Dhillon 2017

回答:


286

この種のものを扱うときのステップ1は、コマンドラインGradleに慣れることです。

ステップ#2は、Gradle依存関係レポートを実行することです(たとえば、gradle -q app:dependenciesプロジェクトルートから)。これにより、質問の更新に示されているように、ASCIIツリーが提供され、競合するアーティファクトバージョンを要求しているものを特定するのに役立ちます。

ステップ#3は何を置き換える必要があるかを決定することです。競合のみを置き換えることを選択しました(support-annotations)。個人的には、間違ったバージョンのツリー(recyclerview-v7)のルートをたどっていたはずですが、この場合、それが最善の策ではないかもしれません。

ステップ4はexclude、ステップ3で選択したものをブロックするディレクティブを追加することです。

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

ステップ#5は、この変更から一体をテストすることです。あなたがやっていることは、それespresso-contrib 22.0.0版を処理しなければならないということですsupport-annotations。うまくいくかもしれません。そうではないかもしれません。競合の後方互換性に依存します。この場合、support-annotationsそれについてはかなり良いはずです。

ステップ#6は、お住まいの地域や時間帯に適したお好みの飲み物を飲むことです。


4
exclude group: 'com.android.support', module: 'support-annotations' あなたのバージョンが
gradle

2
機能します...これをcom.android.support.test:runner:0.3、com.android.support.test:rules:0.3およびcom.android.support.test.espresso:espresso-core:2.2に適用することも検討してください
uudashr 2015

ステップ#4では、androidTestCompileディレクティブをどこに追加しますか?その構文をアプリの依存関係ブロックに追加しようとすると、いくつかの構文エラーが発生します。これは現在書かれているので、どこに追加するかを正確に伝えるのは少し難しいです。
OYRM 2016年

1
@OYRM:「androidTestCompileディレクティブをどこに追加しますか?」-でdependencies。ちゅうきちゃんのサンプルをご覧ください。
CommonsWare 2016年

16
ここで重要なのはステップ6です
Odaym

146

私がそれを解決するためにしたことは、私のbuild.gradleスクリプトに以下の行を追加することでした

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

xx.x.xアプリが使用しているサポートアノテーションのバージョンに置き換えます。これは、依存関係に表示されるか、Gradle同期メッセージとして表示されます:Resolved version for app (xx.x.x)同期に問題がある場合。


ワオ。私はこれをアップグレードのために行いますJunitが、完全に他の依存関係についても行うことができます。
Jared Burrows

10
これは実際にGoogleのサンプルが行う方法であり、「ランナーモジュールによって内部的に使用されるため、テストアプリでのサポートアノテーションの使用を強制します」というコメントがあります。
2015年

これは私にとって最良の答えでした。注:「23.1.1」に更新する必要があります:androidTestCompile 'com.android.support:support-annotations:23.1.1'
David Manpearl

おかげで、私の場合、ラインはすでにそこにありましたが、競合するバージョンを明示的に述べ、必要なバージョンに更新され、すべてが魅力のように機能しました。
RAM237 2017

これをbuild.gradleに追加する方法は?
ubuntu_noob

58

実際には、Espresso Contribの新しいアップデートバージョンのバグです。この回避策を参照できます:android-testing / build.gradle

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

2
これが私の問題でした。チケットはこちら
theblang

3
これは警告を作成し、@ RenanNeryのソリューションの方が優れています
Diego Palomar

それはうまくいきません。私はまだ理由の競合エラーを取得するandroidTestCompile 'com.android.support.test:runner:0.5'
IgorGanapolsky

1
@bony-リンクが壊れている
Mushtaq Jameel

これでうまくいきました。このブロックを「android {testOptions {<here>}}」に配置しました
jwehrle

23

https://github.com/JakeWharton/u2020/blob/05a57bf43b9b61f16d32cbe8717af77cd608b0fb/build.gradle#L136-L140を参照してください

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

これで私の問題は解決しました。

または、Windowsでgradlewを実行し、mac / linuxの場合は./gradlewを実行して、必要なときに依存関係をダウンロードすることもできます。


1
これは、今日(2018-11-10)にも役立ちましたが、バージョン27.1.1との競合を回避するために、バージョン26.1.0を使用しました。
JB Rainsberger

8

私はまた、この問題とappcompatを含む他の競合に遭遇しました。私が見つけた解決策は、テストコンパイルを追加し、それらを現在使用しているsdkに設定することでした。私の場合は25なので、次のようになります。

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

さらに、ご覧のとおり、Android Material Designに関連する設計依存関係を追加しました。

それが役に立てば幸い=)


8

sdkversion 25の場合

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

3

Windowsでgradlewを実行し、mac / linuxでは./gradlewを実行できます。これにより、必要なときに依存関係がダウンロードされます。

ライブラリの1つがサポートアノテーションに依存しているかどうか、またはライブラリが誤って名前が付けられているかどうかを確認し、gradleで以下のようなものを除外してみることができます

compile( "org.apache.maven:maven-ant-tasks:$ {mavenAntTaskVer} ‌"){グループを除外: 'junit'}

エラー:依存関係「junit:junit」と競合します。アプリ(3.8.1)とテストアプリ(4.12)の解決済みバージョンは異なります。詳しくは、g.co / androidstudio / app-test-app-conflictをご覧ください。

これは私が得ていたエラーだったので、問題を解決するためにgradle lineより上を使用しました


これは、このような問題を解決するための本当に良い方法のようです。さらに、この./gradlew:app:dependenciesコマンドラインをプロジェクトのルートディレクトリの下で実行してみてください。これにより、プロジェクトの依存関係についてツリーが作成され、慎重にチェックされると、どこから競合が発生しているかがわかります。
frank jorsn 2017

2

build.gradleファイルでこれらの行を削除するだけです。

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

そのようには機能しません。プロジェクトにより多くのエラーが発生します

0

これは、ここで説明したインストゥルメンテーションテストの一般的な問題であり、build.gradle内にandroidTestCompileの依存関係を追加するだけで解決できます。私の場合、appcompat、recyclerview、および設計の依存関係で競合が発生しました。そして、次の行を追加することで解決しました

    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

私は26.0.0と27.1.1で同じ問題を抱えていましたが、実際には前者を後者にアップグレードするだけで機能します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.