专栏名称: 复利大王
分享和推送Java/Android方向的技术和文章,让你成为这方面的大牛,让你每天都成长一点。同时,我们也会邀请BAT的大牛分享原创!
目录
相关文章推荐
复利大王  ·  娇妻版毛晓彤 ·  15 小时前  
复利大王  ·  某一线女网红下海? ·  昨天  
复利大王  ·  好牛的幼儿园 ·  2 天前  
复利大王  ·  老同学中捞一捞能不能找到免费P友 ·  2 天前  
复利大王  ·  不讲武德!中x银行? ·  2 天前  
51好读  ›  专栏  ›  复利大王

论读Android源码的重要性——Hook技术之View点击劫持

复利大王  · 公众号  · android  · 2017-03-19 09:15

正文

请到「今天看啥」查看全文


void onNoDoubleClick ( View v ) { //something }});

可是面临一个问题,有这么多,改到何年马月啊?

OK,这个是我以前碰到的一个好蛋疼的问题,再比如,在不侵入业务代码的情况下监听所有的点击事件并记录所有的点击数,用于统计热点页面和其他一些分析工作,你怎么办呢?现在介绍一个如何Hook掉View的onClick方法,相对与上一篇,这个很简单了。

1、第一步寻找Hook点:

去看setOnClickListener里面做了什么?

btn.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {        
         }
  });
/**
 * Register a callback to be invoked when this view is clicked. If this view is not
 * clickable, it becomes clickable.
 *
 * @param l The callback that will run
 *
 * @see #setClickable(boolean)
 */public void setOnClickListener(@Nullable OnClickListener l) {
    if (!isClickable()) {
        setClickable(true);
    }
    getListenerInfo().mOnClickListener = l;
}
ListenerInfo getListenerInfo() {
    if (mListenerInfo != null) {
        return mListenerInfo;
    }
    mListenerInfo = new ListenerInfo();
    return mListenerInfo;
}

2、开始HOOK

看完了上面,就能猜到我们设置的Listener最终是被赋值给ListenerInfo的mOnClickListener成员了,ListenerInfo的实例可以说是信息的载体,那么很简单,只要把mOnClickListener替换掉,在ListenerInfo中还有mOnLongClickListener,mOnFocusChangeListener两个成员,分别对应了长按事件与焦点变化事件,所以处理长按事件与焦点变化事件与此类似。

public class HookViewClickUtil {public static






请到「今天看啥」查看全文


推荐文章
复利大王  ·  娇妻版毛晓彤
15 小时前
复利大王  ·  某一线女网红下海?
昨天
复利大王  ·  好牛的幼儿园
2 天前
复利大王  ·  老同学中捞一捞能不能找到免费P友
2 天前
复利大王  ·  不讲武德!中x银行?
2 天前
注册风险管理师  ·  风险管理:思想比理论更重要
8 年前
猎奇漫画I  ·  人家等不及了,快
7 年前