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'
}
更新:(Thanks Mark)
Espresso-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 (*)
この種のことを扱うときのステップ#1は、コマンドラインGradleに慣れることです。
ステップ#2は、 Gradle依存関係レポート を実行することです(たとえば、プロジェクトルートのgradle -q app:dependencies
)。これにより、質問への更新に示されているようにASCIIツリーが提供され、競合する成果物バージョンを求めているものを特定するのに役立ちます。
ステップ#3は何を置き換える必要があるかを決定することです。あなたは矛盾だけを置き換えることを選択しました(support-annotations
)。個人的には、私は間違ったバージョンのツリーのルート(recyclerview-v7
)を使っていたでしょう。
ステップ#4では、ステップ#3で選択したものをブロックするためにexclude
ディレクティブを追加します。
androidTestCompile ('com.Android.support.test.espresso:espresso-contrib:2.0') {
exclude module: 'support-annotations'
}
ステップ#5では、この変更の影響をテストします。 espresso-contrib
はsupport-annotations
の22.0.0エディションを扱うために持っていると言っています。それはうまくいくかもしれません。そうではないかもしれません。それは競合の後方互換性に依存します。この場合、support-annotations
はそれについてかなり良いはずです。
ステップ#6は、あなたの選択した飲み物をあなたの居場所と時間帯に適したものを消費することです。
私がそれを解決するためにしたのは私のbuild.gradleスクリプトに以下の行を追加することでした
androidTestCompile 'com.Android.support:support-annotations:xx.x.x'
xx.x.x
をあなたのアプリが使用しているサポートアノテーションのバージョンに置き換えてください - これはあなたの依存関係に現れるでしょう、あるいはGradle同期メッセージは次のようになります:Resolved version for app (xx.x.x)
は問題の同期があるべきです。
実際にはそれはEspresso Contribの新しいアップデート版のバグです、あなたはこの回避策を参照することができます: Android-testing/build.gradle
configurations.all {
resolutionStrategy.force 'com.Android.support:support-annotations:22.1.0'
}
configurations.all {
resolutionStrategy {
force 'com.Android.support:support-annotations:23.1.1'
}
}
これで私の問題は解決しました。
あるいは、windowsでgradlewを実行し、mac/linuxで./gradlewを実行すると、必要に応じて依存関係をダウンロードできます。
私はまたこの問題と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に関連するデザイン依存関係を追加しました。
それが役立つことを願っています=)
sDKバージョン25用
androidTestCompile 'com.Android.support:support-annotations:25.2.0'
あなたはwindowsでgradlewを、mac/linuxで./gradlewを実行することができます。これは必要な時にあなたの依存関係をダウンロードします。
ライブラリの1つがサポートアノテーションに依存しているかどうか、または任意のライブラリが誤って命名されているかどうかを確認し、それを次のような段階で除外してみてください
compile( "org.Apache.maven:maven-ant-tasks:$ {mavenAntTaskVer}}"){グループを除外: 'junit'}
エラー:依存関係 'junit:junit'と競合しています。アプリ(3.8.1)とテストアプリ(4.12)の解決バージョンは異なります。詳細はg.co/androidstudio/app-test-app-conflictを参照してください。
これは私が得ていたエラーだったので、私は問題を解決するために上の行の行を使用しました
Build.gradleファイルのこれらの行を削除するだけです。
androidTestImplementation 'com.Android.support.test:runner:1.0.2'
androidTestImplementation 'com.Android.support.test.espresso:espresso-core:3.0.2'
私は26.0.0と27.1.1でも同じ問題を抱えていましたが、実際には前者を後者にアップグレードするだけで動作します。
これは ここ で説明されているようにインストルメンテーションテストの一般的な問題であり、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'