编译插桩

编译插桩就是在代码编译期间修改已有的代码或者生成新代码

为什么说是编译插桩呢?其实它是一个动作和一个修饰,编译: 代码在编译期间,插桩: 在编译时期将需要的动作或者是逻辑插入已经编译的class文件中。

任何不能促使自己提高生产力的技术都没有学习的意义,那怎么将这个技术使用到Android开发中呢?

首先,在Android中,编译的过程为.java -> .class -> .dex,既然能在.class 文件中插入我们想要的逻辑,是否可以在转换为.dex之前实现想要的功能呢?

一、来一个疑问?

统计每个Activity打开的次数,用于数据统计,要求是不能只统计自己写的Activity,第三方的Activity也需要统计,哦,怎么搞,按照我们惯有的思维,应该是在每个Activity中的onCreate\onDestory中添加上报的代码,那第三方的Activity不能修改,该怎么去做统计呢?

1.1 可以在启动的地方统计

针对上述的问题,在启动的地方是能统计的,但是,抛开关闭不好统计的影响之外,在第三方的Activity 中启动的Activity怎么统计?

1.2 使用插桩技术

这个单独做记录,

二、 应用场景

对于Android开发者来讲,我们不再只需要记住编译插桩需要怎么做,和能怎么做就可以了,这项技术就可以在我们日常开发中添砖加瓦了

2.1 场景及步骤

场景:

  • 日志埋点;
  • 性能监控;
  • 动态权限控制;
  • 业务逻辑跳转时,校验是否已经登录;
  • 其他
    使用
  • 首先理解自己的业务场景,是否需要此项技术,此项技术是否带来大工作量而带来少量的效益
  • 创建自己定义的gradle文件,这项技术就是在groovy 实现的,需要gradle
  • 自定义Transform,在transform方法中实现自己的逻辑

2.2 怎么插到Activity,也就是Android中

  • ASM

ASM是生成和转换已编译的Java类工具,就是我们插桩需要使用的工具。

具体操作在Demo中体现

发布了53 篇原创文章 · 获赞 20 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_32648731/article/details/105712511