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

相关推荐
daidaidaiyu1 小时前
Jetlinks 物联网平台 开源版学习源码分析
java·mqtt·rxjava·tcp
安卓理事人2 小时前
安卓LinkedBlockingQueue消息队列
android
万能的小裴同学3 小时前
Android M3U8视频播放器
android·音视频
q***57744 小时前
MySql的慢查询(慢日志)
android·mysql·adb
JavaNoober4 小时前
Android 前台服务 "Bad Notification" 崩溃机制分析文档
android
城东米粉儿5 小时前
关于ObjectAnimator
android
zhangphil6 小时前
Android渲染线程Render Thread的RenderNode与DisplayList,引用Bitmap及Open GL纹理上传GPU
android
火柴就是我7 小时前
从头写一个自己的app
android·前端·flutter
lichong9518 小时前
XLog debug 开启打印日志,release 关闭打印日志
android·java·前端
用户69371750013848 小时前
14.Kotlin 类:类的形态(一):抽象类 (Abstract Class)
android·后端·kotlin