Android 2分钟实现全埋点 Aspect A

作者: 鹏城十八少 | 来源:发表于2021-03-15 11:16 被阅读0次

    笔者是面霸,面试200+场       当过考官:面过别人300+场     去过500强,也呆过初创公司。

    关注我就能达到大师级水平,这话我终于敢说了, 年薪60万不是梦!

    斩获腾讯、华为、oppo,VIVO,安卓岗offer!我有一套速通大厂技巧分享给你!

    AOP介绍

    Aspect Oriented Programming , 面向切面编程,优点如下。

    (1)针对同一类问题的统一处理

    (2)无侵入添加代码

      (3) 运行在,,,,,,,但是注解在编译期间

    1)在项目gradle中添加依赖

    classpath'com.android.tools.build:gradle:3.6.2'

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

    2) 在app gradle中添加配置

    applyplugin:'android-aspectjx'

    aspectjx{

        //排除所有package路径中包含`android.support`的class文件及库(jar文件)

        exclude'android.support'

    }

    3).类注解,方法注解,正则表达式。不要写错正则表达式

    @Aspect

    public class PerformanceAop {

    @Around("call(* com.test.WorkManger.**(..))")

    public void getTime(ProceedingJoinPoint joinPoint) {

    Signature signature = joinPoint.getSignature();

            String name = signature.toShortString();

            long time = System.currentTimeMillis();

            try {

    joinPoint.proceed();

            }catch (Throwable throwable) {

    throwable.printStackTrace();

            }

    Log.i("PerformanceAop", name +" cost " + (System.currentTimeMillis() - time));

        }

    }

    public class WorkManger {

    public void start(){

    try {

    Thread.sleep(2000);

            }catch (InterruptedException e) {

    e.printStackTrace();

            }

    }

    }

    2021-03-14 16:12:27.604 18965-18965/com.test I/PerformanceAop: WorkManger.start() cost 2000

    2021-03-14 16:12:29.618 18965-18965/com.test I/PerformanceAop: WorkManger.start() cost 2003

    2021-03-14 16:12:31.630 18965-18965/com.test I/PerformanceAop: WorkManger.start() cost 2001

    2021-03-14 16:12:33.633 18965-18965/com.test I/PerformanceAop: WorkManger.start() cost 2002

    2021-03-14 16:12:35.637 18965-18965/com.test I/PerformanceAop: WorkManger.start() cost 2001

    2021-03-14 16:12:37.643 18965-18965/com.test I/PerformanceAop: WorkManger.start() cost 2002

    2021-03-14 16:12:39.647 18965-18965/com.test I/PerformanceAop: WorkManger.start() cost 2001

    2021-03-14 16:12:41.651 18965-18965/com.test I/PerformanceAop: WorkManger.start() cost 2001

    2021-03-14 16:12:43.665 18965-18965/com.test I/PerformanceAop: WorkManger.start() cost 2002

    2021-03-14 16:12:45.669 18965-18965/com.test I/PerformanceAop: WorkManger.start() cost 2001

    现在实行:某个类里面的方法耗时都可以抓到。如何把app里面的所有都抓到?

    通过正则表达式。

    列子二:在方法前增加一些

    @Aspect

    public class AspectjxMine {

    @Pointcut("execution(* com.test.MainActivity.clickMe(..))")

    public void callMethod() {

    }

    @Around("callMethod()")//

        public void beforeMethodCall(ProceedingJoinPoint joinPoint) {

    try {

    Log.i("AspectjxMine", "callMethod before  ");

                joinPoint.proceed();

                Log.i("AspectjxMine", "callMethod after  ");

            }catch (Throwable throwable) {

    throwable.printStackTrace();

            }

    }

    }

    demo地址;

    demo地址;https://github.com/pengcaihua123456/shennandadao/tree/master/AspectJx

    总结:

    1.配置可能会有问题

    2.加入,打点写错了,编译都编译不过去的。

    3.总是要删除.gradle文件缓存

    集成的时候总是报各种错误。mmd

    我的Android Studio 版本 3.6.2,如果代码不生效很有可能是Android Studio版本和aspectjx版本不兼容的问题

    理解:提取公共的方法。

    优点:解耦

    举例:

    实际生活中的例子:

    优点:

    (1)代码无侵入性,

    (2)方便修改;

    有demo

    https://blog.csdn.net/LosingCarryJie/article/details/106195627

    耗时打印:(有问题)

    https://zhuanlan.zhihu.com/p/102627869

    https://blog.csdn.net/BunnyCoffer/article/details/108102916

    无痕埋点:

    登入理解:

    https://www.cnblogs.com/ganchuanpu/p/8594877.html

    https://www.jianshu.com/p/e737c187e0c2

    AOP得应用

    1.耗时

    2.埋点

    3.登入

    4.权限,方便的Android M动态权限配置框架

    相关文章

      网友评论

        本文标题:Android 2分钟实现全埋点 Aspect A

        本文链接:https://www.haomeiwen.com/subject/xmfkcltx.html