Почему добавление espresso-contrib может вызвать InflateException?

В моем файле build.gradle у меня есть зависимости библиотеки поддержки:

compile "com.android.support:appcompat-v7:22.2.0"
compile "com.android.support:recyclerview-v7:22.2.0"
compile "com.android.support:design:22.2.0"

У меня также есть зависимости для тестов эспрессо:

androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2'
androidTestCompile 'com.android.support.test.espresso:espresso-intents:2.2'

На данный момент все работает нормально, но когда я добавляю зависимость для espresso-contrib, я получаю InflateException на моем RecyclerView

android.view.InflateException: Binary XML file line #33: Error inflating class android.support.v7.widget.RecyclerView
at android.view.LayoutInflater.createView(LayoutInflater.java:633)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:249)
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106)
...
Caused by: java.lang.IllegalStateException: Binary XML file line #33: Unable to find LayoutManager android.support.v7.widget.@2131296518
at android.support.v7.widget.RecyclerView.createLayoutManager(RecyclerView.java:500)
at android.support.v7.widget.RecyclerView.<init>(RecyclerView.java:438)
at android.support.v7.widget.RecyclerView.<init>(RecyclerView.java:404)
...
Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.v7.widget.@2131296518" on path: DexPathList[[zip file "/system/framework/android.test.runner.jar", zip file "/data/app/com.myapp.debug.test-1/base.apk", zip file "/data/app/com.myapp.debug-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
at android.support.v7.widget.RecyclerView.createLayoutManager(RecyclerView.java:480)
...
Suppressed: java.lang.ClassNotFoundException: Invalid name: android.support.v7.widget.@2131296518
at java.lang.Class.classForName(Native Method)
at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
at java.lang.ClassLoader.loadClass(ClassLoader.java:504)

Любая идея о том, почему это может происходить и как я могу это исправить?


person rosegrink    schedule 01.06.2015    source источник


Ответы (3)


Попробуйте это в своем build.gradle:

androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.2'){
    exclude group: 'com.android.support', module: 'appcompat-v7'
    exclude group: 'com.android.support', module: 'support-v4'
    exclude module: 'recyclerview-v7'
}
person elcolto    schedule 08.06.2015
comment
В чем разница между espresso-contrib и espresso-core? - person IgorGanapolsky; 15.06.2015
comment
espresso-contrib дает вам возможность тестировать такие классы, как datepicker, drawerlayout и recyclerview. См. здесь: developer.android.com/reference /android/support/test/эспрессо/ - person elcolto; 15.06.2015
comment
Ошибка No class found для android.support.v7.app.AppCompatDelegateImplV14 устранена с помощью proguard, спасибо! - person Daniel Gomez Rico; 14.07.2015
comment
Это следует принять как правильный ответ! Большое спасибо! - person zsolt.kocsi; 22.12.2015
comment
У меня было зависание при запуске приложения. а теперь его нет. Благодарность - person Uriel Frankel; 12.01.2016
comment
Я должен был сделать: exclude group: 'com.android.support' exclude module: 'recyclerview-v7' - person Jemshit Iskenderov; 21.12.2016
comment
Также добавьте exclude group: 'com.android.support', module: 'design', если вы используете библиотеку дизайна поддержки. - person Lunero; 27.08.2017

У меня такая же проблема с ошибкой, раздувающей представление класса recycler, и я несколько раз пытался использовать различные коды, наконец, я решил эту проблему, добавив эти коды в проект gradle:

 androidTestCompile 'com.android.support.test.espresso:espresso-intents:2.2.1'
androidTestCompile ('com.android.support.test.espresso:espresso-core:2.2.1') {
    exclude module: 'support-annotations'
}
androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.2.1') {
    exclude module: 'support-annotations'
    exclude module: 'support-v4'
    exclude module: 'recyclerview-v7'
}

Во-вторых, вы должны убедиться, что используете представление карты и представление переработчика в последней версии:

compile 'com.android.support:cardview-v7:23.1.1'
compile 'com.android.support:recyclerview-v7:23.1.1'

Затем вы можете запустить свой тест, который имеет вид переработчика в его макете активности. Он будет работать нормально, и ошибка больше не повторится.

person audrians    schedule 07.02.2016

Попробуй это:

// Testing dependencies
androidTestCompile 'com.android.support.test:runner:0.4.1'
androidTestCompile 'com.android.support.test:rules:0.4.1'
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'
androidTestCompile 'com.android.support.test.espresso:espresso-intents:2.2.1'
    androidTestCompile('com.android.support.test.espresso:espresso-contrib:2.2.1') {
        exclude group: 'com.android.support', module: 'appcompat'
        exclude group: 'com.android.support', module: 'support-v4'
        exclude module: 'support-annotations'
        exclude module: 'recyclerview-v7'
    }
person Andrey Kolchev    schedule 12.01.2016