1. 創(chuàng)建Xposed插件項(xiàng)目
使用Android studio 創(chuàng)建一個(gè)新項(xiàng)目
界面顯示
2. 導(dǎo)入Xposed的api庫
方法1:
Android Studio的依賴:
repositories {
jcenter();
}
dependencies {
provided 'de.robv.android.xposed:api:82'
}
方法2: 下載jar包
地址: https://bintray.com/rovo89/de.robv.android.xposed/api
3.在AndroidManifest.xml配置
創(chuàng)建Xposed項(xiàng)目后,還需要在AndroidMenafest.xml文件里面聲明Xposed模塊酒来,在application里面添加三個(gè)meta-data標(biāo)簽(xposedmodule、xposeddescription堰汉、xposedminversion)
4.創(chuàng)建hook類
我們新建一個(gè)類,類名隨意翘鸭,然后實(shí)現(xiàn)IXposedHookLoadPackage接口,并且重寫handleLoadPackage方法就乓,里面就是我們要具體操作的地方拱烁,我這里創(chuàng)建了一個(gè)XposedInit類
5.聲明類的入口
在main目錄下創(chuàng)建assets目錄噩翠,在assets目錄下創(chuàng)建xposed_init文件戏自,不要后綴名擅笔。這個(gè)就是模塊的入口,只有一行代碼屯援,就是說明入口類
5.編寫Xposed代碼
public class XposedInit implements IXposedHookLoadPackage {
private String TAG="XposedInit";
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
if (lpparam.appInfo == null || (lpparam.appInfo.flags & (ApplicationInfo.FLAG_SYSTEM |
ApplicationInfo.FLAG_UPDATED_SYSTEM_APP)) != 0) {
return;
}
String packageName = lpparam.packageName;//應(yīng)用包名
String processName = lpparam.processName;//
ClassLoader classLoader = lpparam.classLoader;
/* 重寫XC_MethodHook的兩個(gè)方法beforeHookedMethod和afterHookedMethod,
這兩個(gè)方法會(huì)在原始的方法的之前和之后執(zhí)行.
您可以使用beforeHookedMethod 方法來打印/篡改方法調(diào)用的參數(shù)(通過param.args)
,甚至阻止調(diào)用原來的方法(發(fā)送自己的結(jié)果).
afterHookedMethod 方法可以用來做基于原始方法的結(jié)果的事情.您還可以用它來操縱結(jié)果 .
當(dāng)然玄呛,你可以添加自己的代碼,它將會(huì)準(zhǔn)確地在原始方法的前或后執(zhí)行.*/
if(BuildConfig.APPLICATION_ID.equals(packageName)){
//om.xposed_wechat.xz.MainActivity 需要Hook類名
//showIsXposedStart 需要Hook類名下面的方法名
XposedHelpers.findAndHookMethod("com.xposed_wechat.xz.MainActivity", classLoader,
"showIsXposedStart", boolean.class, new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);
//
}
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
param.args[0]=true;
super.beforeHookedMethod(param);
}
});
}
}