Hello大家好,我是拉法!
之前给大家分享过solox的流量指标是如何计算的,但是呢这只是冰山一角,而这篇文章给大家详细的介绍一下Android流量的各种计算方法。
solox源码:https://github.com/smart-test-ti/SoloX
更多精彩文章,请关注拉法的wx公众号“智测PLUS”
一、/proc/pid/net/dev
adb命令:adb shell cat /proc/pid/net/dev 得到
Inter-| Receive | Transmit
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
rmnet4: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
rmnet_tun03: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
rmnet_r_ims01: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
rmnet_tun02: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
dummy0: 0 0 0 0 0 0 0 0 1610 23 0 0 0 0 0 0
rmnet2: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
rmnet_tun11: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
rmnet_ims00: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
rmnet_tun10: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
rmnet_emc0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
rmnet_tun13: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
rmnet0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
rmnet_tun00: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
rmnet_tun04: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
rmnet5: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
wlan0: 1241518561 840807 0 0 0 0 0 7 7225770 73525 0 6 0 0 0 0
rmnet_r_ims00: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
rmnet3: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
rmnet_tun01: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
sit0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
rmnet_tun14: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ip_vti0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ip6tnl0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
rmnet1: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ip6_vti0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
rmnet_r_ims11: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
rmnet_r_ims10: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
rmnet6: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
rmnet_tun12: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
lo: 3796620 292 0 0 0 0 0 0 3796620 292 0 0 0 0 0 0
rmnet_ims10: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
其中wlan0表示wifi流量,rmnet0表示sim卡流量(有些机型是用rmnet_data0\rmnet_ipa0)
注意:这种方法经过测试等到的是整机的流量,不是app的。很奇怪这个文件需要指定pid。
二、/sys/class/net
/sys/class/net中实际给出了实际设备统计数据的软链:
找到相关类别的目录,在其子目录statistics下游可以通过rx_bytes和tx_bytes查看收发流量:
注意:这种方法经过测试等到的是整机的流量,不是app的
三、/proc/uid_stat/{uid}
和前两种方式不同,这种方式可以获取不同uid的网络流量数据。
获取uid的方式有多种,可以使用下面这种
adb shell dumpsys package
结果中在 Package: 段中,userId= 后的即为应用的UID
获取到UID后,可以进入/proc/uid_stat/{uid}目录,通过tcp_rcv 和 tcp_snd获取对应流量信息。
存在的问题是:
只针对TCP协议网络的消耗统计
高版本机型上不存在该路径,在Android 4.3.1 及之后的版本中,该路径都不存在了
四、/proc/net/xt_qtaguid/stats
UID的获取和上面相同
adb shell cat /proc/net/xt_qtaguid/stats | findstr {uid}
其中第6列和第8列分别是rx_bytes和tx_bytes包含tcp、udp等所有网络流量统计
由于一个uid可以对应多个进程,所以这几行流量累加求和就是APP的流量消耗。
目前发现这种方式在高版本的机型中也不适用了,该文件不存在。
最后放一个图给大家总结一下上面的几种方法的区别