前提:需要已经安装Xposed Installer
1. 新建一个AS项目
并把MainActvity和layout_activiyt.xml这两个文件删掉,然后在AndriodManifest.xml中去掉这个Activity的声明
2. 在settings.gralde文件中加上阿里云的仓库地址,否则Xposed依赖无法下载
Groovy
maven { url 'https://maven.aliyun.com/repository/public/' }
settings.gradle
Groovy
pluginManagement {
repositories {
maven { url 'https://maven.aliyun.com/repository/public/' }
mavenCentral()
maven {
url 'https://jitpack.io'
}
google {
content {
includeGroupByRegex("com\\.android.*")
includeGroupByRegex("com\\.google.*")
includeGroupByRegex("androidx.*")
}
}
gradlePluginPortal()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
maven { url 'https://maven.aliyun.com/repository/public/' }
mavenCentral()
maven {
url 'https://jitpack.io'
}
google()
}
}
rootProject.name = "MyFirstXposedPlugin"
include ':app'
3. 在app模块下的build.gradle文件中添加依赖
Groovy
dependencies {
// 必须使用compileOnly,否则Xposed Install会提示Cannot Load Module
compileOnly "de.robv.android.xposed:api:82"
......
}
4. 新建一个MyXposedModule类,里面我们hook一个普通方法
java
package com.example.myfirstxposedplugin;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage;
public class MyXposedModule implements IXposedHookLoadPackage {
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
// 在这里添加你的钩子逻辑
XposedBridge.log("当前应用的包名:" + loadPackageParam.packageName);
if (loadPackageParam.packageName.equals("目标应用的包名")) {
// hookTargetMethod();
}
}
private void hookTargetMethod() {
// 在这里添加目标应用的方法钩子逻辑
// Class<?> targetClass = XposedHelpers.findClass("目标类的完整路径", null);
// XposedHelpers.findAndHookMethod(targetClass, "目标方法名", 参数类型.class, new XC_MethodHook() {
// @Override
// protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
// // 在方法调用前执行的逻辑
// }
//
// @Override
// protected void afterHookedMethod(MethodHookParam param) throws Throwable {
// // 在方法调用后执行的逻辑
// }
// });
}
}
5. 在assets目录下新建一个名为xposed_init的文件,在里面添加刚刚新建的类的全类名
bash
com.example.myfirstxposedplugin.MyXposedModule
6. 在AndriodManifest.xml文件中将该项目声明成Xposed模块,添加如下代码:
XML
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.MyFirstXposedPlugin"
tools:targetApi="31">
<!-- 添加 Xposed 模块入口 -->
<meta-data
android:name="xposedmodule"
android:value="true" />
<!-- Xposed 模块的入口类 -->
<meta-data
android:name="MyXposedModule"
android:value="com.example.myfirstxposedplugin.MyXposedModule" />
<!-- 指定最低支持的 Xposed 框架版本 -->
<meta-data
android:name="xposedminversion"
android:value="82" /> <!-- 使用你模块所需的最低版本号 -->
<!-- 提供模块的描述信息 -->
<meta-data
android:name="xposeddescription"
android:value="这是我的 Xposed 模块,用于实现某某功能。" />
</application>
</manifest>
最后将这个项目安装到实机或者模拟器中
你在Xposed Installer的侧边菜单栏中的模块标签页就能看到我们刚刚编写的模块了
勾选上然后重启手机
重启之后,如果能在日志界面看到如下的内容,则表示该模块激活了
希望对你有帮助