web-dev-qa-db-ja.com

Android Espressoの問題-依存関係の競合

EspressoをUIテスト用のアプリケーションに統合しようとしています。ここにGradleの私の依存関係があります

_dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.Android.support:appcompat-v7:22.2.0'
    compile 'com.Android.support:design:22.2.1'
    compile 'com.github.bumptech.glide:okhttp-integration:1.3.1@aar'
    compile 'com.squareup.okhttp:okhttp:2.0.0'
    compile 'de.hdodenhof:circleimageview:1.3.0'
    compile 'com.Android.support:cardview-v7:21.+'
    compile 'com.Android.support:recyclerview-v7:21.+'
    androidTestCompile 'com.Android.support.test.espresso:espresso-core:2.2'
    androidTestCompile 'com.Android.support.test.espresso:espresso-contrib:2.2'
    compile 'com.Android.support:support-annotations:22.2.0'
    androidTestCompile 'com.Android.support.test:runner:0.3'
    compile project(':common')
    compile project(':service')
}
_

つまり、すべてのエスプレッソ依存関係が含まれています。しかし、ビルドしようとすると、次のエラーが発生します。

Warning:Conflict with dependency 'com.Android.support:support-annotations'. Resolved versions for app (22.2.1) and test app (22.2.0) differ.

誰かがこれに遭遇しましたか?私はそれが here を報告しているのを見つけましたが、解決策はありません。誰かがこれを修正していますか?

18
DJ-DOO

何度も調べたところ、サポートアノテーションの依存関係を変更する必要があることがわかりました。

だから私は変更する必要がありましたcompile 'com.Android.support:support-annotations:22.2.0'からandroidTestCompile 'com.Android.support:support-annotations:22.+'

10
DJ-DOO

新しいバージョンのespresso-contrib 2.2.2ライブラリがcom.Android.support:appcompat-v7:23.1.1に依存するようになり、異なるバージョンのappcompat-v7を使用すると競合が発生する以下のようなcompile時間依存性:

dependencies {
     compile fileTree(dir: 'libs', include: ['*.jar'])
     testCompile 'junit:junit:4.12'
     compile 'com.Android.support:appcompat-v7:23.4.0'

     androidTestCompile 'com.Android.support.test.espresso:espresso-contrib:2.2.2'
}

以下のようにappcompat-v7からespresso-contrib依存関係を除外する場合の競合を回避するために、design support libに対するいくつかの値の依存関係により、再度依存します。

androidTestCompile ('com.Android.support.test.espresso:espresso-contrib:2.2.2'){
    exclude module: 'support-annotations'
    exclude module: 'support-v4'
    exclude module: 'support-v13'
    exclude module: 'recyclerview-v7'
    exclude module: 'appcompat-v7'
}

エラー:

エラー:(69)アイテムの親の取得中にエラーが発生しました:指定された名前「TextAppearance.AppCompat.Display1」に一致するリソースが見つかりませんでした。

したがって、上記の問題の解決策は、以下のようにespresso-contribから 'design-support' lib依存性を除外することです:

androidTestCompile ('com.Android.support.test.espresso:espresso-contrib:2.2.2'){
    exclude module: 'support-annotations'
    exclude module: 'support-v4'
    exclude module: 'support-v13'
    exclude module: 'recyclerview-v7'
    exclude module: 'design'
}

これで競合の問題が解決します!

答えのより詳細なバージョンについては、私の他の answer を確認できます

34
PunitD

androidTest依存関係の最新バージョンは、support-annotations libの適切なバージョンによって異なります。私の場合は:

androidTestCompile 'com.Android.support.test:runner:0.4'
androidTestCompile 'com.Android.support.test:rules:0.4'
androidTestCompile 'com.Android.support.test.espresso:espresso-core:2.2.1'
androidTestCompile 'com.Android.support.test.espresso:espresso-intents:2.2.1'
androidTestCompile 'org.mockito:mockito-core:2.0.31-beta'

また、回避策として、次のコードをbuild.gradleAndroid{}セクションに追加できます。

configurations.all {
   resolutionStrategy {
       force 'com.Android.support:support-annotations:23.0.1'
   }
}
8
Nikita Barishok

Jake Wharton U2020アプリケーション では、次の方法で解決されます

あなたに追加gradle.buildファイル

configurations.all {
    resolutionStrategy {
        force 'com.Android.support:support-annotations:23.0.1'
    }
}
7
httpdispatch

プロジェクトとテストアプリの間で同様の依存関係の競合が発生した後、Lリリース用に次のバージョンを組み合わせる必要がありました。

Android {
    useLibrary 'org.Apache.http.legacy'
    compileSdkVersion 23
    buildToolsVersion '23.0.1'
    defaultConfig {    
        minSdkVersion 14
        targetSdkVersion 23
    }
}
dependencies {
    compile 'com.Android.support:appcompat-v7:23.0.1'
    compile 'com.Android.support:support-v4:23.0.1'

    androidTestCompile 'com.Android.support.test:runner:0.4'
    androidTestCompile 'com.Android.support.test:rules:0.4'
    androidTestCompile 'com.Android.support.test.espresso:espresso-core:2.2.1'
    androidTestCompile 'com.Android.support.test.espresso:espresso-intents:2.2.1'
}

org.Apache.httpインポートを使用しているため、useLibraryが必要でした。参照 https://github.com/bitstadium/HockeySDK-Android/issues/8

4
hcpl

問題は次のファイルにあります:Android-sdk\extras\Android\m2repository\com\Android\support\test\runner\0.3\runner-0.3.pom

ここに:

<dependency>
      <groupId>com.Android.support</groupId>
      <artifactId>support-annotations</artifactId>
      <version>22.2.0</version>
      <scope>compile</scope>
</dependency>

22.2.0の代わりに22.2.1を設定すると機能します

1
Valentino

Googleのドキュメントに記載されているとおり: https://sites.google.com/a/Android.com/tools/tech-docs/new-build-system/user-guide#TOC-Resolving-conflicts-between -main-and-test-APK

解決する方法は、androidTestCompileのサポートライブラリをプロジェクトで使用しているバージョンに明示的に設定することです。

たとえば、サポートライブラリバージョン25.0.1を使用している場合は、

androidTestCompile 'com.Android.support:support-annotations:25.0.1'

build.gradle構成

1
Noya

コンパイルを変更するだけですcom.Android.support:support-annotations:22.2.0から23.0.1 2.2.1バージョンを使用する場合

0
smallfatter