android如何开发流量监控软件

66人阅读 评论(0) 收藏 举报

最近在测试中经常要去查看一个进程的流量。所以了解了一下这方面的知识!在此总结一下

Android流量监控主要是有两种方法:

一.抓包

这个方法获取的流量更加精准,但是难度应该大点。本人没有了解过,所以在此略过。

二.读取linux本地文件

Android是基于linux的一个操作系统。

在Android中,你用Root Explorer去查看系统文件的话,与流量监控相关的会有这么几个文件



/proc/net/dev这个文件中具体记录的暂时不是非常清楚,可能是整个系统的一个流量情况。


/proc/uid_stat/%d" 和"/proc/uid_stat/%d" %d为进程的UID。这个文件里只有两项数据tcp_rcv和tcp_snd。

看命名大家应该就能看出代表什么,一个代表总的接受字节数,一个代表总的发送字节数。


这两个文件为非标准linux内核文件,由android内核层/kernel/net/Socket.c 的__sock_sendmsg函数负责写入,用户层套接字通信在内核层最终会调用此函数 (包括本地套接字和网络套接字)。

而Android在2.3之前是没有封装响应的流量监控API的。在2.3之后呢,把数据流量监控封装到了Android.net.TrafficStats类中。其原理就是读取上文提到的那几处文件。其中有的方法也是读取的别的文件。

其主要的方法

static long getMobileRxBytes()//获取通过Mobile连接收到的字节总数,但不包含WiFi
static long getMobileRxPackets()//获取Mobile连接收到的数据包总数
static long getMobileTxBytes()//Mobile发送的总字节数
static long getMobileTxPackets()//Mobile发送的总数据包数
static long getTotalRxBytes()//获取总的接受字节数,包含Mobile和WiFi等
static long getTotalRxPackets()//总的接受数据包数,包含Mobile和WiFi等
static long getTotalTxBytes()//总的发送字节数,包含Mobile和WiFi等
static long getTotalTxPackets()//发送的总数据包数,包含Mobile和WiFi等
static long getUidRxBytes(int uid)//获取某个网络UID的接受字节数
static long getUidTxBytes(int uid) //获取某个网络UID的发送字节数

返回类型均为long型,如果返回等于-1代表 UNSUPPORTED 当前设备不支持统计,可能是因为系统版本低。

getUidRxBytes(int uid)此方法就是根据uid去查找系统中响应的文件,并读取响应的值。


这其中可能遇到的问题是:没有wifi的情况下,各进程获得的getUidRxBytes之和与getMobileRxBytes所返回的值不相等。原因在于getUidRxBytes使读取上文提到的文件。而getMobileRxBytes读取的是sys/class/net/rmnet0/statistics/rx_bytessys/class/net/ppp0/statistics/rx_bytes。这俩文件。而且在getUidRxBytes返回的值中包含了本地通信的流量,比如本地进程间的socket通信。所以这两个值加起来有所出入!


更多相关文章

  1. 开发 Standalone Android(安卓)Java 应用程序
  2. 深入浅出 - Android系统移植与平台开发(十)- Android编译系统与定
  3. Android读取assets目录下文件数据内容
  4. Android布局文件中控件的高度与宽度属性设置
  5. 熟悉Android打包编译的流程
  6. Android应用程序进程启动过程的源代码分析
  7. Android(安卓)AOSP基础(三)Android系统源码的整编和单编
  8. android 问题总结
  9. Android编译环境

随机推荐

  1. android之ImageView
  2. 【Android FFMPEG 开发】Android Studio
  3. Android Afianl框架(序)
  4. Android水面落叶动态壁纸源码及分析 附下
  5. Android中的Handler:接受子线程发送的数
  6. 增加android模拟器的内存大小
  7. Android工程下面没有gen目录
  8. [置顶] android studio在svn中ignore的文
  9. Android Touch事件分发机制详解之由点击
  10. Android Activity之启动其他Activity并返