【安卓笔记】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技术

下面请看代码:

java 复制代码
public void hookConfig() {
    RxJavaPlugins.setOnObservableAssembly(new Function<Observable, Observable>() {
        @Override
        public 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>() {
        @Override
        public void subscribe(@NonNull ObservableEmitter<Object> emitter) throws Throwable {
            emitter.onNext("data");
        }
    })
            .map( // 此处为map操作符
                new Function<Object, Boolean>() {
                @Override
                public Boolean apply(Object o) throws Throwable {
                    return true;
                }
            })
            .subscribe(new Observer<Boolean>() {
                @Override
                public void onSubscribe(@NonNull Disposable d) {

                }

                @Override
                public void onNext(@NonNull Boolean aBoolean) {

                }

                @Override
                public void onError(@NonNull Throwable e) {

                }

                @Override
                public 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

相关推荐
ganshenml41 分钟前
【Android】 开发四角版本全解析:AS、AGP、Gradle 与 JDK 的配套关系
android·java·开发语言
我命由我1234542 分钟前
Kotlin 运算符 - == 运算符与 === 运算符
android·java·开发语言·java-ee·kotlin·android studio·android-studio
摘星编程2 小时前
【RAG+LLM实战指南】如何用检索增强生成破解AI幻觉难题?
android·人工智能
火柴就是我2 小时前
学习一些常用的混合模式之BlendMode. dst
android·flutter
遥不可及zzz2 小时前
解决 Google Play 提示的 16KB 内存页面大小对齐问题:通过升级 Android Gradle 插件(AGP)
android
SmartRadio3 小时前
在MT8791 5G硬件平台上舍弃安卓系统-运行OpenWRT系统
android·5g·mt8791
虫小宝3 小时前
导购APP高可用数据库设计:主从分离与分库分表在返利系统中的应用
android·数据库
我命由我123454 小时前
Android Jetpack Compose - TopAppBar、BottomAppBar、Scaffold
android·java·java-ee·kotlin·android studio·android jetpack·android-studio
REDcker4 小时前
Android WebView 升级 - WebViewUpgrade 库使用详解
android·华为·harmonyos·webview
我命由我123454 小时前
Android Studio - Android Studio 去除 import 的未使用的类
android·java·ide·学习·java-ee·android studio·学习方法