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()); } }); } }; } }); }; } ```