wurensen / gradle_plugin_android_aspectjx

A Android gradle plugin that effects AspectJ on Android project and can hook methods in Kotlin, aar and jar file.
Apache License 2.0
363 stars 50 forks source link

gms报错 #62

Closed peter100u closed 1 year ago

peter100u commented 1 year ago

请提供构建环境相关信息:

peter100u commented 1 year ago

---- AspectJ Properties --- AspectJ Compiler 1.9.7 built on Thursday Jun 24, 2021 at 16:14:45 PDT ---- Dump Properties --- Dump file: ajcore.20221220.170851.637.txt Dump reason: java.lang.IllegalStateException Dump on exception: true Dump at exit condition: abort ---- Exception Information --- java.lang.IllegalStateException: Expecting .,<, or ;, but found authapi while unpacking <R::Lcom/google/android/gms/common/api/Result;>Lcom/google/android/gms/common/api/internal/BaseImplementation$ApiMethodImpl<TR;Lcom/google/android/gms/internal/auth-api/zzq;>; at org.aspectj.util.GenericSignatureParser.parseClassTypeSignature(GenericSignatureParser.java:204) at org.aspectj.util.GenericSignatureParser.parseFieldTypeSignature(GenericSignatureParser.java:155) at org.aspectj.util.GenericSignatureParser.parseTypeArgument(GenericSignatureParser.java:267) at org.aspectj.util.GenericSignatureParser.maybeParseTypeArguments(GenericSignatureParser.java:275) at org.aspectj.util.GenericSignatureParser.parseClassTypeSignature(GenericSignatureParser.java:196) at org.aspectj.util.GenericSignatureParser.parseAsClassSignature(GenericSignatureParser.java:56) at org.aspectj.weaver.UnresolvedType.forGenericTypeSignature(UnresolvedType.java:275) at org.aspectj.weaver.bcel.BcelWorld.addSourceObjectType(BcelWorld.java:479) at org.aspectj.weaver.bcel.BcelWorld.addSourceObjectType(BcelWorld.java:453) at org.aspectj.weaver.bcel.BcelWeaver.addClassFile(BcelWeaver.java:455) at org.aspectj.weaver.bcel.BcelWeaver.addJarFile(BcelWeaver.java:402) at org.aspectj.ajdt.internal.core.builder.AjBuildManager.initBcelWorld(AjBuildManager.java:890) at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performBuild(AjBuildManager.java:252) at org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild(AjBuildManager.java:188) at org.aspectj.ajdt.ajc.AjdtCommand.doCommand(AjdtCommand.java:103) at org.aspectj.ajdt.ajc.AjdtCommand.runCommand(AjdtCommand.java:47) at org.aspectj.tools.ajc.Main.run(Main.java:372) at com.hujiang.gradle.plugin.android.aspectjx.internal.procedure.AJXTask.call(AJXTask.kt:145) at com.hujiang.gradle.plugin.android.aspectjx.internal.procedure.DoAspectProcedure.runAJXTask(DoAspectProcedure.kt:255) at com.hujiang.gradle.plugin.android.aspectjx.internal.procedure.DoAspectProcedure.processJarInput(DoAspectProcedure.kt:187) at com.hujiang.gradle.plugin.android.aspectjx.internal.procedure.DoAspectProcedure.access$processJarInput(DoAspectProcedure.kt:12) at com.hujiang.gradle.plugin.android.aspectjx.internal.procedure.DoAspectProcedure$process$1$2$1.invoke(DoAspectProcedure.kt:49) at com.hujiang.gradle.plugin.android.aspectjx.internal.procedure.DoAspectProcedure$process$1$2$1.invoke(DoAspectProcedure.kt:38) at com.hujiang.gradle.plugin.android.aspectjx.internal.concurrent.BatchTaskScheduler$schedule$1.call(BatchTaskScheduler.kt:36) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:829) ---- System Properties ---

wurensen commented 1 year ago

@peter100u 把出问题的库exclude掉就可以了。因为gms有些包名类名带了特殊符号。

peter100u commented 1 year ago

感谢,回复的真及时,我试试 aspectjx { exclude 'com.google.android.gms' }

peter100u commented 1 year ago

可以了,想问下,大佬,如何通过aspectjx在某个三方库方法中插入try catch,不让他crash呢

wurensen commented 1 year ago

可以了,想问下,大佬,如何通过aspectjx在某个三方库方法中插入try catch,不让他crash呢

进行around-advice,然后try-catch就行了,你看下@Around的使用。

peter100u commented 1 year ago

感谢,我去看看

peter100u commented 1 year ago

这样就可以了,感谢

@Aspect public class InsertTryErrorScrollEventAdapter {

@Pointcut("execution(* androidx.viewpager2.widget.ScrollEventAdapter.updateScrollEventValues(..))")
public void updateScrollEventValues() {

}

@Around(value = "updateScrollEventValues()")
public Object aroundUpdateScrollEventValues(ProceedingJoinPoint pjp) throws Throwable {
    Object obj = new Object();
    try {
        obj = pjp.proceed();
    } catch (IllegalStateException e) {

    } catch (Exception e) {
    }
    return obj;
}

}