ADB监控Android 10及以上系统的App进程流量数据问题?

Android 10开始,抛弃xt_qtaguid,采用ebpf记录网络流量数据,所以无法通过/proc/net/xt_qtaguid/stats文件获取进程流量数据了。目前发现通过adb有4种方式获取进程流量数据:

  1. 读取/proc/uid_stat/$uid/tcp_rcv和/proc/uid_stat/$uid/tcp_snd:兼容性差,很多手机没有这两个文件;
  2. 读取/proc/{pid}/net/dev/:{pid}会迷惑人,以为是进程相关的流量数据,但经过测试发现该文件记录的是网卡的流量数据,无法得到进程的流量数据(如下图所示);
  3. 读取/proc/net/xt_qtaguid/stats: 该方式可以获取进程流量数据,但是只能在Android 9.0及以下的系统中使用
  4. 读取/sys/fs/bpf/traffic_uid_stats_map: 该方式应该可以在Android 10及以上的系统中获取进程流量数据,但是需要root权限

而PerfDog工具却可以监控未root的Android 10系统手机的App进程流量,经过测试发现,PerfDog启动后手机上会产生“PerfDogServer”和“PerfDogServerExt”两个进程,因此猜测它应该是通过手机端的后台程序调用系统接口(如TrafficStats和NetworkStatsManager 接口)获取相关数据(如下图所示),或者是否还有其它方式,希望大佬指教一下。

阅读 2.7k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题