ghd214 / android-test-kit

Automatically exported from code.google.com/p/android-test-kit
0 stars 0 forks source link

Espresso-contrib cannot inflate RecyclerView with IllegalStateException (Unable to find LayoutManager) #157

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
What steps will reproduce the problem?
1. Set up an activity that contains a RecyclerView exactly as shown in the 
official examples.
2. Run the app and see that it works.
3. Write a test that starts that activity with the following dependencies:

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

4. Run the test and see that there are no problems.
5. Add the following dependency:

    androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.2'

6. Run the test and see that the RecyclerView could not be inflated because the 
LayoutManager instance couldn't be found.

What is the expected output? What do you see instead?

The test should work exactly as it did before espresso-contrib was included in 
the dependencies. Instead, the test raise an IllegalStateException:

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(AppCompatDelegateI
mplV7.java:249)
at 
android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:1
06)
...
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)

What version of the product are you using? On what operating system?

Using following versions:

compileSdkVersion 22
gradle plugin 1.2.3
buildTools 22.0.1
minSdkVersion 16
recyclerview-v7:22.2.0
appcompat-v7:22.2.0
design:22.2.0

Mac OSX 10.10.3
Android Studio 1.3.0-preview2

Please provide any additional information below.

Stack Overflow question: 
https://stackoverflow.com/questions/30578243/why-would-adding-espresso-contrib-c
ause-an-inflateexception

Original issue reported on code.google.com by kovach...@gmail.com on 2 Jun 2015 at 4:08

GoogleCodeExporter commented 9 years ago
Can you please bump the runner/rules dep to 0.3:

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

Does this fix the issue?

Original comment by slinz...@google.com on 8 Jun 2015 at 3:37

GoogleCodeExporter commented 9 years ago
Bumping rules/runner to 0.3 doesn't seem to change anything.

As an experiment, I also tried to set the LayoutManager in the xml:

    <android.support.v7.widget.RecyclerView
        android:id="@+id/my_list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:scrollbars="vertical"
        android.support.v7.recyclerview:layoutManager="android.support.v7.widget.LinearLayoutManager"
        tools:listItem="@layout/my_list_item" />

This made no difference. I've also played with adding/removing different 
attributes on the RecyclerView, but still haven't had any luck.

I've attached screenshots to show exactly what is happening where the error 
occurs.

It appears the version of recyclerview that is included by espresso-contrib is 
messing with the version I've included in my dependencies (22.2.0), and is 
attempting to reference a default layoutmanager resource that doesn't exist in 
my project. I am able to work around the issue by excluding transitive 
dependencies for espresso-contrib:

    androidTestCompile('com.android.support.test.espresso:espresso-contrib:2.2') {
        exclude group: 'com.android.support'
    }

Original comment by kovach...@gmail.com on 9 Jun 2015 at 12:21

Attachments:

GoogleCodeExporter commented 9 years ago
espresso-contrib uses 22.2.0 for android.support.*, so this should not be an 
issue. I'll have a closer look and try to reproduce it.

Original comment by slinz...@google.com on 9 Jun 2015 at 2:44

GoogleCodeExporter commented 9 years ago
Same thing here:

android.view.InflateException: Binary XML file line #17: Error inflating class 
android.support.v7.widge
                            t.RecyclerView
                         E      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
                         E      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)
                         E      at android.app.ActivityThread.access$800(ActivityThread.java:151)
                         E      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
                         E      at android.os.Handler.dispatchMessage(Handler.java:102)
                         E      at android.os.Looper.loop(Looper.java:135)
                         E      at android.app.ActivityThread.main(ActivityThread.java:5257)
                         E      at java.lang.reflect.Method.invoke(Native Method)
                         E      at java.lang.reflect.Method.invoke(Method.java:372)
                         E      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
                         E      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
                         E  Caused by: android.view.InflateException: Binary XML file line #17: Error inflating class android.support.v7.widget.RecyclerView
                         E      at android.view.LayoutInflater.createView(LayoutInflater.java:633)
                         E      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)
                         E      at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
                         E      at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
                         E      at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
                         E      at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
                         E      at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
                         E      at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:249)
                         E      at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106)
                         E      at com.bizzby.app.refactor.presentation.jobcreator.JobCreatorActivity.onCreate(JobCreatorActivity.java:66)
                         E      at android.app.Activity.performCreate(Activity.java:5990)
                         E      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
                         E      at android.support.test.runner.MonitoringInstrumentation.callActivityOnCreate(MonitoringInstrumentation.java:494)
                         E      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
                         E      ... 10 more
                         E  Caused by: java.lang.reflect.InvocationTargetException
                         E      at java.lang.reflect.Constructor.newInstance(Native Method)
                         E      at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
                         E      at android.view.LayoutInflater.createView(LayoutInflater.java:607)
                         E      ... 23 more
                         E  Caused by: java.lang.IllegalStateException: Binary XML file line #17: Unable to find LayoutManager android.support.v7.widget.@2131
                            427752
                         E      at android.support.v7.widget.RecyclerView.createLayoutManager(RecyclerView.java:500)
                         E      at android.support.v7.widget.RecyclerView.<init>(RecyclerView.java:438)
                         E      at android.support.v7.widget.RecyclerView.<init>(RecyclerView.java:404)
                         E      ... 26 more
                         E  Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.v7.widget.@2131427752" on path: DexPathList[[zip f
                            ile "/system/framework/android.test.runner.jar", zip file "/data/app/com.bizzby.app.debug.test-1/base.apk", zip file "/data/app/co
                            m.bizzby.app.debug-1/base.apk"],nativeLibraryDirectories=[/data/app/com.bizzby.app.debug-1/lib/x86, /vendor/lib, /system/lib]]
                         E      at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
                         E      at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
                         E      at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
                         E      at android.support.v7.widget.RecyclerView.createLayoutManager(RecyclerView.java:480)
                         E      ... 28 more
                         E      Suppressed: java.lang.ClassNotFoundException: Invalid name: android.support.v7.widget.@2131427752
                         E          at java.lang.Class.classForName(Native Method)
                         E          at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
                         E          at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
                         E          at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
                         E          ... 30 more

Using:

    androidTestCompile 'com.android.support.test:runner:0.3'
    androidTestCompile 'com.android.support.test:rules:0.3'
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2'
    androidTestCompile('com.android.support.test.espresso:espresso-contrib:2.2') 

Original comment by luis.gva...@gmail.com on 11 Jun 2015 at 5:46

GoogleCodeExporter commented 9 years ago
In case anybody has the same issue, I found this trick that seems to fix the 
problem:
androidTestCompile('com.android.support.test.espresso:espresso-contrib:2.0') {
    exclude group: 'com.android.support', module: 'appcompat'
    exclude group: 'com.android.support', module: 'support-v4'
    exclude module: 'recyclerview-v7'
}

Source of the trick:
https://androidresearch.wordpress.com/2015/04/04/an-introduction-to-espresso/

Original comment by Debon.Ju...@gmail.com on 18 Jun 2015 at 4:53