日常调试代码,日志输出是最常用的方法之一,而且对它的使用往往是一开始写的时候就顺手引入了,随着代码的增多,以及调试观测方面的要求的提升。未必会很容易就能彻头彻尾地把日志的使用全局换掉。因此我想,如果能有一种方法,把系统自带的 android.util.Log
类自动扩展,加入一些需要的功能,多好。最简单实用的就是,给它增加能够输出到文件的能力。
大概查看了一下,比较靠谱的方法,恐怕就是 hook 住该类中的 public static native int println_native(int bufID, int priority, String tag, String msg);
方法了。其它的输出方法,最后万流归宗,都会汇集到这个方法里来。
由此就好寻找合适的 hook 库了。国人于此兴趣盎然,此起彼伏。,不过要找一个比较完美的,却也一时难以辨别出,需要看相关的文章和介绍。以下几篇文章用以备忘。
- 《Android Java 层实现 hook 替换 method》,2018 年 9 月,时间上较早了(文中顺便给出了 Unsafe 和 Memory 的 wrapper), 说的是 epic 里的方法;
- 《ART 上的动态 Java 方法 hook 框架》,2020 年 4 月,文中有几个常见 hook 框架的简单比较介绍。一个小朋友写的,今年似乎才 17 岁,不知道会不会成为下一个罗迪,他自己的项目是 Pine;
- 《一种通用超简单的 Android Java Native 方法 Hook》,2021 年 2 月,相关项目是 fake-linker。