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

相关文章

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

PyQt5 GUI 开发的基础知识

《PyQt5GUI开发的基础知识》Qt是一个跨平台的C++图形用户界面开发框架,支持GUI和非GUI程序开发,本文介绍了使用PyQt5进行界面开发的基础知识,包括创建简单窗口、常用控件、窗口属性设... 目录简介第一个PyQt程序最常用的三个功能模块控件QPushButton(按钮)控件QLable(纯文本

PyCharm中配置PyQt的实现步骤

《PyCharm中配置PyQt的实现步骤》PyCharm是JetBrains推出的一款强大的PythonIDE,结合PyQt可以进行pythion高效开发桌面GUI应用程序,本文就来介绍一下PyCha... 目录1. 安装China编程PyQt1.PyQt 核心组件2. 基础 PyQt 应用程序结构3. 使用 Q

在macOS上安装jenv管理JDK版本的详细步骤

《在macOS上安装jenv管理JDK版本的详细步骤》jEnv是一个命令行工具,正如它的官网所宣称的那样,它是来让你忘记怎么配置JAVA_HOME环境变量的神队友,:本文主要介绍在macOS上安装... 目录前言安装 jenv添加 JDK 版本到 jenv切换 JDK 版本总结前言China编程在开发 Java

Spring Boot Actuator应用监控与管理的详细步骤

《SpringBootActuator应用监控与管理的详细步骤》SpringBootActuator是SpringBoot的监控工具,提供健康检查、性能指标、日志管理等核心功能,支持自定义和扩展端... 目录一、 Spring Boot Actuator 概述二、 集成 Spring Boot Actuat

Spring Boot配置和使用两个数据源的实现步骤

《SpringBoot配置和使用两个数据源的实现步骤》本文详解SpringBoot配置双数据源方法,包含配置文件设置、Bean创建、事务管理器配置及@Qualifier注解使用,强调主数据源标记、代... 目录Spring Boot配置和使用两个数据源技术背景实现步骤1. 配置数据源信息2. 创建数据源Be

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自

MySQL进行数据库审计的详细步骤和示例代码

《MySQL进行数据库审计的详细步骤和示例代码》数据库审计通过触发器、内置功能及第三方工具记录和监控数据库活动,确保安全、完整与合规,Java代码实现自动化日志记录,整合分析系统提升监控效率,本文给大... 目录一、数据库审计的基本概念二、使用触发器进行数据库审计1. 创建审计表2. 创建触发器三、Java