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

【安卓笔记】RxJava的Hook机制,整体拦截器

0. 环境:

电脑:Windows10

Android Studio: 2024.3.2

编程语言: Java

Gradle version:8.11.1

Compile Sdk Version:35

Java 版本:Java11

1. 使用场景

整个项目都是用了RxJava,需要对 整个/部分 项目的RxJava进行监听(拦截)

就会使用到Hook技术

下面请看代码:

public void hookConfig() {RxJavaPlugins.setOnObservableAssembly(new Function<Observable, Observable>() {@Overridepublic Observable apply(Observable observable) throws Throwable {// 此时,会对全局的操作符都进行操作// 可以是打印日志,可以使记录时间,也可以debug// 还可以通过if判断,对部分操作符进行操作、对部分操作符忽略System.out.println("running timestamp: ");System.out.println(System.currentTimeMillis()); // 例如,打印时间return observable;// 此处必须要有返回值,不能为null,否则会报NPE}});
}public void testHook() {Observable.create( // 此处为create操作符new ObservableOnSubscribe<Object>() {@Overridepublic void subscribe(@NonNull ObservableEmitter<Object> emitter) throws Throwable {emitter.onNext("data");}}).map( // 此处为map操作符new Function<Object, Boolean>() {@Overridepublic Boolean apply(Object o) throws Throwable {return true;}}).subscribe(new Observer<Boolean>() {@Overridepublic void onSubscribe(@NonNull Disposable d) {}@Overridepublic void onNext(@NonNull Boolean aBoolean) {}@Overridepublic void onError(@NonNull Throwable e) {}@Overridepublic void onComplete() {}});
}

可以看到,总共有两个操作符:.create 和 .map

同时,查看打印日志:

2025-07-19 19:05:24.281  2529-2529  System.out              com.liosen.androidnote               I  running timestamp: 
2025-07-19 19:05:24.281  2529-2529  System.out              com.liosen.androidnote               I  1752923124281
2025-07-19 19:05:24.281  2529-2529  System.out              com.liosen.androidnote               I  running timestamp: 
2025-07-19 19:05:24.281  2529-2529  System.out              com.liosen.androidnote               I  1752923124281

确实打印了两次日志。

说明hook已经完成。

比较简单。

可以根据每个人的业务不同,进行修改

2. 写在最后

本篇文章主要是为了解决:全局拦截,学会Hook机制

关于RxJava,可以查看我其他文章:

【安卓笔记】RxJava的使用+修改功能+搭配retrofit+RxView防快速点击:https://blog.csdn.net/liosen/article/details/149340103

【安卓笔记】RxJava之flatMap的使用:https://blog.csdn.net/liosen/article/details/149343166

【安卓笔记】RxJava的onNextDo的使用:https://blog.csdn.net/liosen/article/details/149343321

【安卓笔记】RxJava的Hook机制,整体拦截器:https://blog.csdn.net/liosen/article/details/149467298

http://www.xdnf.cn/news/15836.html

相关文章:

  • AWS Partner: Sales Accreditation (Business)
  • 从零构建监控系统:先“完美设计”还是先“敏捷迭代”?
  • 智能点餐推荐网站,解决选择困难
  • AE PDW2200电源射频手侧使用安装说明含电路图
  • 谷歌地球与ArcGIS Pro查看三维地形
  • 深入解析Linux文件描述符:原理、机制与应用实践
  • 使用 C# 实现移动加权平均(Weighted Moving Average)算法
  • js中 new Set()实例的各个api使用
  • Java学习------ConcurrentHashMap
  • Honeywell霍尼韦尔DV-10 变速器放大器 输入 15-28 VDC,输出 +/- 10VDC 060-6881-02
  • 【53】MFC入门到精通——MFC串口助手(二)---通信版(发送数据 、发送文件、数据转换、清空发送区、打开/关闭文件),附源码
  • 软件维护全维度解析:从修复到进化的生命周期管理
  • mave手动下载某个依赖,到本地库
  • IP协议深入理解
  • C语言实战:超级玛丽游戏
  • 组件-多行文本省略-展开收起
  • 百炼MCP与IoT实战(三):手搓自定义MCP Server与阿里云FC配置
  • 40+个常用的Linux指令——上
  • halcon模版匹配方向的研究
  • ts学习2
  • 飞算科技:以创新科技引领数字化变革,旗下飞算 JavaAI 成开发利器
  • 人脸检测算法——SCRFD
  • 可靠消息最终一致性分布式事务解决方案
  • 基础密码协议
  • Xilinx Zynq:一款适用于软件定义无线电的现代片上系统
  • 代理模式及优化
  • 手撕Spring底层系列之:Bean的生命周期
  • C++进阶-红黑树(难度较高)
  • Docker报错:No address associated with hostname
  • 广东省省考备考(第四十九天7.18)——判断推理:位置规律(听课后强化训练)