xposed模块开发步骤总结

2024-04-01 06:48

本文主要是介绍xposed模块开发步骤总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文地址:http://blog.csdn.net/CSDN_LQR/article/details/52245132?locationNum=4&fps=1



一、成为xposed模块

要成功xposed模块,被xposed识别,一般需要在清单文件中标识该三个元数据(meta-data)

<applicationandroid:name=".base.BaseApplication"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"><meta-dataandroid:name="xposedmodule"android:value="true"/><meta-dataandroid:name="xposeddescription"android:value="模块描述文字"/><meta-dataandroid:name="xposedminversion"android:value="30"/>
</application>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

二、引用xposed框架的jar包(XposedBridgeApi.jar)

把下载下来的XposedBridgeApi.jar放到libs目录下,eclipse的话需要单击右键,选择Build Path => Add to Build Path ;android studio的话需要单击右键,选择Add As Library…。

①国外下载地址:http://forum.xda-developers.com/xposed/xposed-api-changelog-developer-news-t2714067
②国内下载地址:http://download.csdn.net/detail/csdn_lqr/9607044

三、进入其他应用的进程

创建一个类,继承IXposedHookLoadPackage类,覆写handleLoadPackage方法,xposed的该方法在任何应用启动时都会被调用,故可以进入任何应用程序的进程,但是一般只针对某个特定的应用,例如,只要进入qq的进程:

import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XposedBridge;public class XposedInit implements IXposedHookLoadPackage {@Overridepublic void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {if (!loadPackageParam.packageName.contains("com.tencent.mobileqq"))return;XposedBridge.log("Loaded app: " + loadPackageParam.packageName);}}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

XposedBridge.log根Log差不多,Log打印的语句会出现在控制台,而XposedBridge.log的打印会输出到xposed框架的启动程序的日志功能中,要调试的话就要到xposed的日志下查看log输出。

四、拦截某个方法

1、拦截com.tencent.mobileqq.app.message.QQMessageFacade类中的a方法,该方法有2个参数,类型分别是

ArrayList、boolean。一般拦截用到的回调对象是XC_MethodHook。

findAndHookMethod("com.tencent.mobileqq.app.message.QQMessageFacade", loadPackageParam.classLoader, "a", ArrayList.class, boolean.class, new XC_MethodHook() {@Overrideprotected void afterHookedMethod(MethodHookParam param) throws Throwable {try {// 在原先方法执行之后要执行的逻辑代码} catch (Throwable t) {XposedBridge.log(t);}}
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
方法的拦截分执行前拦截(beforeHookedMethod)和执行后拦截(afterHookedMethod),顾名思义,一个是在方法执行前先执行我们自己的代码,一个是在方法执行后再执行我们自己的代码。

2、如果你根本不行让原来的方法执行,那可以直接对方法的执行逻辑进行替换,回调时使用XC_MethodReplacement对象进行处理即可。

findAndHookMethod("com.tencent.mobileqq.app.message.QQMessageFacade", loadPackageParam.classLoader, "a", ArrayList.class, boolean.class, new XC_MethodReplacement() {@Overrideprotected Object replaceHookedMethod(MethodHookParam methodHookParam) throws Throwable {try {// 直接替换原来要执行的逻辑代码} catch (Throwable t) {XposedBridge.log(t);}}
});
对于回调过来的参数MethodHookParam param一般有以下2种用处:
param.args[0]:得到被拦截方法的第一个参数,返回值是Object
param.getResult():得到被拦截方法的执行结果,返回值是Object

五、指定模块的入口

一个模块可以有多个继承IXposedHookLoadPackage的子类,所以要指定一个入口让xposed去执行(指定两个似乎也是可行的,未测试)。指定一个入口的步骤: 
1、在assets目录下新建一个名为xposed_init的文件。 
2、在xposed_init中写入某个IXposedHookLoadPackage子类的完整类名,如:com.lqr.test.XposedInit。

六、运行

写完代码之后,就要把模块运行看看效果了,把应用部署到手机后,必须要在xposed框架的“模块”功能中勾选该应用,之后需要重启手机才可生效。

如果使用AndroidStudio的,要注意一下,如果遇到一些不可解释的情况,可以先build出app后(Build-->Build APK),发给手机安装,重装勾选和重启后再试试看。

这篇关于xposed模块开发步骤总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/866483

相关文章

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

python删除xml中的w:ascii属性的步骤

《python删除xml中的w:ascii属性的步骤》使用xml.etree.ElementTree删除WordXML中w:ascii属性,需注册命名空间并定位rFonts元素,通过del操作删除属... 可以使用python的XML.etree.ElementTree模块通过以下步骤删除XML中的w:as

java向微信服务号发送消息的完整步骤实例

《java向微信服务号发送消息的完整步骤实例》:本文主要介绍java向微信服务号发送消息的相关资料,包括申请测试号获取appID/appsecret、关注公众号获取openID、配置消息模板及代码... 目录步骤1. 申请测试系统2. 公众号账号信息3. 关注测试号二维码4. 消息模板接口5. Java测试

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

Mac系统下卸载JAVA和JDK的步骤

《Mac系统下卸载JAVA和JDK的步骤》JDK是Java语言的软件开发工具包,它提供了开发和运行Java应用程序所需的工具、库和资源,:本文主要介绍Mac系统下卸载JAVA和JDK的相关资料,需... 目录1. 卸载系统自带的 Java 版本检查当前 Java 版本通过命令卸载系统 Java2. 卸载自定

一文深入详解Python的secrets模块

《一文深入详解Python的secrets模块》在构建涉及用户身份认证、权限管理、加密通信等系统时,开发者最不能忽视的一个问题就是“安全性”,Python在3.6版本中引入了专门面向安全用途的secr... 目录引言一、背景与动机:为什么需要 secrets 模块?二、secrets 模块的核心功能1. 基