最近了解到Xposed這個框架,真乃神器,有了它,你就可以在root過的Android手機上“為所欲為”了,像之前朋友和我安利的微信搶紅包插件、各種定制的修改系統(tǒng)默認ui的插件阿都可以通過這個框架來實現(xiàn),想想都是美滋滋~于是抽空倒騰了一下,先跑個demo看看吧
hook前的準備步驟:
1.先把手機root了(root了之前不用了的小米手機,root以前,小米系統(tǒng)是爸爸,root以后,有root權限的app都是爸爸)
2.安裝Xposed框架下載鏈接戳這里
安裝以后打開app,界面是這個樣子的,紅字顯示未激活:

3.點擊進入“框架”,看到XposedBridge.jar對應激活那一欄顯示的是“---“,確實沒激活

4.點擊“安裝/更新”進行激活,這時會彈窗提示是否獲取root權限,當然要獲取啦。然后系統(tǒng)會自動重啟,重啟以后再次進入app,可以看到XposedBridge.jar已經(jīng)激活成功了,版本是54

demo---hook TextView的setText方法
情景:往輸入框中寫東西,點擊按鈕,文本框中獲取輸入框中的數(shù)據(jù)并顯示
目標:hook TextView的setText方法,把內(nèi)容進行篡改
代碼如下:

然后就是寫hook程序啦,寫hook程序有四步:
1.引入Xposed Api
2.配置hook 程序信息
3.寫hook程序
4.運行程序,啟動hook模塊
1.引入Xposed?Api
首先需要下載Xposed?Api的jar包:
之前看到安裝的框架里XposedBridge.jar的版本是54,因此我這里下了個53版本的Api(剩下的只有81、82了,都比54大)
下載下來的jar包,放入新建的AS工程的libs文件夾下,然后將其添加為library。
在build.gradle中添加依賴:

2.配置hook程序信息
在AndroidManifest中添加meta-data:

3.寫hook程序
需要實現(xiàn)IXposedHookLoadPackage接口,實現(xiàn)handleLoadPackage方法:

在handleLoadPackage中可以設置要hook的包名,這里指定了先前寫好的demo的包名。然后在XposedHelpers.findAndHookMethod中指定要hook的類、方法及方法的參數(shù)類型。新建一個XC_MethodHook的實例,里面的beforeHookedMethod方法會在hook到的方法前執(zhí)行,在這里可以獲取到hook到的方法的參數(shù),做一些自己的處理,我這里就把原文本之前加了個”hooked“,里面的afterHookedMethod方法會在hook到的方法后處理,可以設置方法的結(jié)果,這里沒有做處理。
在寫好hook程序以后,需要對其做一個聲明,這樣XposedInstaller才能找到它,這里需要main下新建一個assets文件夾,在assets文件夾下新建xposed_init文件,在這個文件里做hook程序入口類的聲明:

4.運行程序,啟動hook模塊
運行程序,然后在XposedInstaller中勾選hook程序

再重啟手機,hook程序就能生效了!
demo效果

可以看到textView中設置的text果然被hook程序做了額外處理,hook成功~~~