`

Android执行shell命令(转)

 
阅读更多

Android执行shell命令

一、方法
  1. /** 
  2. * 执行一个shell命令,并返回字符串值 
  3. * 
  4. * @param cmd 
  5. * 命令名称&参数组成的数组(例如:{"/system/bin/cat", "/proc/version"}) 
  6. * @param workdirectory 
  7. * 命令执行路径(例如:"system/bin/") 
  8. * @return 执行结果组成的字符串 
  9. * @throws IOException 
  10. */ 
  11. public static synchronized String run(String[] cmd, String workdirectory) 
  12.         throws IOException { 
  13.     StringBuffer result = new StringBuffer(); 
  14.     try { 
  15.         // 创建操作系统进程(也可以由Runtime.exec()启动) 
  16.         // Runtime runtime = Runtime.getRuntime(); 
  17.         // Process proc = runtime.exec(cmd); 
  18.         // InputStream inputstream = proc.getInputStream(); 
  19.         ProcessBuilder builder = new ProcessBuilder(cmd); 
  20.  
  21.         InputStream in = null
  22.         // 设置一个路径(绝对路径了就不一定需要) 
  23.         if (workdirectory != null) { 
  24.             // 设置工作目录(同上) 
  25.             builder.directory(new File(workdirectory)); 
  26.             // 合并标准错误和标准输出 
  27.             builder.redirectErrorStream(true); 
  28.             // 启动一个新进程 
  29.             Process process = builder.start(); 
  30.  
  31.             // 读取进程标准输出流 
  32.             in = process.getInputStream(); 
  33.             byte[] re = new byte[1024]; 
  34.             while (in.read(re) != -1) { 
  35.                 result = result.append(new String(re)); 
  36.             } 
  37.         } 
  38.         // 关闭输入流 
  39.         if (in != null) { 
  40.             in.close(); 
  41.         } 
  42.     } catch (Exception ex) { 
  43.         ex.printStackTrace(); 
  44.     } 
  45.     return result.toString(); 
二、用途
         执行Linux下的top、ps等命令,这些命令你也通过adb可以执行查看效果。
         1)top命令如下:
  1. adb shell 
  2. top -h 
  3. top -h 
  4. Usage: top [-m max_procs] [-n iterations] [-d delay] [-s sort_column] [-t] [-h] 
  5.   -m num  Maximum number of processes to display. // 最多显示多少个进程 
  6.   -n num  Updates to show before exiting. // 刷新次数 
  7.   -d num  Seconds to wait between updates. // 刷新间隔时间(默认5秒) 
  8.   -s col  Column to sort by <cpu,vss,rss,thr> // 按哪列排序 
  9.   -t      Show threads instead of processes. // 显示线程信息而不是进程 
  10.   -h      Display this help screen. // 显示帮助文档 
  11. top -n 1 
  12. top -n 1 
 
         就不把执行效果放上来了,总之结果表述如下:
  1. User 35%, System 13%, IOW 0%, IRQ 0% // CPU占用率 
  2. User 109 + Nice 0 + Sys 40 + Idle 156 + IOW 0 + IRQ 0 + SIRQ 1 = 306 // CPU使用情况 
  3.  
  4. PID CPU% S #THR VSS RSS PCY UID Name // 进程属性 
  5. xx  xx% x   xx  xx  xx  xx  xx   xx 
  6.  
  7. CPU占用率: 
  8. User    用户进程 
  9. System  系统进程 
  10. IOW IO等待时间 
  11. IRQ 硬中断时间 
  12.  
  13. CPU使用情况(指一个最小时间片内所占时间,单位jiffies。或者指所占进程数): 
  14. User    处于用户态的运行时间,不包含优先值为负进程 
  15. Nice    优先值为负的进程所占用的CPU时间 
  16. Sys 处于核心态的运行时间 
  17. Idle    除IO等待时间以外的其它等待时间 
  18. IOW IO等待时间 
  19. IRQ 硬中断时间 
  20. SIRQ    软中断时间 
  21.  
  22. 进程属性: 
  23. PID 进程在系统中的ID 
  24. CPU%    当前瞬时所以使用CPU占用率 
  25. S   进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数。 
  26. #THR    程序当前所用的线程数 
  27. VSS Virtual Set Size 虚拟耗用内存(包含共享库占用的内存) 
  28. RSS Resident Set Size 实际使用物理内存(包含共享库占用的内存) 
  29. PCY OOXX,不知道什么东东 
  30. UID 运行当前进程的用户id 
  31. Name    程序名称android.process.media 
  32.  
  33. // ps:内存占用大小有如下规律:VSS >= RSS >= PSS >= USS 
  34. // PSS  Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存) 
  35. // USS  Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存) 

         在附件Android系统->android top.txt文件内,自个总结的。

         2)执行代码
  1. // top命令 
  2. public static final String[] TOP = { "/system/bin/top""-n""1" }; 
  3.  
  4. // 现在执行top -n 1,我们只需要第二行(用第二行求得CPU占用率,精确数据) 
  5. // 第一行:User 35%, System 13%, IOW 0%, IRQ 0% // CPU占用率 
  6. // 第二行:User 109 + Nice 0 + Sys 40 + Idle 156 + IOW 0 + IRQ 0 + SIRQ 1 = 306 
  7. // // CPU使用情况 
  8. public static synchronized String run(String[] cmd) { 
  9.     String line = ""
  10.     InputStream is = null
  11.     try { 
  12.         Runtime runtime = Runtime.getRuntime(); 
  13.         Process proc = runtime.exec(cmd); 
  14.         is = proc.getInputStream(); 
  15.  
  16.         // 换成BufferedReader 
  17.         BufferedReader buf = new BufferedReader(new InputStreamReader(is)); 
  18.         do { 
  19.             line = buf.readLine(); 
  20.             // 前面有几个空行 
  21.             if (line.startsWith("User")) { 
  22.                 // 读到第一行时,我们再读取下一行 
  23.                 line = buf.readLine(); 
  24.                 break
  25.             } 
  26.         } while (true); 
  27.  
  28.         if (is != null) { 
  29.             buf.close(); 
  30.             is.close(); 
  31.         } 
  32.     } catch (IOException e) { 
  33.         e.printStackTrace(); 
  34.     } 
  35.     return line; 
  36.  
  37. // 获取指定应用的top命令获取的信息 
  38. // PID CPU% S #THR VSS RSS PCY UID Name // 进程属性 
  39. // 如果当前应用不在运行则返回null 
  40. public static synchronized String run(String[] cmd, String pkgName) { 
  41.     String line = null
  42.     InputStream is = null
  43.     try { 
  44.         Runtime runtime = Runtime.getRuntime(); 
  45.         Process proc = runtime.exec(cmd); 
  46.         is = proc.getInputStream(); 
  47.  
  48.         // 换成BufferedReader 
  49.         BufferedReader buf = new BufferedReader(new InputStreamReader(is)); 
  50.         do { 
  51.             line = buf.readLine(); 
  52.             // 读取到相应pkgName跳出循环(或者未找到) 
  53.             if (null == line || line.endsWith(pkgName)) { 
  54.                 break
  55.             } 
  56.         } while (true); 
  57.  
  58.         if (is != null) { 
  59.             buf.close(); 
  60.             is.close(); 
  61.         } 
  62.     } catch (IOException e) { 
  63.         e.printStackTrace(); 
  64.     } 
  65.     return line; 

 

 

三、后记
         这次相关的仅有的那个工程好像不能放上来了==。
 
         好吧,把我当时整理的一点点相关资料放附件了:包含《Android系统》文件夹和《深入研究java.lang.ProcessBuilder类.doc》。
         文件夹内容如下:

androidSystem.png 

分享到:
评论
1 楼 respondnet 2013-07-24  
非常感谢.

相关推荐

    c++builder的Android程序中执行Shell命令

    本单元实现了一个伪的Shell,可以用于在Android程序中执行Shell命令,如果需要Root权限,则在执行前,调用AskForRoot方法来获取用户的Root授权,如果不再需要在Root账号下执行命令,则调用ExitRoot方法来退出Root...

    android 给app授权 执行shell命令

    在Android平台上,有时候开发者需要超越普通应用程序的权限范围,例如执行系统级别的操作,这就涉及到给APP授权和执行Shell命令。Android系统默认是以安全为优先,不允许应用无限制地执行shell命令,但通过获取Root...

    android执行shell命令

    本文将详细介绍如何在Android设备上执行shell命令以及相关知识点。 首先,Android提供了多种方式来执行shell命令: 1. **ADB (Android Debug Bridge)**:这是Android开发者最常用的工具之一,它允许开发者通过USB...

    android通过jni执行shell命令

    本文将深入探讨如何使用JNI在Android中执行shell命令。 首先,理解JNI的工作原理是必要的。JNI接口为Java应用程序提供了一个桥梁,使其可以直接调用本地(非Java)代码,通常是C/C++编写的库。这涉及到创建一个本地...

    Android-ExecuteShell是一个可以方便的执行shell命令的Android开源库

    ExecuteShell是一个专为Android开发者设计的开源库,它使得在Android应用程序中执行shell命令变得轻而易举。在Android系统中,有时我们需要执行一些低级的操作,如文件管理、系统调试或者权限控制,这时就需要借助...

    Android程序中(APK程序)执行Adb shell 命令

    ADB是Android开发者用于调试应用程序、传输文件、执行shell命令等的桥梁。通过USB连接或Wi-Fi,开发者可以在电脑上控制Android设备,执行如安装APK、查看设备状态、获取logcat日志等操作。 当需要在Android应用程序...

    andorid使用jni执行shell命令例子

    本文将详细介绍如何在Android应用中使用JNI来执行shell命令。 首先,我们需要理解JNI的概念。JNI是Java平台提供的一种机制,它允许Java代码和其他语言写的代码进行交互。通过JNI,我们可以在Java应用程序中调用C/...

    android执行adb shell命令源码

    Android Native Execution Demo项目(可能对应压缩包中的`android-native-exe-demo-master (copy)`)提供了一个C/C++库,用于在原生层执行shell命令。这个库通常会通过JNI(Java Native Interface)与Java层的应用...

    Android中级篇之用JAVA代码执行shell命令.rar_Android 执行shell_android_effectoh

    本教程将深入讲解如何在Android应用中通过Java代码执行shell命令,以提升应用的功能和效率。 一、Android与Shell命令 Android系统基于Linux内核,因此支持使用Linux命令行工具,即shell命令。这些命令提供了对系统...

    如何让Android系统或Android应用执行shell脚本

    Android 系统或 Android 应用执行 shell 脚本的方法 Android 系统或 Android 应用执行 shell 脚本是 Android 开发中的一项重要技术,通过执行 shell 脚本,可以实现一些复杂的操作,例如设置网络参数、启动服务等...

    Android 用Shell命令设置静态ip

    下面将详细介绍如何使用Android的Shell命令来设置静态IP。 首先,你需要获得设备的root权限,因为更改网络设置通常需要超级用户权限。如果你的设备已经root,可以继续以下步骤;如果没有,需要先获取root权限。 1....

    android 执行系统命令

    `Runtime.getRuntime().exec()`方法可以用来执行shell命令,但需要注意的是,执行命令前必须确保应用已经获得了相应的系统权限,这可以通过在AndroidManifest.xml中声明`&lt;uses-permission&gt;`标签来实现。 例如,如果...

    Android执行shell命令详解

    总结来说,Android执行shell命令是与系统底层交互的重要手段,它能帮助开发者获取系统状态、进行系统控制和调试,但同时也需要注意安全性和权限管理。理解如何正确、安全地使用shell命令对于Android开发来说是不可或...

    android shell命令工具类

    android shell命令工具类,可以执行单个命令 多个命令

    ShellUtils.java,Android adb shell执行类

    一个用于在Android开发中 执行adb shell命令的类,可以以最高权限(su)执行。例如mount命令等

    android执行shell指令

    ADB(Android Debug Bridge)是Google提供的一个强大的工具,它允许开发者通过命令行与Android设备进行通信,包括安装APK、传输文件、执行Shell命令等。在本教程中,我们将深入探讨如何在Android上执行ADB shell指令...

    android中shell命令浅析

    ### Android中的Shell命令浅析 #### 一、引言 在Android开发过程中,熟练掌握shell命令对于调试和管理Android应用程序至关重要。本文将详细介绍Android中常用的shell命令及其应用场景,并针对可能出现的问题提供...

Global site tag (gtag.js) - Google Analytics