安卓:如何以编程方式捕获应用程序的网络流量?

5
我目前正在开发一个库,使QA或开发人员能够调试应用程序中的网络流量。我们目前使用OKHttp,并且我知道如何创建拦截器并将所有请求数据发送到该库,以便开发人员或QA可以查看此类数据(有效负载/ URL /大小/响应代码/持续时间等)。但是,我想创建一个更通用的解决方案,监听HTTP流量甚至TCP流量,然后从那里开始。不过,我找不到起点。我知道Firebase Performance可以做到这一点,但仍然无法找到API或任何监听此类流量的方式。
如果Google的Firebase Performance团队中有人可以分享如何实现它的信息(如果这不是商业机密),我会非常感激。
我发现了这个解决方案:https://github.com/cyruliu/Sensitive_API_Monitor/blob/master/app/src/main/java/com/android/reverse/apimonitor/NetWorkHook.java,但是使用反射看起来有些糟糕,我希望能找到更好的方法。
1个回答

4
简短的回答是:如果不代理整个设备,这是不可能的。
特别针对OkHttp3,我在此编写了一个库:https://github.com/shehabic/sherlock ,它实现了一个拦截器,在每次打开应用程序时创建一个新会话并捕获网络请求。您还可以有多个会话,它添加了一个浮动图标,帮助您访问会话和请求历史记录以及一些导出功能,此外,它还添加了一个辅助启动器图标,您可以使用它来访问捕获的请求而不中断应用程序的进程。
关于Firebase性能,所有的神奇都在Firebase-Perf Gradle插件中;为了简化它,它扫描项目的代码并将直接调用OkHttpClient的调用替换为通过自己的FirebaseOkHttpClient代理,从那里他们获得所有细节,即使对于https请求也是如此,因为它们成为http客户端。
希望这能为未来的某些人节省时间。

如果有其他人提供了解决问题的答案,我会将其标记为正确答案。 - Shehabic
也许可以使用Android的VpnService来实现这个功能? - support_ms

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接