(学习笔记)Xposed模块编写(一)

前提:需要已经安装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的侧边菜单栏中的模块标签页就能看到我们刚刚编写的模块了

勾选上然后重启手机

重启之后,如果能在日志界面看到如下的内容,则表示该模块激活了

希望对你有帮助

相关推荐
05候补工程师11 分钟前
【期末/408冲刺】软件工程核心考点与大题通关秘籍(附图解与解题套路)
大数据·hadoop·经验分享·笔记·软件工程
超人不会飞_Jay15 分钟前
2026.6.4 Vue用户中心项目笔记
前端·vue.js·笔记
中屹指纹浏览器17 分钟前
2026WebGL2着色器浮点精度与帧缓存像素指纹溯源及内核渲染层差异化改造详解
经验分享·笔记
故渊at18 分钟前
第一板块:Android 系统基石与运行原理 | 第一篇:Android 系统架构分层与 AOSP 规范
android·系统架构·android系统·aosp
txh050722 分钟前
串口数据调试-直观表示
嵌入式硬件·学习
YunQuality23 分钟前
老牌连接器大厂盛凌电子启动QMS数字化升级:制造企业的质量内卷,终于不靠“人盯人”了
笔记·制造·职场·工业软件
Lucky_ldy25 分钟前
51单片机的学习下(结合中科协的个人自用笔记)
笔记·学习·51单片机
故渊at30 分钟前
系列三:组件化与模块化进阶 | 第12篇 老项目重构实战(绞杀者模式):从单体巨石到组件化架构的无痛迁移
android·重构·架构·模块化·组件化
神仙别闹32 分钟前
基于Android的科学计算器
android
OBiO201333 分钟前
AAV在肠道研究中的应用:从血清型选择到炎症性肠病研究案例解析
学习