Xposed简单入门

1.在AndroidManifest.xml中application标签内添加

        <!-- 是否是xposed模块,xposed根据这个来判断是否是模块 -->
        <meta-data
            android:name="xposedmodule"
            android:value="true" />

        <!-- 模块描述,显示在xposed模块列表那里第二行 -->
        <meta-data
            android:name="xposeddescription"
            android:value="插件名称" />

        <!-- 最低xposed版本号(lib文件名可知) -->
        <meta-data
            android:name="xposedminversion"
            android:value="30" />

2.在app的build.gradle中添加对xposed的引用,compileOnly代表只在编译时有效,不会参与打包

compileOnly 'de.robv.android.xposed:api:82'

3.新建一个类实现IXposedHookLoadPackage接口的handleLoadPackage方法

public class MyXposedPlugin implements IXposedHookLoadPackage {

    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {

    };

}

4.在handleLoadPackage中可以通过判断包名或者进程名来判断是否hook

if (loadPackageParam.packageName.equals("com.tencent.mm")){
    //hook 
}

5.通过findAndHookMethod来hook指定方法,其中方法名后面的是可变参数,用于填写方法的参数类型

findAndHookMethod("com.tencent.mm.x.y.z.a.ClassName", loadPackageParam.classLoader,
                    "MethodName",String.class,int.class,new XC_MethodHook() {
                @Override
                protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                    for (int i = 0; i < param.args.length; i++) {
                        XposedBridge.log(" argument is:[" +(i+1)+"]"+ param.args[i]);
                    }

                }
                @Override
                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                    // this will be called after the clock was updated by the original method
                }

        });

6.在assets中新建xposed_init文件,写入完整的插件类名

com.xy.test.MyXposedPlugin
posted @ 2018-09-20 23:18  土豆吞噬者  阅读(733)  评论(0编辑  收藏  举报