Xposed的基本使用方法

1.Xposed介绍和安装

Xposed 是Android 系统两大 Hook 框架之一,另一个 Cydia Substrate 主要面向 native 的 hook,而 Xposed 是面向 java 层的 hook。

它的使用非常的简单,首先要在手机上安装 Xposed(手机必须先 root),本实例使用的是Xposed Installer 3.1.4
官方的下载地址:http://repo.xposed.info/module/de.robv.android.xposed.installer
实际上 Xposed Installer 只是一个装模块的容器,只安装一个 Xposed Installer 还是起不到 hook 的作用,核心 hook 的代码都在编写的模块当中。Xposed Installer的安装很简单,只需要将 Xposed Installer 的apk 文件安装到手机中即可。可以使用以下的命令安装到手机。

adb install xxx/XposedInstaller_3.1.4-22.apk

2.Xposed模块开发

安装好 XposedInstaller 之后,需要使用 Xposed 官方提供的开发包进行模块的开发。本文档的文件夹中提供了一个 XposedBridgeAPI-54的 jar 包,它是 Xposed 官方最新的开发包。如果你需要了解开发包的最新版本更新,可以去官方下载:下载地址。
下面正式开始模块开发。
1.在AS中新建项目
2.在app目录下新建lib文件夹,将XposedBridgeAPI-54.jar放到该目录下,右键Add As Library添加到项目中
Xposed的基本使用方法
3.修改build.gradle文件,将compile改为provided,这样这个库就不会被编译到dex文件中,修改后需要点一下弹出来的黄色横条Sync Now
Xposed的基本使用方法
需要特别注意一下的是,这里必须sync成功,否则函数是没有提示的,因为没有将Xposed框架加载进去!
4.在AndroidManifest.xml文件中的application下添加如下代码。

	<meta-data android:name="xposedmodule" android:value="true" />
	<meta-data android:name="xposeddescription" android:value="getColor的钩子" />
	<meta-data android:name="xposedminversion" android:value="54" />

5.新建一个文件XposedEntry.java

	import android.util.Log;
	​
	import de.robv.android.xposed.IXposedHookLoadPackage;
	import de.robv.android.xposed.XC_MethodHook;
	import de.robv.android.xposed.callbacks.XC_LoadPackage;
	​
	import static de.robv.android.xposed.XposedHelpers.findAndHookMethod;
	​
	​
	public class XposedEntry implements IXposedHookLoadPackage {
	    @Override
	    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
	        // log 不能写中文
	        findAndHookMethod("android.content.res.Resources", loadPackageParam.classLoader,"getColor",int.class,new my_getColor());
	    }
	}
	class my_getColor extends XC_MethodHook {
	    protected void beforeHookedMethod(XC_MethodHook.MethodHookParam param) throws Throwable{
	        Log.d("Xposed Exaple","beforeHookedMethod");
	    }
	    protected void afterHookedMethod(XC_MethodHook.MethodHookParam param) throws Throwable{
	        Log.d("Xposed Exaple","afterHookedMethod");
	        int rel = (int)param.getResult();
	        rel = rel & ~0x0000ff00 | 0x00ff0000;
	        param.setResult(rel);
	    }
	}

6.最后在 main文件夹下新建assets文件夹,在里面新建一个File文件,命名为xposed_init。在里面添加包名和入口名
Xposed的基本使用方法

com.example.a42033.myapplication.XposedEntry

3.安装模块

模块开发好了以后,在 Android Studio 里面运行,Xposed中的模块区会自动识别出这个模块,勾选这个模块后重启手机,hook 模块就会生效。