Xposed快速入门

1,603 阅读1分钟

简介

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。