Xposed学习笔记

书读百变,其义自见。

本篇博客只是一个简单的学习笔记,记录一下我的第一个xposed模块的编写流程。
(1)创建一个工程。有没有Activity都可以。
(2)下载Xposed api,将下载好的api复制到libs目录下。
(3)AS工具下在api上右键选择add as library,将jar包导入。
(4)将build.gradle
build

中的

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
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文件,文件上声明模块的入口
init

rukou

以上步骤没有固定顺序,只要全部做完签名打包即可。
安装后在xposed管理程序上面勾选模块,重启手机。

猜你喜欢

转载自blog.csdn.net/Magic1an/article/details/78670503