-
获取被测试App的UID:
原理:执行adb Shell读取/data/system/packages.list,并通过apk的找到对应的UID
例子:cat /data/system/packages.list | grep com.gift.android
输出值:com.gift.android 10055 0 /data/data/com.gift.android default 1028,1015,1023,3003,3002,3001
其中10055即为App的UID -
获得App的接收流量(tcp_rcv)
原理:执行adb Shell读取/proc/uid_stat//tcp_rcv,其中为被测试App的UID
例子:cat /proc/uid_stat/10055/tcp_rcv
输出值:1566512
1566512即为接收流量的值 -
获得App的发送流量(tcp_snd)
原理:执行adb Shell读取/proc/uid_stat//tcp_snd,其中为被测试App的UID
例子:cat /proc/uid_stat/10055/tcp_snd
输出值:486847
486847即为发送流量的值 -
总体的流量数值计算
采集到前后两次流量数值后,即可计算得到某段时间内耗费的总流量。
例子
root@android:/ # cat /proc/uid_stat/10055/tcp_rcv
1566512
root@android:/ # cat /proc/uid_stat/10055/tcp_snd
486847
--- 在app上执行某些操作----
root@android:/ # cat /proc/uid_stat/10055/tcp_rcv
1978338
root@android:/ # cat /proc/uid_stat/10055/tcp_snd
548128
计算:该端时间内消耗总流量 = (548128 + 1978338) - (486847 + 1566512) bytes -
其他流量测法,通过 tcpdump 抓包,再通过 wireshake 直接读取包信息来获得流量。
-
总内存获取
原理:adb shell读取/proc/meminfo
例子: cat /proc/meminfo
MemFree: 560352 kB
Buffers: 136576 kB
Cached: 418460 kB
Active: 626888 kB
Inactive: 314720 kB
Active(anon): 354828 kB
Inactive(anon): 39584 kB
Active(file): 272060 kB
Inactive(file): 275136 kB
Dirty: 52 kB
Writeback: 0 kB
Mapped: 135096 kB
Slab: 23068 kB -
被测试App进程内存
原理:adb shell执行 dumpsys meminfo 其中为被测进程的PID
例子:dumpsys meminfo 15045
| | Pss Total | Private Dirty | Private Clean | Swapped Dirty | Heap Size | Heap Alloc | Heap Free | | ----------- | ----------- | ----------- | ----------- | ----------- | ----------- | ----------- | ----------- | | Native Heap | 5061 | 5028 | 0 | 0 | 16480 | 13207 | 124 | | Dalvik Heap | 28780 | 40972 | 0 | 0 | 41156 | 40069 | 1087 |
- CPU获取
原理:dumpsy meminfo取进程内存时额外CPU开销大,会导致dumpsys cpu不准;系统自带top命令单次获取数据时间长且精度不够,利用busybox获取CPU使用情况(在获取内存数据前先取CPU),执行adb Shell命令:busybox top -b -n 1
例子:
adb push busybox /data/local/tmp
adb shell chmod 755 /data/local/tmp/busybox
原理:adb shell执行,dumpsys window w|grep mFocusedApp|busybox awk '{print $5}'|busybox tr -d '}'
原理:adb shell执行,date +%Y/%m/%d" "%H:%M:%S
原理:adb shell执行,busybox awk -F. 'NR==1{print $1}' /proc/uptime 依此为基础来分析执行监控的时刻及准确的获取数据间隔