前言
各位 这个工具是本人写的非常简陋体验也非常一般,大家手下留情,不要吐槽!能用上的拿去用吧!
工具下载地址:
64 位:
http://yunpan.taobao.com/s/1ZgCzvQlHbz
提取码:
ZV5odp
32 位:
http://yunpan.taobao.com/s/2kUMvT291UZ
提取码:
e1dyRp
工具说明
1,一定要是 Root 过的 Android 主流的手机
2,一定要有 Adb 环境(Android Debug Bridge)如果没有的话我文件里面放了
把这个文件夹 路径放到环境变量里面去,Path 下面哦
放完后 check 一下:
这样环境就 Ok 了
工具的原理
Cpu 取值:
adb shell top -n 1| grep "+PackageName
在代码怎么取呢?看下面
public static double Cpu(String PackageName) throws IOException {
double Cpu = 0;
try{
Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec("adb shell top -n 1| grep "+PackageName);
try {
if (proc.waitFor() != 0) {
System.err.println("exit value = " + proc.exitValue());
}
BufferedReader in = new BufferedReader(new InputStreamReader(
proc.getInputStream()));
StringBuffer stringBuffer = new StringBuffer();
String line = null;
while ((line = in.readLine()) != null) {
stringBuffer.append(line+" ");
}
String str1=stringBuffer.toString();
String str3=str1.substring(str1.indexOf(PackageName)-43,str1.indexOf(PackageName));
//System.out.println(str3);
String cpu= str3.substring(0,4);
cpu=cpu.trim();
Cpu=Double.parseDouble(cpu);
} catch (InterruptedException e) {
System.err.println(e);
}finally{
try {
proc.destroy();
} catch (Exception e2) {
}
}
}
catch (Exception StringIndexOutOfBoundsException)
{
System.out.print("请检查设备是否连接");
}
return Cpu;
}
内存取值:
adb shell dumpsys meminfo "+PackageName
public static double GetFlow(String PackageName) throws IOException {
double str3=0;
String Pid=PID(PackageName);
try{
Runtime runtime = Runtime.getRuntime();
/* Process proc2 = runtime.exec("");*/
Process proc = runtime.exec("adb shell cat /proc/"+Pid+"/net/dev");
try {
if (proc.waitFor() != 0) {
System.err.println("exit value = " + proc.exitValue());
//JOptionPane.showMessageDialog(new JFrame(), "哥们抱歉,好像出问题了!关掉重试吧!");
}
BufferedReader in = new BufferedReader(new InputStreamReader(
proc.getInputStream()));
StringBuffer stringBuffer = new StringBuffer();
String line = null;
while ((line = in.readLine()) != null) {
stringBuffer.append(line+" ");
}
String str1=stringBuffer.toString();
String str2=str1.substring(str1.indexOf("wlan0:"),str1.indexOf("wlan0:")+90);
//接收字节:
String str4=str2.substring(7,16);
str4 = str4.trim();
int b=Integer.parseInt(str4);
str3=b/1024;
//System.out.println(str3);
} catch (InterruptedException e) {
System.err.println(e);
}finally{
try {
proc.destroy();
} catch (Exception e2) {
}
}
}
catch (Exception StringIndexOutOfBoundsException)
{
//System.out.print("请检查设备是否连接");
}
return str3;
}
流量取值:
adb shell cat /proc/Pid/net/dev
public static double GetFlow(String PackageName) throws IOException {
double str3=0;
String Pid=PID(PackageName);
try{
Runtime runtime = Runtime.getRuntime();
/* Process proc2 = runtime.exec("");*/
Process proc = runtime.exec("adb shell cat /proc/"+Pid+"/net/dev");
try {
if (proc.waitFor() != 0) {
System.err.println("exit value = " + proc.exitValue());
//JOptionPane.showMessageDialog(new JFrame(), "哥们抱歉,好像出问题了!关掉重试吧!");
}
BufferedReader in = new BufferedReader(new InputStreamReader(
proc.getInputStream()));
StringBuffer stringBuffer = new StringBuffer();
String line = null;
while ((line = in.readLine()) != null) {
stringBuffer.append(line+" ");
}
String str1=stringBuffer.toString();
String str2=str1.substring(str1.indexOf("wlan0:"),str1.indexOf("wlan0:")+90);
//接收字节:
String str4=str2.substring(7,16);
str4 = str4.trim();
int b=Integer.parseInt(str4);
str3=b/1024;
//System.out.println(str3);
} catch (InterruptedException e) {
System.err.println(e);
}finally{
try {
proc.destroy();
} catch (Exception e2) {
}
}
}
catch (Exception StringIndexOutOfBoundsException)
{
//System.out.print("请检查设备是否连接");
}
return str3;
}
取到流量后可以用步骤后的流量减去步骤前的流量得到步骤消耗流量!也可以用时间差来计算!
电量取值:
adb shell dumpsys battery
这里只是剩余电量!
public static double battery() throws IOException {
double batt=0;
Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec("adb shell dumpsys battery");
String str3;
try {
if (proc.waitFor() != 0) {
System.err.println("exit value = " + proc.exitValue());
}
BufferedReader in = new BufferedReader(new InputStreamReader(
proc.getInputStream()));
StringBuffer stringBuffer = new StringBuffer();
String line = null;
while ((line = in.readLine()) != null) {
stringBuffer.append(line+" ");
}
String str1=stringBuffer.toString();
String str2=str1.substring(str1.indexOf("level"),str1.indexOf("level")+10);
str3=str2.substring(6,10);
str3.trim();
batt=Double.parseDouble(str3);
} catch (InterruptedException e) {
System.err.println(e);
}finally{
try {
proc.destroy();
} catch (Exception e2) {
}
}
return batt;
}
使用说明
第一步:先检查设备是否连接。
adb devices
第二步:把被测程序打开。
第三步:输入包名点击开始。
查包名的方法 (列出所有的包名):
adb shell ps
工具展示
日志的收集放在 D:/log
Monkey
欢迎一起交流,一起进步 可以关注我的微信公众号:“测试开发进阶” - 点我关注