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