Search code examples
androidgradletarget-sdk

Android: VerifyError: Expecting a stackmap frame at branch target 15


In an android project built with gradle and Java 7, when changing the targetSdkVersion from 19 to 21, the following exception is thrown when running robolectric tests :

build.gradle:

apply plugin: 'com.android.application'
apply plugin: 'robolectric'


android {
compileSdkVersion 21
buildToolsVersion '21.0.2'
defaultConfig {
    minSdkVersion 9
    targetSdkVersion 21
    versionCode 6
    versionName '2.0.0'
}
...

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:support-v4:21.0.+'
compile 'org.roboguice:roboguice:2.0'
compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
compile 'com.github.rtyley:roboguice-sherlock:1.5'
compile 'org.apache.commons:commons-lang3:3.3.1@jar'
compile 'oauth.signpost:signpost-core:1.2.1.2'
compile 'ch.acra:acra:4.2.3'
compile 'com.google.code.gson:gson:2.2.4'
compile 'com.squareup.okhttp:okhttp:2.0.0'
compile 'com.squareup.okhttp:okhttp-urlconnection:2.0.0'
compile 'com.squareup.okio:okio:1.0.1'
compile 'com.jakewharton:disklrucache:2.0.2'
compile group: 'com.google.guava', name: 'guava', version: '17.0'
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'com.squareup:fest-android:1.0.+'
testCompile 'org.mockito:mockito-all:+'
testCompile 'junit:junit:4.11'
testCompile 'org.robolectric:robolectric:2.3+'
androidTestCompile 'com.squareup:fest-android:1.0.+'
androidTestCompile 'org.mockito:mockito-all:+'
androidTestCompile 'junit:junit:4.11'
androidTestCompile 'org.robolectric:robolectric:2.3+'
}

Failed Test output:

java.lang.VerifyError: Expecting a stackmap frame at branch target 15
Exception Details:
Location:
android/support/v4/app/FragmentTransitionCompat21$EpicenterView.$$robo$init()V @4: ifnonnull
Reason:
Expected stackmap frame at this location.
Bytecode:
0000000: 2ab4 0034 c700 0b2a 2ab8 0063 b500 34b1
0000010:                                        

at android.support.v4.app.BackStackRecord$TransitionState.__constructor__(BackStackRecord.java:1456)
at android.support.v4.app.BackStackRecord$TransitionState.<init>(BackStackRecord.java:1452)
at android.support.v4.app.BackStackRecord.beginTransition(BackStackRecord.java:1018)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:660)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1489)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:454)
at org.robolectric.util.Scheduler.postDelayed(Scheduler.java:37)
at org.robolectric.shadows.ShadowLooper.post(ShadowLooper.java:207)
at org.robolectric.shadows.ShadowHandler.postDelayed(ShadowHandler.java:56)
at org.robolectric.shadows.ShadowHandler.post(ShadowHandler.java:51)
at android.os.Handler.post(Handler.java)
at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1395)
at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:636)
at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:615)
at com.irokodemo.app.application.IrokoTestRunner.startFragment(IrokoTestRunner.java:40)
at com.irokodemo.app.fragment.TvSeasonTabFragmentTest.shouldSetTitle(TvSeasonTabFragmentTest.java:84)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:250)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:177)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:86)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:49)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:69)
at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:48)
at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.messaging.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
at org.gradle.messaging.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:105)
at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.messaging.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:355)
at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.java:64)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)

This exception is not thrown when targetSdkVersion is set to 19.

What is the problem?


Solution

  • Update Robolectric version 2.3 to 2.4 resolved this issue.

    testCompile 'org.robolectric:robolectric:2.4'