Android使用 Java 反射實現 API Hook
文章內容來自https://www.jianshu.com/p/4f6d20076922
部落格主要起到學習和記錄的作用
直接貼程式碼了
使用private void hookOnClickListener(View view) { try { // 得到 View 的 ListenerInfo 物件 //得到getListenerInfo方法 Method getListenerInfo = View.class.getDeclaredMethod("getListenerInfo"); getListenerInfo.setAccessible(true); //得到ListenerInfo變數 Object listenerInfo = getListenerInfo.invoke(view); // 得到 原始的 OnClickListener 物件 //獲取指定類 Class<?> listenerInfoClz = Class.forName("android.view.View$ListenerInfo"); //獲取類中的變數 Field mOnClickListener = listenerInfoClz.getDeclaredField("mOnClickListener"); mOnClickListener.setAccessible(true); View.OnClickListener originOnClickListener = (View.OnClickListener) mOnClickListener.get(listenerInfo); // 用自定義的 OnClickListener 替換原始的 OnClickListener View.OnClickListener hookedOnClickListener = new HookedOnClickListener(originOnClickListener); mOnClickListener.set(listenerInfo, hookedOnClickListener); } catch (Exception e) { KLog.w("hook clickListener failed!", e); } } class HookedOnClickListener implements View.OnClickListener { private View.OnClickListener origin; HookedOnClickListener(View.OnClickListener origin) { this.origin = origin; } @Override public void onClick(View v) { Toast.makeText(FeedbackActivity.this, "hook click", Toast.LENGTH_SHORT).show(); KLog.i("Before click, do what you want to to."); if (origin != null) { origin.onClick(v); } KLog.i("After click, do what you want to to."); } }
mTvQQ.setOnClickListener(this);
hookOnClickListener(mTvQQ);
相關推薦
Android使用 Java 反射實現 API Hook
文章內容來自https://www.jianshu.com/p/4f6d20076922 部落格主要起到學習和記錄的作用 直接貼程式碼了 private void hookOnClickListener(View view) { try {
android java層實現hook替換method
reflect 過程 ren pic [] hotfix mru andro bsp Android上的熱修復框架 AndFix 大家都很熟悉了,它的原理實際上很簡單: 方法替換——Java層的每一個方法在虛擬機實現裏面都對應著一個ArtMethod的結構體,只要把
反射+代理實現 API Hook(以 ActivityManager 為例)
最近看Android招聘資訊,發現一個自己不太會的點 hook 機制,查了一下資料,現在整理一下。特別感謝acxingyun同學提供了詳細的姿勢。點選地址 什麼是 Hook hook 翻譯過來是鉤子的意思。 目的就是在事件傳送到終點前截獲並監控事件的傳輸
java反射實現前端接收實體對象,去除“null”字符串
學習工具總結從前臺輸入的的json 格式數據。轉換成對應的實體類後。 可能會出現把null 轉換成“null”字符串。這樣的數據在存入數據庫是可能會因為數據格式,存入時會有問題。實體字段多,修改有很麻煩。所以需要統一編輯處理下。 實體類package com.tansun.ider.model.vo; pub
Java反射常用API匯總
所有 void 通過 IE get eth AD const tor “JAVA反射機制是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意方法和屬性” 一、類對象的獲取 1.通過對象獲取 Object obj = n
java反射實現例子
/** * getCntrFromEdi * @param ediFileBean * @param iMainkey * @param cntrno * @return */ public Object getCntrFromEdi(EdiFileBean
java反射實現物件轉JSON(貼上可用)
package test; import java.text.SimpleDateFormat; import java.util.Collection; import java.util.Date; import java.util.Iterator; import
通過java反射實現的excel資料匯出
Excel.java @SuppressWarnings("deprecation") public static <T> void ExportExcel(String title, String[] headers,Collection<T
利用java反射實現兩個具有相同屬性bean賦值
import java.lang.reflect.Field; import java.lang.reflect.Method; public class ClassReflection { /** * @param class1 用於賦值的實體類
java JavaBean(實體類)轉化為map (利用Java反射實現)
/** * 獲取利用反射獲取類裡面的值和名稱轉化為map * * @param obj //JavaBean * @return map * @throws IllegalAccessException
通過自定義註解和java反射實現Spring-DI依賴注入
依賴注入的原理就是簡單說就是從頭往下遞迴生成依賴物件的,然後對引用欄位賦值最後返回。 這裡實現通過變數型別來生成相應的物件。 模擬一個使用者的註冊業務,首先是controller層呼叫service層,然後呼叫dao層程式碼實現儲存使用者。 檔案結構: UserC
Java反射實現介面
轉自: http://blog.csdn.net/lastwarmth/article/details/49466899 之前做過一個外掛,綜合了移動MM,移動和遊戲,沃商店等一些計費SDK。將這些計費SDK提供的介面全部整合,最後由外掛提供一套介面。通過後臺配置,來讓遊戲使用某種計費SDK。遊戲開發商
java反射實現動態代理模式
代理模式的作用是:為其他物件提供一種可以控制的訪問方式, 代理的角色: 1.抽象角色 宣告真實物件和代理物件需要實現的介面; 2.代理角色 代理物件內部含有對真實物件的引用,從而可以操縱真實的物件,同時代理物件 提供與真實物件相同的介面,以便在任何時刻都能替代真實物件,
Android java方法實現呼叫系統屬性
最近在寫一個測試apk時需要呼叫Android的系統屬性來設定相關的標誌位,但在使用標準的java庫中的System.getProperty和System.setProperty方法並不能獲得Android中的系統屬性,而且會出現空指標崩潰。查閱相關資料發現,雖
Java反射實現JSON與JavaBean之間的轉換
專案中需要將Websocket伺服器傳來的JSON字串解析並存入資料庫,該JSON字串是與系統中的實體一一對應的,如果要單獨解析會十分麻煩,而且一大段程式碼很不美觀,於是寫了一個小工具
JAVA反射實現JdbcTemplate中查詢方法 返回的結果集自動封裝成對應的JAVABean對象
block ada declare object execute pla conn list() 語句 將JdbcTemplate中查詢方法返回的結果集自動封裝成對應的JAVABean對象 只能查詢單張表的數據 封裝到對應的JAVABean對象中 查詢的列數隨意 可以不
Android Java Web實現登入註冊(二)——伺服器端
Eclipse新建Dynamic Web Project,新建index.html,執行看見沒有提示404錯誤的頁面即Tomcat伺服器部署成功。這是搭建Java Web環境時需要完成的工作。詳細內容請看點選開啟連結 涉及的檔案與專案結構: 一、Servlet類
Android:利用Java反射呼叫@hide的API
設定使用3G資料功能: 從原始碼看到隱藏的API(ConnectivityManager.java): /** * Sets the persisted value for enabling/disabling Mobile data. *
利用JAVA反射機制實現調用私有方法
parse try ble cat 權限 利用 enabled tde mod 1.fragment是AccessibilityFragment的對象。須要被調用的方法的類。 setAccessible(true)並非將方法的訪問權限改成了public。而是取
API Hook基本原理和實現
use 概率 缺省 後綴 origin gif object cati mov API Hook基本原理和實現 2009-03-14 20:09 windows系統下的編程,消息message的傳遞是貫穿其始終的。這個消息我們可以簡單理解為一個有特定