书读百变,其义自见。
本篇博客只是一个简单的学习笔记,记录一下我的第一个xposed模块的编写流程。
(1)创建一个工程。有没有Activity都可以。
(2)下载Xposed api,将下载好的api复制到libs目录下。
(3)AS工具下在api上右键选择add as library,将jar包导入。
(4)将build.gradle
中的
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.0.1'
testCompile 'junit:junit:4.12'
provided files('libs/api-82.jar')
改为
provided fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.0.1'
testCompile 'junit:junit:4.12'
provided files('libs/api-82.jar')
(5)修改AndroidManifest.xml
(6)新建类,实现接口和重写函数。
public class Main implements IXposedHookLoadPackage{
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable{
if(!loadPackageParam.packageName.equals("com.example.a13251.login")){//如果包名不为com.example.a13251.login则退出
return;
}
//重写findAndHookMethod实现对类的hook
XposedHelpers.findAndHookMethod("com.example.a13251.login.MainActivity", loadPackageParam.classLoader, "isCorrectInfo", String.class, String.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {//在要hook的类之前执行
XposedBridge.log("劫持了"+param.args[0]);
XposedBridge.log("劫持了"+param.args[1]);
}
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {//在要hook的类之后执行
XposedBridge.log("劫持结束了"+param.args[0]);
XposedBridge.log("劫持结束了"+param.args[1]);
}
});
}
}
参数说明 (by瘦蛟舞)
findAndHookMethod(Class clazz, //需要Hook的类名 ClassLoader, //类加载器,可以设置为 null String methodName, //需要 Hook 的方法名 Object… parameterTypesAndCallback 该函数的最后一个参数集,包含了:
(1)Hook 的目标方法的参数,譬如:
“com.android.internal.policy.impl.PhoneWindow.DecorView”
是方法的参数的类。
(2)回调方法:
a.XC_MethodHook
b.XC_MethodReplacement
(7)在app->src->main下新建assets文件夹,在文件夹内新建xposed_init文件,文件上声明模块的入口
以上步骤没有固定顺序,只要全部做完签名打包即可。
安装后在xposed管理程序上面勾选模块,重启手机。