Android Hook技術(shù)

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

采用反射的技術(shù),獲取到能Hook住的點,將Hook主的代碼的實現(xiàn)替換成自己的實現(xiàn)。例如在
ManagLog類中有一個bOpenSaveLogToFile的靜態(tài)參數(shù)負責控制打印的日志是否存到本地,反復(fù)的將日志保存到本地會有頻繁的讀寫導(dǎo)致內(nèi)存溢出。這是一個第三方Jar包中的方法,想要修改這個參數(shù)只能通過反射的方式替換該參數(shù)的值


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參數(shù)的值
                openSaveLogToFile.set(manageLog, false);
                //禁止LogUtils的讀寫
                Class clazzLog = Class.forName("com.butel.connectevent.utils.LogUtil");
                Object logUtilObj = clazz.newInstance();
                //拿到LogUtil的FileService參數(shù)
                Field logField = clazzLog.getDeclaredField("fileService");
                //修改私有屬性先設(shè)置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));

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容