文档章节

使用ADB命令获取APP 消耗的流量

Mstart
 Mstart
发布于 2015/10/08 10:08
字数 592
阅读 94
收藏 1

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.util.ArrayList;

import java.util.List;



public class Test04 {

//获取流量

public static void main(String[] args) {

adb();

//循环获取数据

for (int i = 0; i < 60; i++) {

flow1();

}

}

//运行monkey  com.netease.newsreader.activity  对应的APP名称

public static void adb() {

String command1 ="adb shell monkey -p com.netease.newsreader.activity -s 500 -v 2000";

Runtime runtime = Runtime.getRuntime();

try {

runtime.exec(command1);

} catch (Exception e) {

System.out.println("[Error][pressmonkey]" + e.getMessage());

}

}


public static  void flow1(){

//休眠1S获取数据

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}


String command2 = "adb shell ps";

String str="com.netease.newsreader.activity";

String SIBaseVersion = " ";

String SIBaseVersion3 = " ";

String SIBaseVersion4= " ";

//WLAN流量和

int FWlan=0;

//3/4G网流量和

int FNet=0;

try {

Runtime runtime = Runtime.getRuntime();

Process getSIBaseVersionProcess2 = runtime.exec(command2);

BufferedReader bufferedReader = new BufferedReader(

new InputStreamReader(

getSIBaseVersionProcess2.getInputStream()));

while ((SIBaseVersion = bufferedReader.readLine()) != null) {

//将字符串数组重新添加到list集合中,在从集合中获取相应的值

List<String> tmp = new ArrayList<String>(); 

if ( isHave(SIBaseVersion, str) ) {

// String s = SIBaseVersion;

// 截取需要的字符串

String[] array = SIBaseVersion.split(" ");

for (int i = 0; i < array.length; i++) {

if (array[i].length() != 0) {

tmp.add(array[i]);

}

}

// 取list集合中的数据

String H1 = tmp.get(1);

// 转换成整型

int Pid = Integer.parseInt(H1);

String command3 = "adb shell cat /proc/" + Pid + "/status | grep Uid";

Process getSIBaseVersionProcess3 = runtime.exec(command3);

BufferedReader bufferedReader3 = new BufferedReader(

new InputStreamReader(getSIBaseVersionProcess3.getInputStream()));

while (((SIBaseVersion3 = bufferedReader3.readLine()) != null)) {

List<String>tmp2 = new ArrayList<String>();

if (!(SIBaseVersion3.equals(""))) {

String[] array1 = SIBaseVersion3.split("\t");

for (int i = 0; i < array1.length; i++) {

tmp2.add(array1[i]);

}

// 取list集合中的数据

String U1 = tmp2.get(1);

// 转换成整型

int Uid = Integer.parseInt(U1);

String command4 = "adb shell cat /proc/net/xt_qtaguid/stats | grep " + Uid;

Process getSIBaseVersionProcess4 = runtime.exec(command4);

BufferedReader bufferedReader4 = new BufferedReader(

new InputStreamReader(getSIBaseVersionProcess4.getInputStream()));

while ((SIBaseVersion4 = bufferedReader4.readLine()) != null) {

String rmnet = "rmnet0";

String wlan = "wlan0";

List<String> tmp4 = new ArrayList<String>(); 

if (isHave(SIBaseVersion4, wlan)) {

String[] Wlanarray = SIBaseVersion4.split(" ");

for (int i = 0; i < Wlanarray.length; i++) {

if (Wlanarray[i].length() != 0) {

tmp4.add(Wlanarray[i]);

}

}

//挑选自己需要的数据

if (tmp4.get(2).equals("0x0")&&tmp4.get(4).equals("1")) {

String Wlan1 =tmp4.get(5);

String Wlan2 =tmp4.get(7);

// //转换成整型

double WLAN1 = Double.parseDouble(Wlan1);

double  WLAN2 = Double.parseDouble(Wlan2);

double W = WLAN1+WLAN2;

FWlan+=W;

}

List<String> tmp3 = new ArrayList<String>(); 

if (isHave(SIBaseVersion4, rmnet)) {

String[] Netarray = SIBaseVersion4.split(" ");

for (int i = 0; i < Netarray.length; i++) {

if (Netarray[i].length() != 0) {

tmp3.add(Netarray[i]);

}

}

if (tmp3.get(2).equals("0x0")&&tmp3.get(4).equals("1")) {

String Net1 = tmp3.get(5);

String Net2 = tmp3.get(7);

 double NET1=Double.parseDouble(Net1);

double NET2 = Double.parseDouble(Net2);

double N=NET1+NET2;

FNet+=N;

 System.out.println("FNet="+FNet);

}

}

}

//输出相应流量值

System.err.println("FWlan2 ="+1.0*FWlan/1024+" KB");

System.err.println("FNET2 ="+1.0*FNet/1024+" KB");

bufferedReader4.close();

getSIBaseVersionProcess4.destroy();

}


}

bufferedReader3.close();

getSIBaseVersionProcess3.destroy();

}

}

bufferedReader.close();

getSIBaseVersionProcess2.destroy();

} catch (Exception e) {

System.out.println("[Error][getSIBaseVersion]" + e.getMessage());

}


}



public static boolean isHave(String strs, String s) {

for (int i = 0; i < strs.length(); i++) {

if (strs.indexOf(s) != -1) {

return true;

}

}

return false;

}


}



© 著作权归作者所有

Mstart
粉丝 10
博文 62
码字总数 17890
作品 0
南通
程序员
私信 提问
Android性能测试(内存、cpu、fps、流量、GPU、电量)——adb篇

adb 常用命令 获取连接设备号:adb devices 列出设备所有已安装的包名 (不需root权限) adb shell “pm list packages”,可以加上grep 进行筛选(windows系统使用findstr /i "xxxx" 或者 fi...

某杰
2018/05/14
0
0
腾讯视频国际版(Android)电量测试方法研究与总结

本文由云+社区发表 作者:腾讯移动品质中心TMQ 1、研究背景: 在2017年Google I/O大会上,Google发布了Google Play管理中心的新功能:Android vitals。当app在大量设备上运行时,Android vit...

腾讯云加社区
03/18
0
0
安卓性能监控工具介绍(一)----数据采集

工具简单介绍 前阵子公司发布一款新的安卓应用,第一个版本由于时间问题仅仅测试了主要功能,性能一点没测,导致在发布应用市场遇到了很大麻烦。在查看百度给的监测报告时,发现报告主要包括...

迈阿密小白
2017/11/10
0
0
手机APP性能测试工具iTest3.0

小伙伴们,你会经常为手机卡、死机、或者自动关机而恼火么?想知道为什么手机的内存总不够用么?想知道为什么手机的流量没怎么用就超了么?想知道到底什么应用耗尽了手机的电量么? 给你推荐...

源远流长14
2014/11/06
1K
1
Android Activity生命周期介绍及启动时间抓取

一、Activity启动流程简介: 1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态。 2.当前Activity被其他Activity覆盖或被锁屏:系统...

孟飞阳
2016/06/16
491
0

没有更多内容

加载失败,请刷新页面

加载更多

PCB设计-Allegro软件入门系列-铺铜操作(下)

铺铜是PCB很常见的操作,PCB的敷铜一般都是覆地铜,增大地线面积,有利于地线阻抗降低,使电源和信号传输稳定,在高频的信号线附近敷铜,可大大减少电磁辐射干扰,起屏蔽作用。 本讲讲解啊一...

demyar
22分钟前
3
0
如何通过WASI SDK 在Linux上编译ZXing C++

Mozilla在今年三月份的时候公布了WASI。WASI的目标就是让WebAssembly在任何地方都可以运行,而不仅仅像现在这样只能运行在Node.js和Web浏览器中。WASI目前依然处于初级阶段,这篇文章分享下如...

yushulx
24分钟前
3
0
.Net界面开发神器—DevExpress官方汉化包免费下载!还在等什么?

点击获取DevExpress v19.1.7新版试用下载 DevExpress Localization Service允许您创建一组自定义的附属程序集,要将语言包添加到程序集中,请查看本文中为大家列出的对应版本的汉化包,下载并...

FILA6666
24分钟前
4
0
php生成二维码

        header('Content-Type: image/png');        //清除缓冲区,防止之前面不知道的情况下被加头部信息导致不显示图片内容        ob_clean();        $...

横着走的螃蟹
29分钟前
3
0
伪类和伪元素

伪类和伪元素 伪类和伪元素,对于绝大多数同学来说,都是耳熟能详的名字,但确实又有很多人搞不清楚它们之间的区别,以致于混淆概念。而当概念都混淆的时候,也往往意味着你不会经常使用它,...

不负好时光
31分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部