Android開発でテストを行おうと思い、Espressoを実行しようと思ったら実装とテストのバージョン違いでつまずいたので、まとめたいと思います。
テストを実行しようと思うと下記エラーが発生しました。
Conflict with dependency 'com.android.support:support-annotations'. Resolved versions for app (27.0.0) and test app (27.1.1) differ.
アノテーションの定義なんてしたかなあと思いながら、app/build.gradleを見てみると、定義していませんでした。
dependencies { implementation 'io.realm:android-adapters:2.1.1' implementation fileTree(include: ['*.jar'], dir: 'libs') implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" implementation 'com.android.support:appcompat-v7:27.0.0' implementation 'com.android.support.constraint:constraint-layout:1.1.3' implementation 'com.android.support:design:27.0.0' implementation "org.jetbrains.anko:anko-common:$anko_version" testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.1' androidTestImplementation 'com.android.support.test:rules:1.0.1' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' implementation 'com.android.support:appcompat-v7:27.0.0' }
あれれ....なんで入っているんだろうと思いながら、gradlew app:dependenciesをターミナルでたたいてみると、なんと入っていました。 設定していないのに参照していました。
androidTestCompile - Classpath for compiling the androidTest sources. +--- com.android.support.test.espresso:espresso-core:3.0.2 | +--- com.android.support.test:runner:1.0.2 (*) | +--- com.android.support.test.espresso:espresso-idling-resource:3.0.2 | +--- com.squareup:javawriter:2.1.1 | +--- javax.inject:javax.inject:1 \--- com.android.support:support-annotations:27.1.1
なので、下記設定を追加して、実装とテストのバージョンを合わせました。
implementation 'com.android.support:appcompat-v7:27.0.0'
もしくは対象のモジュールを除外すれば問題ないです。
androidTestCompile('com.android.support.test:runner:0.5') { exclude group: 'com.android.support', module: 'support-annotations' } androidTestCompile('com.android.support.test:rules:0.5') { exclude group: 'com.android.support', module: 'support-annotations' }