初识Xposed开发
也许,是生活也是人生

最近在研究Xposed这款热门的工具,那么下面就来讲解一下,一个小白如何入门Xposed模块开发


a.准备工作

  1. 掌握基本的android开发知识,搭建好android开发环境。
  2. 有xposed框架作为环境(真机或者模拟器)
  3. Xposed框架API(我是使用的:api-82-sources.jarapi-82.jar两个库),下载地址:https://jcenter.bintray.com/de/robv/android/xposed/api/

b.搭建框架

1.Android Studio上新建一个Empty Activity项目:

点击查看原图

2.Language选择Java,安卓API选择5.0(你可以根据自己的情况选择)

点击查看原图

3.将项目切换成Project查看

点击查看原图

4.把你下载好的api-82-sources.jarapi-82.jar两个库文件拷贝到下面目录并切添加到支持库当中

点击查看原图

5.打开app下的build.gradle,将两处依赖修改成图下一样,这样是为了解决在Xposed中运行冲突原因,否则后面写的hook代码会运行失败

点击查看原图


compileOnly fileTree(include: ['*.jar'], dir: 'libs')
compileOnly files('libs/api-82.jar')


6.打开AndroidManifest.xml文件,添加如下代码

点击查看原图


<meta-data
        android:name="xposedmodule"
        android:value="true" />
<meta-data
        android:name="xposeddescription"
        android:value="XP框架测试模块" />
<meta-data
        android:name="xposedminversion"
        android:value="53" />


b.我的第一个xposed程序

1.MainActivity类中,添加一个hello方法,并且设置返回值,在onCreate方法中调用hello方法,然后运行它到手机上

package com.example.hello;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /**
         * 这里调用hello方法,如果没有被hook的情况下,会正常弹出“我没有被HOOK”提示
         */
        Toast.makeText(this, hello(), Toast.LENGTH_SHORT).show();
    }

    /**
     * 定义一个方法
     *
     * @return
     */
    public String hello() {
        return "我没有被HOOK";
    }
}

点击查看原图

2.接下来,我们就要通过Xposed来hook我们上面的hello方法,将他的返回值修改成:“HOOK成功!”,首先随便新建一个类,我的类叫Hook类(名字自己随便定义),代码如下:

package com.example.hello;

import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage;

public class Hook implements IXposedHookLoadPackage {

    @Override
    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {

        //这里判断你需要hook的包名
        if (lpparam.packageName.equals("com.example.hello")) {
            Class<?> clazz = lpparam.classLoader.loadClass("com.example.hello.MainActivity");
            XposedHelpers.findAndHookMethod(clazz, "hello", new XC_MethodHook() {
                @Override
                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                    super.afterHookedMethod(param);

                    //这里修改hello方法的返回值
                    param.setResult("HOOK成功!");
                }
            });
        }
    }

}


3.新建一个assets资源文件夹,如下图操作即可

点击查看原图

4.然后再assets目录下添加一个无后缀的文件:xposed_init,文件内容填写你的Hook类完整地址,比如我的包是com.example.hello,类是Hook,那么就直接填写com.example.hello.Hook即可,然后将软件安装到手机上,打开xposed软件,点击模块,勾选上你自己的模块,然后重启手机。

点击查看原图

5.重启完手机后,先启动Xposed框架,在打开你的软件,你会发现,启动后会弹出“HOOK成功!”,表示你成功了

点击查看原图


「也许,这就是人生」

发表评论