-
Notifications
You must be signed in to change notification settings - Fork 51
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
AOP 多注解出现失效或发生异常(EmptyStackException) #60
Comments
@880634 我先复现看看 |
@880634 我反编译看了,当前版本的aspectj设计上,不支持异步调用。可以看下相关问题:eclipse-aspectj/aspectj#128 |
@wurensen 大大,但是我如果删除 Log AOP 注解就没有问题了,但是一加上就不行了,好像是不能同时存在有两个不同的 AOP 注解,一个同步,一个异步的那种。 |
大大,你这边能复现么?如果不行的话我这边可以发一份我的工程给你 |
@880634 能复现。上面说的异步不够准确,有延期调用也不行。比如先中断,申请权限,等到有结果后,再恢复调用。因为它动态修改的代码会封装成闭包、退栈,延期调用就会出现这个异常。 |
旧版本可以,估计是因为你用的 |
这个问题估计要自己取巧来解决,避免同一个切入点多个注解进行织入处理。 |
@wurensen 大大,这个好像跟 |
@880634 我上面解释得很清楚了,它目前的机制设计上就不支持这种“延期调用”,我说的 |
@wurensen 大大,你说的不支持延期调用,但是我如果只写 |
@880634 我们讨论的前提是多注解啊,你只有一个注解的时候是没有问题的。所以我才建议你写包装函数,各一个注解,然后切入实现代码那边就不用改了。 |
@wurensen 大大,我不想多写几个重载函数,我更想要是直接当个小白用户,直接用就可以了,不需要考虑那么多,大大你有研究过有什么兼容这个问题的方案吗? |
大大,我这个需求也不奇葩,并且合情合理,权限请求肯定是异步了,还有多加一个日志打印,这么简单需求难道还要开发者做兼容么?总感觉这样的处理方式不太好,我用 AOP 的初心有两个:1. 代码简洁美观;2. 减少重复代码,但是这个问题又得让我回归最原始的写法。 |
@880634 问题不是我不解决,而是这个插件只是对aspectj的使用包装,这个问题是aspectj生成代码的设计机制就是这样。 |
请提供构建环境相关信息:
当前使用的插件版本:3.3.1
AGP(Android Gradle Plugin)版本:7.1.0
Gradle版本:7.2-all.zip
发送构建错误时,请先确定是构建错误还是aspectj织入错误:
module
下的build/tmp/transformClassesWithAjxForXXX/logs
目录下产生ajcore
为前缀的日志文件,请提供该日志文件以便查找问题The text was updated successfully, but these errors were encountered: