Open sharmag222cool opened 6 years ago
Faced with the same issue during AndroidDevMetric integration into the project
FATAL EXCEPTION: main
Process: com.mysomepackage.android, PID: 4809
java.lang.VerifyError: Verifier rejected class com.frogermcs.androiddevmetrics.aspect.Dagger2GraphAnalyzer due to bad method boolean com.frogermcs.androiddevmetrics.aspect.Dagger2GraphAnalyzer.ajc$inlineAccessMethod$com_frogermcs_androiddevmetrics_aspect_Dagger2GraphAnalyzer$com_frogermcs_androiddevmetrics_aspect_Dagger2GraphAnalyzer$isMethodWithReturnType(com.frogermcs.androiddevmetrics.aspect.Dagger2GraphAnalyzer, org.aspectj.lang.reflect.CodeSignature)(declaration of 'com.frogermcs.androiddevmetrics.aspect.Dagger2GraphAnalyzer'
appears in /data/app / com.mysomepackage.android - 1 / split_lib_dependencies_apk.apk)
at com.frogermcs.androiddevmetrics.aspect.Dagger2GraphAnalyzer.setEnabled(Dagger2GraphAnalyzer.java: 20)
at com.frogermcs.androiddevmetrics.AndroidDevMetrics.setupMetrics(AndroidDevMetrics.java: 107)
at com.frogermcs.androiddevmetrics.AndroidDevMetrics.setAndroidDevMetrics(AndroidDevMetrics.java: 79)
at com.frogermcs.androiddevmetrics.AndroidDevMetrics.initWith(AndroidDevMetrics.java: 69)
at com.frogermcs.androiddevmetrics.AndroidDevMetrics.initWith(AndroidDevMetrics.java: 62)
at com.frogermcs.androiddevmetrics.AndroidDevMetrics.initWith(AndroidDevMetrics.java: 58)
at com.mysomepackage.android.MyApp.onCreate(MyApp.java: 235)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java: 1013)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java: 4707)
at android.app.ActivityThread. - wrap1(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java: 1405)
at android.os.Handler.dispatchMessage(Handler.java: 102)
at android.os.Looper.loop(Looper.java: 148)
at android.app.ActivityThread.main(ActivityThread.java: 5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java: 726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java: 616)
I tried clean+build, invalidate the cache, manually delete cache + build dirs - no luck.
Reproduced on emulators with Android 4.0.3 - Android P
SysInfo: Android Studio 3.0.1 BuildTools 27.0.3 Android NDK rev16
After digging I found that problem appears in case D8 compiler enabled in gradle.properties:
android.enableD8=true //issue here
android.enableD8.desugaring=true
android.enableR8=true
If set android.enableD8 to false - all fine.
I believe that D8 recompile AndroidDevMetrics classes during build or merge.
Origin source code from lib
package com.frogermcs.androiddevmetrics.aspect;
import com.frogermcs.androiddevmetrics.internal.metrics.InitManager;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.CodeSignature;
import org.aspectj.lang.reflect.ConstructorSignature;
import org.aspectj.lang.reflect.MethodSignature;
import java.util.concurrent.TimeUnit;
@Aspect
public class Dagger2GraphAnalyzer {
private static volatile boolean enabled = false;
public static void setEnabled(boolean enabled) {
Dagger2GraphAnalyzer.enabled = enabled;
}
public static boolean isEnabled() {
return enabled;
}
@Pointcut("within(@dagger.Module *)")
public void withinAnnotatedClass() {
}
@Pointcut("execution(@javax.inject.Inject *.new(..))")
public void injectConstructor() {
}
//Exclude methods from *_MonitoringModule (Dagger 2 producers)
@Pointcut("!execution(* defaultSetOfFactories())")
public void exceprDefaultSetOfFactories() {
}
@Pointcut("!execution(dagger.producers.monitoring.ProductionComponentMonitor *(..))")
public void exceptProductionComponentMonitor() {
}
@Pointcut("execution(@dagger.Provides * *(..)) &&" +
" withinAnnotatedClass() &&" +
" exceptProductionComponentMonitor()" +
" && exceprDefaultSetOfFactories()")
public void providesMethod() {
}
@Around("providesMethod() || injectConstructor()")
public Object logAndExecute(ProceedingJoinPoint joinPoint) throws Throwable {
long start = System.nanoTime();
Object result = joinPoint.proceed();
long stop = System.nanoTime();
long took = TimeUnit.NANOSECONDS.toMillis(stop - start);
if (!enabled) {
return result;
}
CodeSignature codeSignature = (CodeSignature) joinPoint.getSignature();
Class<?> cls = codeSignature.getDeclaringType();
if (codeSignature instanceof ConstructorSignature) {
InitManager.getInstance().addInitMetric(cls, joinPoint.getArgs(), took);
}
if (isMethodWithReturnType(codeSignature)) {
if (result != null) {
InitManager.getInstance().addInitMetric(result.getClass(), joinPoint.getArgs(), took);
}
}
return result;
}
private boolean isMethodWithReturnType(CodeSignature codeSignature) {
return codeSignature instanceof MethodSignature && ((MethodSignature) codeSignature).getReturnType() != void.class;
}
}
Seems like broken source code after D8:
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package com.frogermcs.androiddevmetrics.aspect;
import com.frogermcs.androiddevmetrics.internal.metrics.InitManager;
import java.util.concurrent.TimeUnit;
import org.aspectj.lang.NoAspectBoundException;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.CodeSignature;
import org.aspectj.lang.reflect.ConstructorSignature;
import org.aspectj.lang.reflect.MethodSignature;
@Aspect
public class Dagger2GraphAnalyzer {
private static volatile boolean enabled = false;
public Dagger2GraphAnalyzer() {
}
public static void setEnabled(boolean enabled) {
enabled = enabled;
}
public static boolean isEnabled() {
return enabled;
}
@Pointcut("within(@dagger.Module *)")
public void withinAnnotatedClass() {
}
@Pointcut("execution(@javax.inject.Inject *.new(..))")
public void injectConstructor() {
}
@Pointcut("!execution(* defaultSetOfFactories())")
public void exceprDefaultSetOfFactories() {
}
@Pointcut("!execution(dagger.producers.monitoring.ProductionComponentMonitor *(..))")
public void exceptProductionComponentMonitor() {
}
@Pointcut("execution(@dagger.Provides * *(..)) && withinAnnotatedClass() && exceptProductionComponentMonitor() && exceprDefaultSetOfFactories()")
public void providesMethod() {
}
@Around("providesMethod() || injectConstructor()")
public Object logAndExecute(ProceedingJoinPoint joinPoint) throws Throwable {
long start = System.nanoTime();
Object result = joinPoint.proceed();
long stop = System.nanoTime();
long took = TimeUnit.NANOSECONDS.toMillis(stop - start);
if(!ajc$inlineAccessFieldGet$com_frogermcs_androiddevmetrics_aspect_Dagger2GraphAnalyzer$com_frogermcs_androiddevmetrics_aspect_Dagger2GraphAnalyzer$enabled()) {
return result;
} else {
CodeSignature codeSignature = (CodeSignature)joinPoint.getSignature();
Class cls = codeSignature.getDeclaringType();
if(codeSignature instanceof ConstructorSignature) {
InitManager.getInstance().addInitMetric(cls, joinPoint.getArgs(), took);
}
if(ajc$inlineAccessMethod$com_frogermcs_androiddevmetrics_aspect_Dagger2GraphAnalyzer$com_frogermcs_androiddevmetrics_aspect_Dagger2GraphAnalyzer$isMethodWithReturnType(this, codeSignature) && result != null) {
InitManager.getInstance().addInitMetric(result.getClass(), joinPoint.getArgs(), took);
}
return result;
}
}
private boolean isMethodWithReturnType(CodeSignature codeSignature) {
return codeSignature instanceof MethodSignature && ((MethodSignature)codeSignature).getReturnType() != Void.TYPE;
}
static {
try {
ajc$postClinit();
} catch (Throwable var1) {
ajc$initFailureCause = var1;
}
}
public static Dagger2GraphAnalyzer aspectOf() {
if(ajc$perSingletonInstance == null) {
throw new NoAspectBoundException("com.frogermcs.androiddevmetrics.aspect.Dagger2GraphAnalyzer", ajc$initFailureCause);
} else {
return ajc$perSingletonInstance;
}
}
public static boolean hasAspect() {
return ajc$perSingletonInstance != null;
}
}
I'm also facing the same issue after updating to Android Studio 3.1
Same issue after update to Android Studio 3.1.1
same for me
Face the same error. After adding android.enableD8=false to gradle.properties, everything works again.
java.lang.VerifyError: Verifier rejected class com.frogermcs.androiddevmetrics.aspect.Dagger2GraphAnalyzer: boolean com.frogermcs.androiddevmetrics.aspect.Dagger2GraphAnalyzer.ajc$inlineAccessMethod$com_frogermcs_androiddevmetrics_aspect_Dagger2GraphAnalyzer$com_frogermcs_androiddevmetrics_aspect_Dagger2GraphAnalyzer$isMethodWithReturnType(com.frogermcs.androiddevmetrics.aspect.Dagger2GraphAnalyzer, org.aspectj.lang.reflect.CodeSignature) failed to verify: boolean com.frogermcs.androiddevmetrics.aspect.Dagger2GraphAnalyzer.ajc$inlineAccessMethod$com_frogermcs_androiddevmetrics_aspect_Dagger2GraphAnalyzer$com_frogermcs_androiddevmetrics_aspect_Dagger2GraphAnalyzer$isMethodWithReturnType(com.frogermcs.androiddevmetrics.aspect.Dagger2GraphAnalyzer, org.aspectj.lang.reflect.CodeSignature): [0x0] invoke-super/virtual can't be used on private method boolean com.frogermcs.androiddevmetrics.aspect.Dagger2GraphAnalyzer.isMethodWithReturnType(org.aspectj.lang.reflect.CodeSignature) (declaration of 'com.frogermcs.androiddevmetrics.aspect.Dagger2GraphAnalyzer' appears in /data/app/com.aranoah.healthkart.plus.staging.debug-1/base.apk:classes31.dex) at com.frogermcs.androiddevmetrics.aspect.Dagger2GraphAnalyzer.setEnabled(Dagger2GraphAnalyzer.java:20) at com.frogermcs.androiddevmetrics.AndroidDevMetrics.setupMetrics(AndroidDevMetrics.java:97) at com.frogermcs.androiddevmetrics.AndroidDevMetrics.setAndroidDevMetrics(AndroidDevMetrics.java:69) at com.frogermcs.androiddevmetrics.AndroidDevMetrics.initWith(AndroidDevMetrics.java:59) at com.frogermcs.androiddevmetrics.AndroidDevMetrics.initWith(AndroidDevMetrics.java:52) at com.frogermcs.androiddevmetrics.AndroidDevMetrics.initWith(AndroidDevMetrics.java:48) at com.aranoah.healthkart.plus.BaseApplication.initDevMetrics(BaseApplication.java:66) at com.aranoah.healthkart.plus.BaseApplication.onCreate(BaseApplication.java:59) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1032) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5970) at android.app.ActivityThread.-wrap3(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1710) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6776) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1518) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)