hook构造函数
```java
package com.example.hook;
import android.util.Log;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XC_MethodReplacement;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;
public class Hook implements IXposedHookLoadPackage {
public void handleLoadPackage(final LoadPackageParam lpparam) throws Throwable {
Log.d("Rw", "hook...");
// hook 是一个全局的hook 我们不想让他hook 所有的app 所以我们需要判断下包名
if(!lpparam.packageName.equals("com.xiaojianbang.xposeddemo")){return;}
// 获取一个类的字节码 有很多方式 下面是xp 提供的api Class<?> 是标示一个泛型 lpparam.classLoader 是类选择器 一般都是这个
Class<?> Demo_Clazz = XposedHelpers.findClass("com.xiaojianbang.xposeddemo.Demo",lpparam.classLoader);
// hook 构造函数 什么是构造函数呢 和类名一样 没有返回值
XposedHelpers.findAndHookConstructor(Demo_Clazz, new XC_MethodHook() { //这个hook的是 没有参数的构造函数
// hook 前
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
Log.d("Rw", "hook没有参数的构造函数");
}
// hook 后
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
}
});
//这个hook的是 有参数的构造函数
XposedHelpers.findAndHookConstructor(Demo_Clazz,String.class, new XC_MethodHook() {
// 函数执行 前
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
Log.d("Rw", "hook有参数的构造函数");
Log.d("Rw", "构造函数传入的值" + param.args[0]);
param.args[0] = "学习xposed";
Log.d("Rw", "构造函数修改后的值" + param.args[0]);
}
// 函数执行 后
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
}
});
};
}
```