Xposed 模块开发入门

    技术2026-02-04  4

    Xposed模块开发入门

    阅读本文之前,你应该准备好以下事项:

    安装 Android Studio,并完成配置掌握 Xposed 的安装和使用方法拥有阅读 Java 代码的能力

    阅读本文之后你将掌握以下内容:

    独立编写一个简单的 Android 程序独立编写一个简单的 Xposed 模块

    1. 编写测试程序

    1.1 创建项目

    1.2 修改布局

    然后将左侧源代码修改为以下内容:

    <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextView android:id="@+id/tv_text" android:layout_centerInParent="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" android:textSize="22dp" /> <Button android:id="@+id/bt_change" android:layout_alignParentBottom="true" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="点击我" /> </RelativeLayout>

    1.3 编写程序逻辑代码

    private Button btn1; private TextView tvText1; btn1 = (Button) findViewById(R.id.bt_change); tvText1 = (TextView) findViewById(R.id.tv_text); btn1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { tvText1.setText("你已经点击了按钮"); } });

    按下 Ctrl + Shift + L 可一键格式化代码

    2. 运行测试程序

    Android Studio 中内置了 虚拟机,我们可以直接在 PC 上进行程序的测试运行。 如果你不想在虚拟机中运行测试程序,而是在自己的手机上安装运行,那么你可以先跳转到步骤 3.6 打包应用。

    3. 编写 Xposed 模块

    接下来我们将通过编写一个 Xposed 模块来实现修改测试程序的运行结果: 当我们点击底部按钮后,界面中间的文字将变为我们所自定义的文本。

    3.1 新建 Xposed 项目

    同普通APP程序一样 Xposed 也是一个 APP 程序, 我们可以像 1.1 所示的步骤一样创建一个拥有 Activity 的程序,但是由于我们本次编写的 Xposed 模块无需用户界面, 所以我们也可以选择 No Activity 的项目进行创建。

    3.2 修改 AndroidManifest.xml

    项目创建完成后,我们以下展开左侧目录的 app->manifests,然后双击打开 AndroidManifest.xml 文件。

    AndroidManifest.xml 文件中的 application 标签默认是一个单标签, 由于我们需要向其中添加内容, 所以我们首先要将 application 标签修改为双标签:

    接下来我们在 </application>之前添加以下代码:

    <meta-data android:name="xposedmodule" android:value="true" /> <meta-data android:name="xposeddescription" android:value="这是一个没有Active的Xposed模块" /> <meta-data android:name="xposedminversion" android:value="30" />

    然后 AndroidManifest.xml 文件的内容大致如下图所示:

    3.3 引入 Xposed Api

    展开左侧的 Gradle Scripts 目录,然后双击 build.gradle(Module: app) 文件,并向其中添加如下代码:

    repositories { jcenter() } compileOnly 'de.robv.android.xposed:api:82' compileOnly 'de.robv.android.xposed:api:82:sources'

    它们对应的位置如图所示:

    然后点击右上角的 Sync Now 等待完成提示即可。

    3.4 编写 Hook 主程序

    展开 java 目录,然后鼠标右击 Xposed 模块对应的包名,新建一个 Java Class 文件,名称自定义(在这里我使用 Main 来命名)

    接下来我们通过刚才新建的类来 实现 IXposedHookLoadPackage 接口:

    具体代码如下(com.example.helloworld 需要修改为测试程序对应的包名):

    if(lpparam.packageName.equals("com.example.helloworld")) { XposedBridge.log("测试程序已经加载"); XposedHelpers.findAndHookMethod(TextView.class, "setText", CharSequence.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { if(param.args[0] == "你已经点击了按钮") { param.args[0] = "这是被Xposed Hook修改的文本"; XposedBridge.log("Xposed 成功 Hook 目标方法"); } } @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { super.afterHookedMethod(param); } }); }

    3.5 设置 Xposed 模块入口

    完成上述步骤之后,我们需要为 Xposed 模块指定入口文件。

    新建 Assets Folder 时,我们直接点击 Finish 即可,无需进行其他操作。

    接下来,我们将左上角的 Project 切换回 Android ,这时我们可以在左侧看到 assets 目录,鼠标右击该目录选择新建一个 File ,命名为 xposed_init。

    向 xposed_init 写入以下内容: Xposed 对应的包名.入口类名

    例如: 我创建的 Xposed 模块包名为: com.example.xposedhook, 在步骤 3.4 当中创建的 Java Class 文件命名为 Main

    那么,我应该向 xposed_init 中写入: com.example.xposedhook.Main

    3.6 打包应用

    步骤 2 中的运行测试程序是针对那些拥有用户界面的程序,由于我们所编写的 Xposed 模块是无用户界面的程序且虚拟机中没有安装 Xposed 框架,所以我们可以选择将项目打包为 APK 文件,然后在已安装 Xposed 框架的手机中进行安装测试。

    我们依次选择顶部工具栏中的 Build->Build Bundle(s) / APK(s)->Build APK(s),然后等待程序打包完成。

    程序打包完成后在 Android Studio 的右下角会弹出提示,接下来我们点击蓝色的 locate,即可打开所打包的 APK 文件所在目录。

    4. 测试 Xposed 模块功能

    此时我们需要将所打包的测试程序和 Xposed 模块一起安装到一部已经安装 Xposed 框架的手机中。

    然后我们在 Xposed 框架中选择刚才所安装的 Xposed 模块进行启用,并重启手机。

    这时我们再次运行我们之前所编写的测试程序,并点击底部的按钮,然后我们会发现: 中间的文字已经不是我们在测试程序所编写的 “你已经点击了按钮”, 而是我们在 Xposed 模块中自定义的 “这是被Xposed Hook修改的文本”。

    至此,你已经学会了如何编写一个简单的 Android 程序和 Xposed 模块。

    Processed: 0.032, SQL: 9