创建一个xposed模块Demo

2018-08-24  本文已影响398人  潇洒的夏夏

1.开发工具Android studio
2.项目结构如下图所示,libs文件夹放入我们从官网下载的jar库文件,assets文件夹下新建一个xposed_init,注意这个文件没有后缀格式,这个文件后面用于声明模块入口的。然后新建一个HookToast.java文件,这个文件就是我们程序的主要逻辑文件,xposed控制都在这个文件里面写,另外默认的MainActivity.java文件,我们不用去管它,因为xposed可以不需要界面!


创建一个xposed模块Demo

3.在app文件夹下build.gradle中将添加图中两句,引入库文件。有人说
provided 'de.robv.android.xposed:api:82:sources'这句不是必要的,确实,它里面存放了javadoc,方便Ctrl+Q快速查阅,反正也是一堆英文看着晕,不写这句也行。

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
  provided 'de.robv.android.xposed:api:82'
  provided 'de.robv.android.xposed:api:82:sources'
}

4.在AndroidManifest.xml将自己标识为一个Xposed模块,语句添加在如下位置

        <meta-data
            android:name="xposedmodule"
            android:value="true" />
        <meta-data
            android:name="xposeddescription"
            android:value="潇洒夏夏_这里是模块介绍" />
        <meta-data
            android:name="xposedminversion"
            android:value="53" />

5.HookToast.java这里需要我们自己定义功能的类块,如下代码是修改包名为com.toast这个apk的com.toast.MainActivity类下的这个toastMessage方法的值

// HookToast.java
package com.xposed.wx;

import de.robv.android.xposed.*;
import de.robv.android.xposed.callbacks.*;

public class HookToast implements IXposedHookLoadPackage
{
   @Override
   public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable
   {
      过滤应用包
      if (loadPackageParam.packageName.equals("com.toast"))
      {

         Class clazz = loadPackageParam.classLoader.loadClass("com.toast.MainActivity");

         XposedHelpers.findAndHookMethod(clazz, "toastMessage", new XC_MethodHook() {
               protected void beforeHookedMethod(MethodHookParam param) throws Throwable
               {
                  XposedBridge.log("别看了,老子已经成功Hook");
                  super.beforeHookedMethod(param);
               }

               protected void afterHookedMethod(MethodHookParam param) throws Throwable
               {
                  param.setResult("你已被劫持");
               }
            });
      }
   }
}
   
package com.toast;

import android.app.*;
import android.os.*;
import android.view.*;
import android.widget.*;

public class MainActivity extends Activity 
{
    private Button id;

    @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);

            id = (Button) findViewById(R.id.id);

            id.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Toast.makeText(MainActivity.this, toastMessage(), Toast.LENGTH_SHORT).show();
                    }
                });
        }

        public  String toastMessage() {
            return "你好";
        }
    }
    
        
   

6.声明xposed模块入口,之前说过在assets文件夹下新建一个xposed_init文件,文件里面就是写下面这行代码,声明xposed模块入口

com.xposed.wx.xposedhook

7.到这里一个简单的xposed模块就完成了,打包安装后在xposed框架里面的模块列表可以看见,重启一下手机模块就生效了!喜欢这篇文章麻烦给个赞或者捐款支持一下,毕竟手机打字不容易!

上一篇 下一篇

猜你喜欢

热点阅读