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

相关文章

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

Spring 依赖注入与循环依赖总结

《Spring依赖注入与循环依赖总结》这篇文章给大家介绍Spring依赖注入与循环依赖总结篇,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Spring 三级缓存解决循环依赖1. 创建UserService原始对象2. 将原始对象包装成工

SpringBoot路径映射配置的实现步骤

《SpringBoot路径映射配置的实现步骤》本文介绍了如何在SpringBoot项目中配置路径映射,使得除static目录外的资源可被访问,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一... 目录SpringBoot路径映射补:springboot 配置虚拟路径映射 @RequestMapp

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模