Android Hook技术

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

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


image.png
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));

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容