当前位置: 首页 > news >正文

LSPosed模块开发第一篇

安装LSPosed

设备pixel 3a Android 12 Magisk root 环境
LSPosed地址:
https://github.com/LSPosed/LSPosed
下载zygisk的,riru没效果
https://github.com/LSPosed/LSPosed/releases
在这里插入图片描述

下载完push 到手机,Magisk 安装模块
Magisk设置里面的Zygisk打开,重启手机,通知栏会显示LSPosed已加载,点击可以打开LSPosed管理器,或者直接解压上面的压缩包安装manager.apk。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

开发模块

  1. Androidstudio新建一个工程
  2. 添加依赖,app目录下的build.gradle文件添加
compileOnly "de.robv.android.xposed:api:82"
  1. 项目目录下的settings.gradle 添加 maven { url ‘https://api.xposed.info/’ }
dependencyResolutionManagement {repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)repositories {google()mavenCentral()maven { url 'https://api.xposed.info/' }}
}
  1. 修改AndroidManifest.xml中添加声明
    application下添加3个meta-data
 <!--        定义这是一个xposed模块--><meta-dataandroid:name="xposedmodule"android:value="true" /><!--     xposed 模块描述--><meta-dataandroid:name="xposeddescription"android:value="Hook Toast" /><!--   xposed 支持最小版本--><meta-dataandroid:name="xposedminversion"android:value="82" />
  1. main目录下新建assets目录,assets目录下新建文件xpsoed_init
    在xposed_init里面写入模块的入口;XposedBridge 从assets 目录中的xposed_init 文件中获取入口点。xposed_init文件中每行配置一个;
    例如:我这里新建一个类名为HookMain的类作为模块入口,
    那xposed_init里面就写上HookMain的路径:com.mycode.lsposedhooktoast.HookMain
  2. 编写hook模块代码
    入口类HookMain实现接口IXposedHookLoadPackage重写handleLoadPackage方法;
    然后在handleLoadPackage方法添加自己的逻辑代码;
    例如:我这里hook 系统的Toast事件,打印调用堆栈`
public class HookMain implements IXposedHookLoadPackage {final String TAG = HookMain.class.getSimpleName();@Overridepublic void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {//hook ToastClass<?> clazz = lpparam.classLoader.loadClass("android.widget.Toast");if (clazz!=null){XposedHelpers.findAndHookMethod(clazz, "show",new XC_MethodHook() {@Overrideprotected void afterHookedMethod(MethodHookParam param) throws Throwable {super.afterHookedMethod(param);try{throw new NullPointerException();}catch (Exception e){Log.i(TAG,"Toast show trace "+Log.getStackTraceString(e));}}});}}
}

运行LSPosed模块

安装后在LSPosed管理器里面找到模块,然后启用模块。
新建一个测试项目ToastDemo,写一个测试app弹窗Toast

 Toast.makeText(this,"This is a ToastTest",Toast.LENGTH_LONG).show();

在LSPosed管理器模块里面勾选上ToastDemo。
运行查看Log:
调用Toast.show的调用链就打印出来了
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Summernote 富文本编辑器的内容变成只读模式
  • 开源免费的wiki知识库
  • 服务器虚拟内存是什么?虚拟内存怎么设置?
  • 驰骋BPM RunSQL_Init SQL注入漏洞复现
  • 通过数组中元素或者key将数组拆分归类成新的二维数组
  • 轩轩游桂林
  • MySql-MySqlConnector
  • docker 部署 mysql8
  • 设计模式-单一职责模式
  • WPS excel 数据最小二乘法拟合
  • 4、命令式和声明式
  • Linux shell编程:监控进程CPU使用率并使用 perf 抓取高CPU进程信息
  • 学习前端面试知识
  • cnetos部署高可用以及七层负载均衡
  • git clone 大文件 eof 错误
  • 30秒的PHP代码片段(1)数组 - Array
  • create-react-app项目添加less配置
  • exif信息对照
  • JavaScript 基本功--面试宝典
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • Java教程_软件开发基础
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • Promise面试题,控制异步流程
  • python学习笔记 - ThreadLocal
  • Python学习笔记 字符串拼接
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • Vue2.x学习三:事件处理生命周期钩子
  • vue数据传递--我有特殊的实现技巧
  • vue总结
  • windows下如何用phpstorm同步测试服务器
  • 对象管理器(defineProperty)学习笔记
  • 给第三方使用接口的 URL 签名实现
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 聊一聊前端的监控
  • 深度学习中的信息论知识详解
  • 深入 Nginx 之配置篇
  • 通信类
  • 微信小程序--------语音识别(前端自己也能玩)
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • #define 用法
  • #include
  • #stm32驱动外设模块总结w5500模块
  • (4.10~4.16)
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (已解决)什么是vue导航守卫
  • (原)Matlab的svmtrain和svmclassify
  • (转)linux 命令大全
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .htaccess配置重写url引擎
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .NET 药厂业务系统 CPU爆高分析
  • .Net6使用WebSocket与前端进行通信
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】