Android一步步实现无痕埋点(1)-------万恶之源

0.前言

有一段时间高强度刷贴,然后看到了wanandroid里面有一位做基础架构的大佬—>虾哥.
进入详情页面一看,看到了一个叫无痕埋点插桩的这么一个神奇的东西。之后去了解一下,发现其实就是实现AOP的一个技术方案,又觉得非常的有用,而且在很多地方都提及到了这么一个技术。我就开始想方设法的开始进行学习.
进入虾哥的Demo,没有注释,没有说明.零基础的我.直接麻掉了.

Demo
https://github.com/qazxcs113/AndroidAutoTrack

在这里插入图片描述
demo实现很多神奇的功能,并且在很多地方上解耦解的非常的棒.十分值得学习。这里进行对此demo的学习记录以及可以从中学习到的东西。

1.学习总指南

你可以在这系列文章中学习到什么?

(1).如何完整的实现一个无痕埋点的demo–>setonclick添加一个Log
(2).如何使用Plugin----->无痕的关键
(3).transform是什么东西?以及替代它的AsmClassVisitorFactory
(4).ASM框架—>一个修改字节码的框架,字节码的简单知识
(5).AutoService—>动态组合多个plugin
> (6).Love And Peace

这其中涉及到的知识点及其的多,并且都十分分散,这里希望对这个技术能有一个好的入门认知,之后再继续扩展自己的知识。

2.学习无痕埋点第一步–>了解作用

另一个学习篇章
https://www.jianshu.com/p/c202853059b4#5.2

首先进来我们先进行农民三连问:
无痕埋点有啥用?为什么要用它?怎么实现的?
我们一步步来解答:

有啥用
简单来讲,就是可以解决一个切面的问题.而不是我们传统面对对象的思想.
例如:我们要将所有的Button都添加一个输出"顶你个肺".
我们要如何解决?
"vegetable dog say":在所有的onclick方法里面加上不就好了嘛
“好了,你明天不用来了~”
一个项目,假如有100个onclick,那你就得去100个地方修改,如果明天需求改变,只需要在某个package下去添加输出,那又在手动修改吗?.这十分的不合理.
所有,我们的无痕埋点插桩就是解决这方面的问题:
对项目内的某一个方面的问题进行修改

为什么要用它
别问,问就是好用。当然这里有很多种解决方法,但是我这里只介绍ASM的方法.
因为它的灵活性和性能都会比JavaAssist 或 AspectJ好一些。
另外为什么是无痕,这样使得开发人员对我们代码的植入是没有任何感知的。
如果另一个有痕埋点则是对某些关键方法进行Hook.在运行时进行代码植入。这样会对代码有侵入.
所以综合上述,使用的就是这么一个方法…

怎么实现的
到这里,我们需要了解我们Android的打包流程是怎么样的。来上图~~
在这里插入图片描述
不用看太多,只需要了解我们从Android程序到APK执行apk.中间至少经过两个步骤:

(1)javac:将源文件编译成.class格式文件
(2)dex:将class文件汇总成dex格式.
那我们对其中的修改是在javac之后,dex之前对.class文件进行字节码进行扫描,并且按照一定的规则进行过滤和修改,那么修改过的字节码会在后续的dex打包环节到apk中.

So,我们重要的两个步骤在于这里:
(1).字节码扫描,并过滤出我们需要修改的class文件
(2).对过滤出的class文件进行字节码的修改.

3总结

看到这里,应该已经知道任务是什么了吧。也对无痕插桩埋点应该也有些概念了,看到这里应该可以去吃点什么东西了.然后我们再进行下一步的学习~

Android一步步实现无痕埋点(2)-------开始折磨
https://blog.csdn.net/qq_33902817/article/details/122412709

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值