hook所有方法
```java
package com.example.hook;
import android.util.Log;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Map;
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;}
// 遍历所有的类
XposedHelpers.findAndHookMethod(ClassLoader.class, "loadClass", String.class, new XC_MethodHook() {
// 加载完成的时候 获取返回值 就拿到了类 loadClass 返回的都是字节码
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
Class clazz = (Class)param.getResult();
String clazzName = clazz.getName();
// 过滤掉一些类
if(!clazzName.contains("xiaojianbang")){return;}
Log.d("Rw", "类 -- " + clazzName);
// hook类下的普通方法 getDeclaredMethods 返回类下的所以普通方法
Method[] allmet = clazz.getDeclaredMethods();
for (int i = 0; i < allmet.length; i++) {
final Method md = allmet[i];
// 获取方法的标识符
int xxxx = md.getModifiers();
// 过滤掉一些不需要的方法
// 抽象类 Modifier.isAbstract();
// native Modifier.isNative();
// 接口 Modifier.isInterface();
if(!Modifier.isAbstract(xxxx) && !Modifier.isNative(xxxx) && !Modifier.isInterface(xxxx)){
// 调用 XposedBridge.hookMethod hook函数 不用串参数 值传入方法就ok
XposedBridge.hookMethod(md, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
Log.d("Rw", "普通方法 -- " + md.toString());
}
});
}
};
}
});
};
}
```