前言

各位 这个工具是本人写的非常简陋体验也非常一般,大家手下留情,不要吐槽!能用上的拿去用吧!

工具下载地址:
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

欢迎一起交流,一起进步 可以关注我的微信公众号:“测试开发进阶” - 点我关注


↙↙↙阅读原文可查看相关链接,并与作者交流