Problems checking the Espresso on Dalvik runtime devices

I am facing a similar problem with FragmentActivity cannot be tested through ActivityInstrumentationTestCase2

The problem with the top solution is that it only applies to the Eclipse build system. I am using Gradle for my project.

On my Nexus 5 running ART runtime, my Espresso tool tests work fine. When I use Nexus 4 in a Dalvik runtime or emulator, I encounter an exception that does not occur when the application starts outside the scope of testing.

java.lang.NoClassDefFoundError: com.packagename.fragment.ProgressDialogFragment 

In the logs, I find these suspicious messages similar to a related question:

 Class resolved by unexpected DEX: Landroid/support/v4/app/DialogFragment2;(0x41e969d8):0x76064000 ref [Landroid/support/v4/app/DialogFragment;] Landroid/support/v4/app/DialogFragment;(0x41e969d8):0x75883000 (Landroid/support/v4/app/DialogFragment2; had used a different Landroid/support/v4/app/DialogFragment; during pre-verification) Unable to resolve superclass of Landroid/support/v4/app/DialogFragment2; (271) Link of class 'Landroid/support/v4/app/DialogFragment2;' failed Unable to resolve superclass of Lcom/packagename/fragment/ProgressDialogFragment; (270) Link of class 'Lcom/packagename/fragment/ProgressDialogFragment;' failed Could not find method com.packagename.fragment.ProgressDialogFragment.newInstance, referenced from method com.packagename.activity.IntroActivity.doJoin VFY: unable to resolve static method 47365: Lcom/packagename/fragment/ProgressDialogFragment;.newInstance (I)Landroid/support/v4/app/DialogFragment2; VFY: replacing opcode 0x71 at 0x0063 

ProgressDialogFragment is a subclass of DialogFragment2 , which is a subclass of the Android Support Library DialogFragment class

Here are the dependencies in my Gradle file if this helps:

  compile 'com.android.support:support-v4:+' compile 'com.android.support:appcompat-v7:+' compile 'com.google.android.gms:play-services:+' compile 'com.google.code.findbugs:jsr305:+' compile 'com.fasterxml.jackson.core:jackson-databind:2.3.+' compile 'de.greenrobot:greendao:1.3.+' compile 'fr.avianey:facebook-android-api: +@aar ' compile 'com.squareup.mimecraft:mimecraft:1.1.+' compile 'com.squareup.picasso:picasso:2.2.+' compile 'com.squareup.okhttp:okhttp:1.5.+' compile 'eu.inmite.android.lib:android-styled-dialogs: 1.1.+@aar ' compile 'com.newrelic.agent.android:android-agent:3.+' compile 'uk.co.chrisjenx:calligraphy:0.7.+' compile 'com.github.chrisbanes.actionbarpulltorefresh:library:0.9.+' compile 'com.github.chrisbanes.actionbarpulltorefresh:extra-abc:0.9.+' apt "com.jakewharton:butterknife:${project.ext.butterKnifeVersion}" compile "com.jakewharton:butterknife:${project.ext.butterKnifeVersion}" compile fileTree(dir: 'libs', include: '*.jar') // Excluded modules were determined from here: https://github.com/robolectric/deckard-gradle instrumentTestCompile fileTree(dir: 'libs-test', include: '*.jar') instrumentTestCompile 'com.google.guava:guava:14.0.1', 'com.squareup.dagger:dagger:1.1.0', 'org.hamcrest:hamcrest-integration:1.1', 'org.hamcrest:hamcrest-core:1.1', 'org.hamcrest:hamcrest-library:1.1' instrumentTestCompile('junit:junit:4.11') { exclude module: 'hamcrest-core' } instrumentTestCompile('org.robolectric:robolectric:2.3-SNAPSHOT') { exclude module: 'classworlds' exclude module: 'maven-artifact' exclude module: 'maven-artifact-manager' exclude module: 'maven-error-diagnostics' exclude module: 'maven-model' exclude module: 'maven-plugin-registry' exclude module: 'maven-profile' exclude module: 'maven-project' exclude module: 'maven-settings' exclude module: 'nekohtml' exclude module: 'plexus-container-default' exclude module: 'plexus-interpolation' exclude module: 'plexus-utils' exclude module: 'wagon-file' exclude module: 'wagon-http-lightweight' exclude module: 'wagon-http-shared' exclude module: 'wagon-provider-api' } instrumentTestCompile 'org.mockito:mockito-core:1.9.+' 

So my question is, how can I make sure that the same support library is used between the application’s APK and the test APK? I already tried adding instrumentTestCompile 'com.android.support:support-v4:+' to instrumentTestCompile 'com.android.support:support-v4:+' to provide the same version of the support library, but that didn't help.

+6
source share
1 answer

After severe pain, sweat and tears. I was able to determine a solution. Just adding exclude group: 'com.android.support', module: 'support-v4' to the exception list for Robolectric allowed Robolectric to continue to work without nullifying Dalvik at runtime.

+7
source

All Articles