先给出Demo:GithubDemo当我点击这个 hello World:

文章插图
弹出一个 Toast,并且:在日志中可以看到

文章插图
同时我并没有改动 setOnClickListener的代码,我只是在它的后面,加了一行 HookSetOnClickListenerHelper.hook(this,v);
- v.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Toast.makeText(MainActivity.this, "别点啦,再点我咬你了...", Toast.LENGTH_SHORT).show();
- }
- });
- HookSetOnClickListenerHelper.hook(this, v);//这个hook的作用,是 用我们自己创建的点击事件代理对象,替换掉之前的点击事件 。
ok,目的达成 v.setOnClickListener已经被 hook.
前方有坑,高能提示:我曾经尝试,是不是可以将上面两段代码换个顺序.结果证明,换了之后,hook就不管用了,原因是,hook方法的作用,是将v已有的点击事件,替换成我们代理的点击事件 。所以,在v还没有点击事件的时候进行hook,是没用的结语
Hook的水很深,这个只是一个入门级的案例,我写这个,目的是说明hook技术的套路,不管我们要hook源码的哪一段逻辑,都逃不过 hook通用思路 这“三板斧”,套路掌握了,就有能力学习更难的Hook技术.Hook的学习,需要我们大量地阅读源码,要对SDK有较为深入的了解,再也不是浮于表面,只会对SDK的api进行调用,而是真正地干涉“造物主谷歌”的既定规则. 学习难度很大,但是收益也不小,高级开发和初中级开发的薪资差距巨大,职场竞争力也不可同日而语.
你的赞和关注是我继续创作的动力~
【android程序员hook技术之入门篇】
推荐阅读
- 程序员:Comparable接口和Comparator接口的比较
- 在Android Studio中创建并引用aar
- 程序员怎样锻炼编程思维
- iOS和Android OS的内存管理机制,这才是流畅的根本原因
- 给Android开发者的几点启发性建议
- 找出Android卡顿的元凶——渲染性能优化
- android6.0系统Healthd深入分析
- Linux文件操作高频使用命令,作为程序员的你看看
- hook php中钩子的原理与简单应用
- win10下搭建flutter android应用开发环境
