配置完成但拦截不生效
lr784521 opened this issue · comments
classpath 'com.android.tools.build:gradle:7.2.1'
classpath 'io.github.wurensen:gradle-android-plugin-aspectjx:3.2.0'
apply plugin: 'io.github.wurensen.android-aspectjx'
@aspect
public class MainUtil {
//实现全局监听点击事件
// @pointcut("execution(* com.huayun.application.page.splash.SplashActivity.aasee())")
@pointcut("execution(* android.view.View.OnClickListener.onClick(android.view.View))")
public void setOnClick(){
}
@Around("setOnClick()")
public void setOnClickListener(ProceedingJoinPoint point){
LogUtil.xLoge("setOnClickListenersetOnClickListener");
try {
point.proceed();
} catch (Throwable throwable) {
throwable.printStackTrace();
}
}
}
@lr784521 不对啊,你这规则是对android.view.View.OnClickListener.onClick
进行织入啊,这是Android framework的类,是没办法直接修改的啊。
![6847d626540449ffaf60c2bea29e9b8](https://user-images.githubusercontent.com/36124038/194795350-40bb5aa3-9e59-4283-bd81-6e41f988981e.j
pg)
这是我之前写的demo 用的是
classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.10'
api 'org.aspectj:aspectjrt:1.9.7'
老的 是可以拦截的
这是我的联系方式 1243418334@qq.com 我希望把demo分享给你
@lr784521 你到对应module
的build/tmp/transformClassesWithAjxForVariantName
目录下,提供下buildConfigCache.json
,先确定有没有参与织入。
这是文件 我将 .json 改为 txt 方便上传
看了一下,是有参与到织入的,你先看下app\build\intermediates\javac\envDevelopRelease\classes\com\huayun\application\page\splash\SplashActivity.class
这个类反编译的情况,方便的话发出来看看。
建议你再随便创建个类,然后针对这个类的某个函数进行织入,测试下是不是正常,因为我发现你这个activity还用到hilt来生成。
这是刚才普通方式设置点击事件编译出来的代码,我项目使用了Hilt 和 阿里 Route
SplashActivity.zip
这是编码后源码。
另外我觉得应该是生效了,原因如下:
当我使用butterknife给控件设置点击事件后,这时候触发点击事件后会崩溃,而用系统原生的ivStart.setOnClickListener设置点击事件 确实没有拦截到,并且不会崩溃。
资料如下:
![b2cd532081a3ad10bd20fa4d1932919](https://user-images.githu
busercontent.com/36124038/194820147-64d7a9ea-6993-4b7d-b5f6-a0ca76e4acce.jpg)
SplashActivity.zip
这是使用butterknife设置点击事件后 的编译源码
这是 使用butterknife设置点击事件,触发事件后崩溃的错误信息
Process: com.huayun.planet.release, PID: 12348
java.lang.NoSuchMethodError: No static method aspectOf()Lcom/huayun/application/util/MainUtil; in class Lcom/huayun/application/util/MainUtil; or its super classes (declaration of 'com.huayun.application.util.MainUtil' appears in /data/app/com.huayun.planet.release-FnVQ5LFzkz0fFQ4G6SwVzQ==/base.apk)
at butterknife.internal.DebouncingOnClickListener.onClick(DebouncingOnClickListener.java:15)
at android.view.View.performClick(View.java:7257)
at android.view.View.performClickInternal(View.java:7213)
at android.view.View.access$3800(View.java:828)
at android.view.View$PerformClick.run(View.java:27921)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7830)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1040)
你要清楚这个工具是针对字节码进行修改,所以你的规则也是要匹配上对应的字节码的。
你如果担心织入规则错误,可以用我这个项目的demo来测试,如果我这个有效,证明织入规则是没问题的。
嗯 我试着跑你的源码 没有跑起来,但是 我是复制之前 那个老版本的Aspect 规则确实是没问题,我老版本demo也可以正常运行,然后 现在这个项目主要是用的gradle版本高,老的已经没法用了,所以现在使用了您提供的,配置是按照说明来的,就是现在普通方法拦截 没有生效 ,然后我看规则写的也没有问题,所以我怕是我配置的问题 或者其他方面的疏忽 所以想请您帮忙看下,为什么现在普通方法 没有拦截到
AspectJ.zip
这是我之前用老版本写的demo
嗯 我试着跑你的源码 没有跑起来,但是 我是复制之前 那个老版本的Aspect 规则确实是没问题,我老版本demo也可以正常运行,然后 现在这个项目主要是用的gradle版本高,老的已经没法用了,所以现在使用了您提供的,配置是按照说明来的,就是现在普通方法拦截 没有生效 ,然后我看规则写的也没有问题,所以我怕是我配置的问题 或者其他方面的疏忽 所以想请您帮忙看下,为什么现在普通方法 没有拦截到
我这个项目没有跑起来?发生什么错误了?你先用我的demo来验证你的规则,这样可以先确定织入规则有没有问题。
直接注释掉上传模块的代码就行了
@lr784521 这是我要上传的仓库相关的用户名密码等,你看提示缺少什么key,就自己配置到gradle.properties里面就行,值随便给
兄弟,可以麻烦看下我提的那个问题不
可以了 注释掉 仓库就行 我试了下 你的demo 是正常可以,我再试下我自己编写规则
另外 大佬 方便建个 讨论群吗?