本人能力有限,如若发现描述不当之处,欢迎留言批评指正。
学到老活到老,路漫漫其修远兮。与众君共勉 !
引子
我之前的一键换肤技术文章里面提到了hook技术的概念,有读者反馈说看不太懂, 看来,还是没有说"人话",其实可以描述地再接地气一点,于是再写一片专文吧。
本文只做入门级引子,旨在让不了解 Hook的人通过本文,能认识到 hook
有什么用
,怎么用
,怎么学
,能达到这个目的,我就满足了.
正文大纲
1. hook的定义
2. 实用价值
3. 前置技能
4. hook通用思路
5. 案例实战
6. 效果展示
正文
1. hook的定义
hook,钩子。勾住系统的程序逻辑。
在某段SDK源码逻辑
执行的过程中,通过代码手段拦截
执行该逻辑,加入自己
的代码逻辑。
2. 实用价值
hook是中级开发通往高级开发的必经之路。
如果把谷歌比喻成 安卓的造物主,那么安卓SDK源码里面就包含了万事万物的本源。
中级开发者,只在利用万事万物,浮于表层,而高级开发者能从本源上去改变万事万物,深入核心。
最有用的实用价值:
hook是安卓面向切面(AOP)编程的基础,可以让我们在不变更原有业务的前提
下,插入额外的逻辑
.
这样,既保护了原有业务的完整性,又能让额外的代码逻辑不与原有业务产生耦合.
(想象一下,让你在一个成熟的app上面给每一个
按钮添加埋点接口,不说一万个,就说成百上千个
控件让你埋点,让你写一千次
埋点调用,你是不是要崩溃,hook
可以轻松实现)
学好了hook,就有希望成为高级工程师,
完成初中级无法完成的开发任务,
升职,加薪,出任CEO,迎娶白富美,走上人生巅峰,够不够实用?
3. 前置技能
- java反射 熟练掌握类
Class,方法Method,成员Field
的使用方法
源码内部,很多类和方法都是@hide
的,外部直接无法访问,所以只能通过反射,去创建源码中的类,方法,或者成员.
- 阅读安卓源码的能力
hook
的切入点都在源码内部,不能阅读源码,不能理清源码逻辑,则不用谈hook
.
其实使用androidStudio
来阅读源码有个坑,,有时候会看到