大部分摘自:https://blog.csdn.net/baidu_21833433/article/details/63255182#commentBox
一、Android自帶統計功能(統計流量總數值)
proc/uid_stat/{UID}/tcp_snd和tcp_rcv
UID是每個app安裝時候分配的唯一編號用於識別該app.
tcp_snd:表示發送數據累計大小,單位是字節(上行或上傳)
tcp_rcv:表示接收到的數據累計大小(下行或下載)。
具體步驟:
(1)安裝被測APP到測試機,不啟動APP。
(2)通過包名獲取app的PID,再訪問/proc/{PID}/status文件查找app對應的UID;或者,使用adb連接到測試機,cat /data/system/packages.list | grep com.yftest.apk ---com.yftest.apk為包名,可以查看出該包的UID以及安裝位置等
(3)通過UID號加上100000號查看接收和發送的流量文件;或者,使用命令查看當前下行(下載)流量情況,cat /proc/uid_stat/UID號/tcp_rcv
(4)啟動APP到APP徹底啟動,cat /proc/uid_stat/UID號/tcp_rcv
(5)tcp_rcv代表下行流量,把tcp_rcv換為tcp_snd可以查看上行流量,cat /proc/uid_stat/UID號/tcp_snd
該方法優勢:簡單,容易使用,容易測出對應場景下上下行流量,容易封裝為腳本
劣勢:協議限制性,無法進行具體的剖析
二、Wireshark+tcpdump抓包分析
首先使用adb發送tcpdump文件到設備,如
adb push d:\tcpdump /data/local/tmp
tcpdump常見參數:
-i指定網卡(interface),any表示無限網卡;
-c指定接收的packets數量,接收完成后自動停止抓包;
-w xxx:抓取到的包存放路徑及存放格式。
-s(--snapshot-length)指定在每個packet中最多截取的字節數,設置為0時表示截取上限取默認值262144,默認抓包抓取長度是68字節,加上-s 0可以抓到完整的數據包;
-v/-vv/-vvv,指定輸出的詳細程度,針對流量測試,我們不需要非常詳盡的輸出數據,-v就可以了,抓包過程中顯示抓包的數量
su-c /data/local/tmp/tcpdump -v -i any -s 0 –c 3000 -w /sdcard/us.pcap
使用上方命令就會調用指定位置的tcpdump把抓包的數據保存到制定文件中
然后使用adb發送文件到PC本機
adb pull /sdcard/us.pcap D:/
使用wireshark打開抓取的pcap文件
使用過濾器過濾需要顯示的內容如:
ip.addr == 192.168.10.101
顯示源或者目標IP為192.168.10.101的相關信息。
可以按照時間順序查看具體的網絡通訊情況
包括源IP、目標IP、協議、長度、信息
可以根據此進行具體情況進行細節的分析。點擊統計---》捕獲文件屬性
使用“已顯示”下分組的數據*平均分組大小/1024即可計算出被過濾的數據的數據大小。
如上圖就是
260*503.5/1024=127.84
優勢:可以更深層次的判斷具體的網絡交互情況以定位網絡問題。
劣勢:成本較高,耗時較久,且不容易和場景事物或者操作結合。
當存在流量問題或者懷疑出現流量問題后使用tcpdump結合wireshark進行具體剖析
三、GT(隨身調)工具(直接調用android的api):
TrafficStats類是Android提供的一個流暢統計類,可以統計手機開機累計到現在使用的流量,也可以統計某個或者多個進程或者應用所使用流量,包括Wi-Fi和移動數據GPRS。
GT(隨身調)是APP的隨身調試平台,是直接運行在手機上的IDTE。可以使用GT對APP進行快速的性能測試(CPU、內存、流量、電量、幀率/流暢度等)、開發日志查看、Crash日志查看、網絡數據包的抓取、APP內部參數的調試、真機代碼耗時統計等。