Как видите, исключение происходит из
com.android.build.gradle.internal
Caused by: java.lang.IllegalStateException
at org.objectweb.asm.tree.analysis.BasicInterpreter.<init>(BasicInterpreter.java:66)
at com.android.build.gradle.internal.incremental.ConstructorBuilder$1.<init>(ConstructorBuilder.java:127)
at com.android.build.gradle.internal.incremental.ConstructorBuilder.build(ConstructorBuilder.java:127)
at com.android.build.gradle.internal.incremental.IncrementalSupportVisitor.visitMethod(IncrementalSupportVisitor.java:223)
at org.objectweb.asm.ClassVisitor.visitMethod(ClassVisitor.java:327)
at org.objectweb.asm.commons.SerialVersionUIDAdder.visitMethod(SerialVersionUIDAdder.java:236)
at org.objectweb.asm.tree.MethodNode.accept(MethodNode.java:686)
at org.objectweb.asm.tree.ClassNode.accept(ClassNode.java:436)
at com.android.build.gradle.internal.incremental.IncrementalVisitor.instrumentClass(IncrementalVisitor.java:365)
at com.android.build.gradle.internal.transforms.InstantRunTransform.transformToClasses2Format(InstantRunTransform.java:414)
at com.android.build.gradle.internal.transforms.InstantRunTransform.lambda$doTransform$4(InstantRunTransform.java:276)
at com.android.build.gradle.internal.transforms.InstantRunTransform.lambda$null$5(InstantRunTransform.java:305)
Код
com.android.build.gradle.internal.incremental.ConstructorBuilder.build
что вызывает исключение в
ConstructorBuilder.java:127
:
BasicInterpreter interpreter = new BasicInterpreter() {
что неверно в соответствии с Javadoc конструктора
org.objectweb.asm.tree.analysis.BasicInterpreter
который бросает
исключение в
BasicInterpreter.java:66
/**
* Constructs a new {@link BasicInterpreter} for the latest ASM API version. <i>Subclasses must
* not use this constructor</i>. Instead, they must use the {@link #BasicInterpreter(int)}
* version.
*/
public BasicInterpreter() {
super(ASM6);
if (getClass() != BasicInterpreter.class) {
throw new IllegalStateException();
}
}
Очевидно, что об этом следует сообщить разработчикам Android SDK -
https://developer.android.com/studio/report-bugs.html
Можно задаться вопросом, почему исключение не происходит без последней строки в
dependencies {
classpath 'com.android.tools.build:gradle:3.2.1'
classpath 'org.jacoco:org.jacoco.core:0.8.2'
И причина похожа на
https://github.com/jacoco/jacoco/issues/639#issuecomment-355424756 -
несколько версий ASM в classpath:
- JaCoCo 0.8.2 требует ASM 6.2.1, а
org.jacoco:org.jacoco.core:0.8.2
правильно объявляет зависимости от
ASM
- исключение добавлено в ASM 6.1
com.android.build.gradle.internal.incremental.ConstructorBuilder
скорее всего был разработан / использует более старую версию ASM
Чтобы избежать таких проблем с classpath, разработчики Android SDK могут
пересмотреть способ выполнения JaCoCo и, например, использовать выделенный
ClassLoader.
В качестве возможного обходного пути вы можете попробовать использовать JaCoCo 0.8.1, который зависит
на ASM 6.0