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添加到项目中
3.修改build.gradle文件,将compile改为provided,这样这个库就不会被编译到dex文件中,修改后需要点一下弹出来的黄色横条Sync Now
需要特别注意一下的是,这里必须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。在里面添加包名和入口名
com.example.a42033.myapplication.XposedEntry
3.安装模块
模块开发好了以后,在 Android Studio 里面运行,Xposed中的模块区会自动识别出这个模块,勾选这个模块后重启手机,hook 模块就会生效。