1. ホーム
  2. android

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

2022-04-20 12:40:10

質問

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

Warning:Conflict with dependency 'com.android.support:support-annotations'. アプリの解決済みバージョン (22.0.0) とテストアプリ (21.0.3) で異なる。

Gradle自体はもっと寛容ですが、Android Studioはそうでもありません。

私は21.0.3で宣言された依存関係を持っていません... 依存ライブラリの1つは21.0.3を使用しており、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'
  }

更新しました。 (マークさんありがとうございます)

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は 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 は、かなりいい加減なはずです。

ステップ⑥は、自分の住んでいる地域や時間帯に合った飲み物を摂取することです。