问题汇总-Aspectjx

最近研究了一下埋点技术 使用的是Aspectjx 框架

github:https://github.com/HujiangTechnology/gradle_plugin_android_aspectjx/

 

使用的过程中还是遇到了几个问题还是比较麻烦的,在这里mark一下

具体的使用文章可参考:https://blog.csdn.net/eclipsexys/article/details/54425414 虽然文章中的图片有些丢了,但是还是讲解方法还是比较详细的

 

环境

as3.2.1 gradle 4.6

 

问题一

编译报错:

Could not find matching constructor for: org.gradle.util.Clock()

 

解决办法

https://github.com/HujiangTechnology/gradle_plugin_android_aspectjx/issues/79

将主build中的版本升到2.0.0

classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.0'

 

implementation 'org.aspectj:aspectjrt:1.8.9'

请注意本地环境与版本库的差别,如果是其他as或者gradle的版本出现了编译出错,可以去github issues上面寻找答案

 

问题二

hook不到内容

原因

只能hook apk中dex里面的代码,具体可以通过反编译工具反编译apk,查看可hook的类,例如我尝试hook android.app.Activity 里面的方法失败了,后面我就去hook android.support.v7.app.AppCompatActivity 下面的代码

uploading.4e448015.gif正在上传…重新上传取消问题汇总-Aspectjx_第1张图片

 

问题三

使用后 Run app 失败

解决方法

可能是hook那里除了问题,需要注释Aspectjx的内容,然后clean整个项目,再次运行项目就会成功了

 

问题四

使用@Around注解,hook带返参的方法失败(编译可通过,无数出结果)

解决方法

需要返回一个obj,代码如下

 @Around()
 public Object calHttpCostTime(ProceedingJoinPoint joinPoint) {
        long startTime = System.currentTimeMillis();
        String key = joinPoint.getSignature().toString();
        Object result = null;
        try {
//            Object target = joinPoint.getTarget().getClass();
//            Logger.i(TAG, "调用者+" + target);
            //通过joinPoint.getArgs()获取Args参数
            for (Object obj : joinPoint.getArgs()) {
                Logger.i(TAG, "2.传参:----" + obj);
            }
            result = joinPoint.proceed();
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
        long costTime = System.currentTimeMillis() - startTime;
        Logger.i(TAG, "Method name " + key + " total cost time " + costTime);
        return result;
    }

 

最后,善用github的issues功能。

你可能感兴趣的:(开发问题)