因之前性能脚本针对流量统计在某些机型如(红米 note)上不支持,故对流量部分做了调研和改进
1、 之前统计是 cat proc/uid_stat/(uid#)/tcp_rcv 路径下

adb shell cat proc/uid_stat/(uid#)/tcp_rcv
adb shell cat proc/uid_stat/(uid#)/tcp_snd

对二者求和,劣势是只针对 tcp 协议网络的消耗统计,且在某些机型上不存在该路径。
故进行了优化。

2、 经调查/proc/net/xt_qtaguid/stats 基本覆盖目前所有机型且统计流量全面

adb shell cat /proc/net/xt_qtaguid/stats | grep (uid#)

如: adb shell cat /proc/net/xt_qtaguid/stats | grep 10127

48 wlan0 0x0 10127 0 316574 2279 472562 3651 316574 2279 0 0 0 0 472562 3651 0 0 0 0
49 wlan0 0x0 10127 1 6172960 4936 415951 5215 6172960 4936 0 0 0 0 415951 5215 0 0 0 0
50 wlan0 0x3792d5b400000000 10127 0 29678 208 32168 296 29678 208 0 0 0 0 32168 296 0 0 0 0
51 wlan0 0x3792d5b400000000 10127 1 226170 222 25745 265 226170 222 0 0 0 0 25745 265 0 0 0 0
56 wlan0 0xfa1dcc4b00000000 10127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
57 wlan0 0xfa1dcc4b00000000 10127 1 3014885 2127 139857 2117 3014885 2127 0 0 0 0 139857 2117 0 0 0 0

其中第 6 和 8 列为 rx_bytes(接收数据)和 tx_bytes(传输数据)包含 tcp,udp 等所有网络流量传输的统计。
[具体参考 url:​http://stackoverflow.com/questions/12904809/tracking-an-applications-network-statistics-netstats-using-adb]


添加了代码,论坛的兄弟姐妹们可以帮忙参考一下可行性如何

def get_networkTraffic(self):
    """基于UID获取App的网络流量的方法
       从/proc/net/xt_qtaguid/stats获取网络流量统计,进行判断,不存在使用之前的方法。
    """

    flag_net = self.adb.shell('{0} cat /proc/net/xt_qtaguid/stats'.format(BUSYBOX_PATH),timeout=TIMEOUT)
    # print flag_net
    if "No such file or directory" not in flag_net:
        list_rx = [] # 接收网络数据流量列表
        list_tx = [] # 发送网络数据流量列表
        str_uid_net_stats = self.adb.shell('{0} cat /proc/net/xt_qtaguid/stats|{0} grep {1}'.format(BUSYBOX_PATH,self.strUID),timeout=ADB_TIMEOUT)
        # print str_uid_net_stats
        try:
            for item in str_uid_net_stats.splitlines():
                rx_bytes = item.split()[5] # 接收网络数据流量
                tx_bytes = item.split()[7] # 发送网络数据流量
                list_rx.append(int(rx_bytes))
                list_tx.append(int(tx_bytes))
            # print list_rx, sum(list_rx)
            floatTotalNetTraffic = (sum(list_rx) + sum(list_tx))/1024.0/1024.0
            floatTotalNetTraffic = round(floatTotalNetTraffic,4)
            return floatTotalNetTraffic
        except:
            print "[ERROR]: cannot get the /proc/net/xt_qtaguid/stats, return 0.0"
            return 0.0

    else:
        strTotalTxBytes = self.adb.shell('{0} cat /proc/uid_stat/{1}/tcp_snd'.format(BUSYBOX_PATH,self.strUID),timeout=TIMEOUT)
        strTotalRxBytes = self.adb.shell('{0} cat /proc/uid_stat/{1}/tcp_rcv'.format(BUSYBOX_PATH,self.strUID),timeout=TIMEOUT)
        try:
            floatTotalTraffic = (int(strTotalTxBytes) + int(strTotalRxBytes))/1024.0/1024.0
            floatTotalTraffic = round(floatTotalTraffic,4)
            return floatTotalTraffic
        except:
            return 0.0  


↙↙↙阅读原文可查看相关链接,并与作者交流