2016-05-28 1 views
3

Я пытаюсь добавить библиотеку espresso-contrib в свой проект. Вот мой build.gradle файл:Android Конфликт с зависимостями appcompat

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.2" 

    defaultConfig { 
     applicationId "example.com.littlebox_hari" 
     minSdkVersion 19 
     targetSdkVersion 23 
     versionCode 1 
     versionName "1.0" 
     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
    /*configurations.all { 
     resolutionStrategy { 
      force 'com.android.support:appcompat-v7:23.4.0' 
     } 
    }*/ 
} 


dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support:appcompat-v7:23.4.0' 
    compile 'com.squareup.retrofit2:retrofit:2.0.0' 
    compile 'com.squareup.retrofit2:converter-gson:2.0.0' 
    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.uiautomator:uiautomator-v18:2.1.2' 
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1' 
    androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.2.2' 
    androidTestCompile 'com.android.support.test.espresso:espresso-idling-resource:2.2.2' 
    compile 'com.android.support:support-annotations:23.4.0' 
    testCompile 'com.android.support:support-annotations:23.4.0' 
    androidTestCompile 'com.android.support:support-annotations:23.4.0' 
} 

Я получаю эту ошибку:

Error:Conflict with dependency 'com.android.support:appcompat-v7'. Resolved versions for app (23.4.0) and test app (23.1.1) differ. See http://g.co/androidstudio/app-test-app-conflict for details. 

Если я раскомментировать строки в моем файле build.gradle, я получаю:

Error:(72) Error retrieving parent for item: No resource found that matches the given name 'TextAppearance.AppCompat.Display1'. 
Error:(75) Error retrieving parent for item: No resource found that matches the given name 'TextAppearance.AppCompat.Caption'. 
Error:(79) Error retrieving parent for item: No resource found that matches the given name 'TextAppearance.AppCompat.Caption'. 
Error:(76) Error retrieving parent for item: No resource found that matches the given name 'TextAppearance.AppCompat.Caption'. 
Error:(82) Error retrieving parent for item: No resource found that matches the given name 'TextAppearance.AppCompat.Caption'. 
Error:(89) Error retrieving parent for item: No resource found that matches the given name 'TextAppearance.AppCompat.Button'. 
D:\Littlebox-Hari\app\build\intermediates\exploded-aar\com.android.support\design\23.1.1\res\values\values.xml 
Error:(97, 5) No resource found that matches the given name: attr 'textAllCaps'. 
Error:(102, 5) No resource found that matches the given name: attr 'elevation'. 
Error:(113, 5) No resource found that matches the given name: attr 'backgroundTint'. 
Error:(113, 5) No resource found that matches the given name: attr 'elevation'. 
Error:(122, 5) No resource found that matches the given name: attr 'elevation'. 
Error:(131, 5) No resource found that matches the given name: attr 'elevation'. 

Редактировать : Я добавил следующую строку в файл build.gradle:

testCompile 'com.android.support:appcompat-v7:23.4.0' 
androidTestCompile 'com.android.support:appcompat-v7:23.4.0' 

Я по-прежнему получаю ту же ошибку.

+0

Читали ли вы URL-адрес ошибки при условии? –

+0

Возможный дубликат [Gradle: Решенные версии приложения и тестового приложения отличаются] (http://stackoverflow.com/questions/34650509/gradle-resolved-versions-for-app-and-test-app-differ) –

+0

Отредактировано: У меня такая же ошибка – rhari

ответ

16

Я также столкнулся с этой проблемой сегодня.

Сначала обновите зависимости до их последних версий (0.5 и 2.2.2).

См: https://google.github.io/android-testing-support-library/downloads/

// Android JUnit Runner 
androidTestCompile 'com.android.support.test:runner:0.5' 

// JUnit4 Rules 
androidTestCompile 'com.android.support.test:rules:0.5' 

// Espresso core 
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2' 

// Espresso-contrib for DatePicker, RecyclerView, Drawer actions, Accessibility checks, CountingIdlingResource 
androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.2.2' 

// Espresso-web for WebView support 
androidTestCompile 'com.android.support.test.espresso:espresso-web:2.2.2' 

// Espresso-idling-resource for synchronization with background jobs 
androidTestCompile 'com.android.support.test.espresso:espresso-idling-resource:2.2.2' 

Затем, вы будете сталкиваться с той же ошибкой, так как последняя версия не все еще использует последнюю версию библиотеки поддержки, как сейчас (23.4.0). Там будет вопрос открыт на багтрекер уже: https://code.google.com/p/android/issues/detail?id=211490

Это работает для меня:

dependencies { 
    ext { 
     supportLibVersion = '23.4.0' 
     espressoVersion = '2.2.2' 
    } 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    testCompile 'junit:junit:4.12' 
    androidTestCompile 'com.android.support.test:runner:0.5' 
    androidTestCompile 'com.android.support.test:rules:0.5' 
    androidTestCompile "com.android.support.test.espresso:espresso-core:$espressoVersion" 
    androidTestCompile ("com.android.support.test.espresso:espresso-contrib:$espressoVersion") { 
     exclude module: 'recyclerview-v7' 
     exclude module: 'design' 
    } 
    androidTestCompile "com.android.support.test.espresso:espresso-web:$espressoVersion" 
    androidTestCompile "com.android.support.test.espresso:espresso-idling-resource:$espressoVersion" 
    androidTestCompile "com.android.support:support-annotations:$supportLibVersion" 
    compile "com.android.support:appcompat-v7:$supportLibVersion" 
    compile "com.android.support:design:$supportLibVersion" 
    compile "com.android.support:appcompat-v7:$supportLibVersion" 
    compile "com.android.support:recyclerview-v7:$supportLibVersion" 
} 

EDIT: Согласно этому codepath guide, похоже, что это правильный путь:

ext { 
    supportLibVersion = '24.1.1' 
    espressoVersion = '2.2.2' 
    junitVersion = '4.12' 
    mockitoVersion = '1.10.19' 
    hamcrestVersion = '1.3' 
    powerMockitoVersion = '1.6.5' 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile "com.android.support:appcompat-v7:$supportLibVersion" 
    compile "com.android.support:design:$supportLibVersion" 
    compile "com.android.support:recyclerview-v7:$supportLibVersion" 

    // Testing dependencies 
    testCompile "junit:junit:$junitVersion" 
    testCompile "org.mockito:mockito-all:$mockitoVersion" 
    testCompile "org.hamcrest:hamcrest-all:$hamcrestVersion" 
    testCompile "org.powermock:powermock-module-junit4:$powerMockitoVersion" 
    testCompile "org.powermock:powermock-api-mockito:$powerMockitoVersion" 
    androidTestCompile 'com.android.support.test:runner:0.5' 
    androidTestCompile 'com.android.support.test:rules:0.5' 
    androidTestCompile "com.android.support.test.espresso:espresso-core:$espressoVersion" 
    androidTestCompile "com.android.support.test.espresso:espresso-contrib:$espressoVersion" 
    androidTestCompile "com.android.support.test.espresso:espresso-web:$espressoVersion" 
    androidTestCompile "com.android.support.test.espresso:espresso-idling-resource:$espressoVersion" 
} 

configurations.all { 
    resolutionStrategy.force "com.android.support:support-annotations:$supportLibVersion" 
} 

configurations.compile.dependencies.each { compileDependency -> 
    println "Excluding compile dependency: ${compileDependency.getName()}" 
    configurations.androidTestCompile.dependencies.each { androidTestCompileDependency -> 
    configurations.androidTestCompile.exclude module: "${compileDependency.getName()}" 
} 
+0

Да, это сработало для меня. Большое спасибо ! – rhari

+0

Мне также пришлось добавить эту строку в espresso-contrib исключает: модуль exclude: 'support-v4' –

0

Эти две конфигурации работали для меня после взлома с помощью нескольких других файлов build.gradle (чтение слишком большого количества книг для Android, где настройки градиента изменено, слияние с взломанными файлами градиентов из swles-swats, слияние с файлами градиентов из собственных рекомендованных файлов градиента Google, которые все еще были устаревшими), потому что откровенно Gradle и его система сборки отстойны (полностью уступают CMake/Rake/Scons/Make).

/* главный buid.gradle */

// Top-level build file where you can add configuration options common to all sub-projects/modules. 

buildscript { 
    repositories { 
     jcenter() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:2.1.2' 

     // NOTE: Do not place your application dependencies here; they belong 
     // in the individual module build.gradle files 
    } 
} 

plugins { 
    id 'java' 
    id "com.github.tkruse.groovysh" version "1.0.8" // optional 
} 


allprojects { 
    repositories { 
     jcenter() 
    } 
} 

task clean(type: Delete) { 
    delete rootProject.buildDir 
} 

// Define versions in a single place 
ext { 
    // Sdk and tools 
    minSdkVersion = 10 
    targetSdkVersion = 22 
    compileSdkVersion = 23 
    buildToolsVersion = '23.0.3' 

    // App dependencies 
    supportLibraryVersion = '23.4.0' 
    guavaVersion = '18.0' 
    glideVersion = '3.6.1' 
    junitVersion = '4.12' 
    mockitoVersion = '1.10.19' 
    powerMockito = '1.6.2' 
    hamcrestVersion = '1.3' 
    runnerVersion = '0.5' 
    rulesVersion = '0.5' 
    espressoVersion = '2.2.2' 
} 

и

приложение/build.gradle

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion rootProject.ext.compileSdkVersion 
    buildToolsVersion rootProject.ext.buildToolsVersion 

    defaultConfig { 
     applicationId "com.example.android.testing.notes" 
     minSdkVersion rootProject.ext.minSdkVersion 
     targetSdkVersion rootProject.ext.targetSdkVersion 
     versionCode 1 
     versionName "1.0" 

     testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner' 
    } 
    buildTypes { 
     debug { 
      // Run code coverage reports by default on debug builds. 
      testCoverageEnabled = true 
     } 
    } 

    // If you need to add more flavors, consider using flavor dimensions. 
    productFlavors { 
     mock { 
      applicationIdSuffix = ".mock" 
     } 
     prod { 

     } 
    } 

    // Remove mockRelease as it's not needed. 
    android.variantFilter { variant -> 
     if(variant.buildType.name.equals('release') 
       && variant.getFlavors().get(0).name.equals('mock')) { 
      variant.setIgnore(true); 
     } 
    } 

    // Always show the result of every unit test, even if it passes. 
    testOptions.unitTests.all { 
     testLogging { 
      events 'passed', 'skipped', 'failed', 'standardOut', 'standardError' 
     } 
    } 

} 

/* 
Dependency versions are defined in the top level build.gradle file. This helps keeping track of 
all versions in a single place. This improves readability and helps managing project complexity. 
*/ 
dependencies { 
    // App's dependencies, including test 
    compile "com.android.support:appcompat-v7:$rootProject.supportLibraryVersion" 
    compile "com.android.support:cardview-v7:$rootProject.supportLibraryVersion" 
    compile "com.android.support:design:$rootProject.supportLibraryVersion" 
    compile "com.android.support:recyclerview-v7:$rootProject.supportLibraryVersion" 
    compile "com.android.support:support-v4:$rootProject.supportLibraryVersion" 
    compile "com.google.guava:guava:$rootProject.guavaVersion" 
    compile "com.github.bumptech.glide:glide:$rootProject.glideVersion" 
    compile "com.android.support.test.espresso:espresso-idling-resource:$rootProject.ext.espressoVersion" 

    // Dependencies for local unit tests 
    testCompile "junit:junit:$rootProject.ext.junitVersion" 
    testCompile "org.mockito:mockito-all:$rootProject.ext.mockitoVersion" 
    testCompile "org.hamcrest:hamcrest-all:$rootProject.ext.hamcrestVersion" 
    testCompile "org.powermock:powermock-module-junit4:$rootProject.ext.powerMockito" 
    testCompile "org.powermock:powermock-api-mockito:$rootProject.ext.powerMockito" 

    // Android Testing Support Library's runner and rules 
    androidTestCompile "com.android.support.test:runner:$rootProject.ext.runnerVersion" 
    androidTestCompile "com.android.support.test:rules:$rootProject.ext.rulesVersion" 

    // Espresso UI Testing dependencies. 
    androidTestCompile "com.android.support.test.espresso:espresso-core:$rootProject.ext.espressoVersion" 
    androidTestCompile "com.android.support.test.espresso:espresso-contrib:$rootProject.ext.espressoVersion" 
    androidTestCompile "com.android.support.test.espresso:espresso-intents:$rootProject.ext.espressoVersion" 
} 

/* 
Resolves dependency versions across test and production APKs, specifically, transitive 
dependencies. This is required since Espresso internally has a dependency on support-annotations. 
*/ 
configurations.all { 
    resolutionStrategy.force "com.android.support:support-annotations:$rootProject.supportLibraryVersion" 
} 

/* 
All direct/transitive dependencies shared between your test and production APKs need to be 
excluded from the test APK! This is necessary because both APKs will contain the same classes. Not 
excluding these dependencies from your test configuration will result in an dex pre-verifier error 
at runtime. More info in this tools bug: (https://code.google.com/p/android/issues/detail?id=192497) 
*/ 
configurations.compile.dependencies.each { compileDependency -> 
    println "Excluding compile dependency: ${compileDependency.getName()}" 
    configurations.androidTestCompile.dependencies.each { androidTestCompileDependency -> 
     configurations.androidTestCompile.exclude module: "${compileDependency.getName()}" 
    } 
}