简介
Xposed是一个运行于Android操作系统的钩子框架。其通过替换Android系统的关键文件,可以拦截几乎所有Java函数的调用,并允许通过Xposed模块中的自定义代码更改调用这些函数时的行为。因此,Xposed常被用来修改Android系统和应用程序的功能。
配置模块信息
打开AndroidManifest.xml,在Application中添加3个meta-data标签。 xposedmodule代表这是一个Xposed模块。 xposeddescription代表模块说明,会显示在模块管理中。 xposedminversion代表支持的xposed的最低版本。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="de.robv.android.xposed.mods.tutorial"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="15" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<meta-data
android:name="xposedmodule"
android:value="true" />
<meta-data
android:name="xposeddescription"
android:value="Easy example which makes the status bar clock red and adds a smiley" />
<meta-data
android:name="xposedminversion"
android:value="53" />
</application>
</manifest>
添加依赖
在主工程(一般叫app)的build.gradle中添加以下代码
dependencies {
............
compileOnly 'de.robv.android.xposed:api:82'
compileOnly 'de.robv.android.xposed:api:82:sources'
}
然后同步一下,同步成功后,就可以在代码中使用Xposed的Api了。
创建入口类
实现IXposedHookLoadPackage接口。
package de.robv.android.xposed.mods.tutorial;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;
public class Tutorial implements IXposedHookLoadPackage {
public void handleLoadPackage(final LoadPackageParam lpparam) throws Throwable {
//处理hook逻辑
XposedBridge.log("Loaded app: " + lpparam.packageName);
//使用XposedHelpers.findAndHookMethod等方法hook
}
}
添加初始化文件
在assets目录下创建一个叫xposed_init的文本文件。如果没有assets目录先创建这个目录。 内容为入口类的全路径
de.robv.android.xposed.mods.tutorial.Tutorial
大功造成,运行项目,会在Xposed模块管理中看到我们的app。