Android Hook技术

https://github.com/tiann/understand-plugin-framework

采用反射的技术,获取到能Hook住的点,将Hook主的代码的实现替换成自己的实现。例如在
ManagLog类中有一个bOpenSaveLogToFile的静态参数负责控制打印的日志是否存到本地,反复的将日志保存到本地会有频繁的读写导致内存溢出。这是一个第三方Jar包中的方法,想要修改这个参数只能通过反射的方式替换该参数的值


Android Hook技术_第1张图片
image.png
Android Hook技术_第2张图片
image.png
               //禁止ManageLog的读写
                Class clazz = Class.forName("com.butel.connectevent.base.ManageLog");
                Object manageLog = clazz.newInstance();
                Field openSaveLogToFile = clazz.getDeclaredField("bOpenSaveLogToFile");
                openSaveLogToFile.setAccessible(true);
               //替换ManageLog对象的bOpenSaveLogToFile参数的值
                openSaveLogToFile.set(manageLog, false);
                //禁止LogUtils的读写
                Class clazzLog = Class.forName("com.butel.connectevent.utils.LogUtil");
                Object logUtilObj = clazz.newInstance();
                //拿到LogUtil的FileService参数
                Field logField = clazzLog.getDeclaredField("fileService");
                //修改私有属性先设置accessible
                logField.setAccessible(true);
                //获取原声的FileService方法
                Object nativeFileService = logField.get(null);
                //替换成我们代理的方法
                FileService proxyFileService = new ProxyHYFileService((FileService) nativeFileService);
                logField.set(logUtilObj, proxyFileService);
                Log.d("Proxy", "proxy type : " + logField.get(logUtilObj));

你可能感兴趣的:(Android Hook技术)