Android执行shell命令详解_Android

一、方法

复制代码 代码如下:

/** 
* 执行一个shell命令,并返回字符串值 

* @param cmd 
* 命令名称&参数组成的数组(例如:{"/system/bin/cat", "/proc/version"}) 
* @param workdirectory 
* 命令执行路径(例如:"system/bin/") 
* @return 执行结果组成的字符串 
* @throws IOException 
*/ 
public static synchronized String run(String[] cmd, String workdirectory) 
throws IOException { 
StringBuffer result = new StringBuffer(); 
try { 
// 创建操作系统进程(也可以由Runtime.exec()启动) 
// Runtime runtime = Runtime.getRuntime(); 
// Process proc = runtime.exec(cmd); 
// InputStream inputstream = proc.getInputStream(); 
ProcessBuilder builder = new ProcessBuilder(cmd); 
InputStream in = null; 
// 设置一个路径(绝对路径了就不一定需要) 
if (workdirectory != null) { 
// 设置工作目录(同上) 
builder.directory(new File(workdirectory)); 
// 合并标准错误和标准输出 
builder.redirectErrorStream(true); 
// 启动一个新进程 
Process process = builder.start(); 
// 读取进程标准输出流 
in = process.getInputStream(); 
byte[] re = new byte[1024]; 
while (in.read(re) != -1) { 
result = result.append(new String(re)); 


// 关闭输入流 
if (in != null) { 
in.close(); 

} catch (Exception ex) { 
ex.printStackTrace(); 

return result.toString(); 

二、用途
执行Linux下的top、ps等命令,这些命令你也通过adb可以执行查看效果。
1)top命令如下:

复制代码 代码如下:

adb shell 
$ top -h 
top -h 
Usage: top [-m max_procs] [-n iterations] [-d delay] [-s sort_column] [-t] [-h] 
-m num Maximum number of processes to display. // 最多显示多少个进程 
-n num Updates to show before exiting. // 刷新次数 
-d num Seconds to wait between updates. // 刷新间隔时间(默认5秒) 
-s col Column to sort by <cpu,vss,rss,thr> // 按哪列排序 
-t Show threads instead of processes. // 显示线程信息而不是进程 
-h Display this help screen. // 显示帮助文档 
$ top -n 1 
top -n 1 

就不把执行效果放上来了,总之结果表述如下:

复制代码 代码如下:

User 35%, System 13%, IOW 0%, IRQ 0% // CPU占用率 
User 109 + Nice 0 + Sys 40 + Idle 156 + IOW 0 + IRQ 0 + SIRQ 1 = 306 // CPU使用情况 
PID CPU% S #THR VSS RSS PCY UID Name // 进程属性 
xx xx% x xx xx xx xx xx xx 
CPU占用率: 
User 用户进程 
System 系统进程 
IOW IO等待时间 
IRQ 硬中断时间 
CPU使用情况(指一个最小时间片内所占时间,单位jiffies。或者指所占进程数): 
User 处于用户态的运行时间,不包含优先值为负进程 
Nice 优先值为负的进程所占用的CPU时间 
Sys 处于核心态的运行时间 
Idle 除IO等待时间以外的其它等待时间 
IOW IO等待时间 
IRQ 硬中断时间 
SIRQ 软中断时间 
进程属性: 
PID 进程在系统中的ID 
CPU% 当前瞬时所以使用CPU占用率 
S 进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数。 
#THR 程序当前所用的线程数 
VSS Virtual Set Size 虚拟耗用内存(包含共享库占用的内存) 
RSS Resident Set Size 实际使用物理内存(包含共享库占用的内存) 
PCY OOXX,不知道什么东东 
UID 运行当前进程的用户id 
Name 程序名称android.process.media 
// ps:内存占用大小有如下规律:VSS >= RSS >= PSS >= USS 
// PSS Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存) 
// USS Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存) 

在附件Android系统->android top.txt文件内,自个总结的。
2)执行代码

复制代码 代码如下:

// top命令 
public static final String[] TOP = { "/system/bin/top", "-n", "1" }; 
// 现在执行top -n 1,我们只需要第二行(用第二行求得CPU占用率,精确数据) 
// 第一行:User 35%, System 13%, IOW 0%, IRQ 0% // CPU占用率 
// 第二行:User 109 + Nice 0 + Sys 40 + Idle 156 + IOW 0 + IRQ 0 + SIRQ 1 = 306 
// // CPU使用情况 
public static synchronized String run(String[] cmd) { 
String line = ""; 
InputStream is = null; 
try { 
Runtime runtime = Runtime.getRuntime(); 
Process proc = runtime.exec(cmd); 
is = proc.getInputStream(); 
// 换成BufferedReader 
BufferedReader buf = new BufferedReader(new InputStreamReader(is)); 
do { 
line = buf.readLine(); 
// 前面有几个空行 
if (line.startsWith("User")) { 
// 读到第一行时,我们再读取下一行 
line = buf.readLine(); 
break; 

} while (true); 
if (is != null) { 
buf.close(); 
is.close(); 

} catch (IOException e) { 
e.printStackTrace(); 

return line; 

// 获取指定应用的top命令获取的信息 
// PID CPU% S #THR VSS RSS PCY UID Name // 进程属性 
// 如果当前应用不在运行则返回null 
public static synchronized String run(String[] cmd, String pkgName) { 
String line = null; 
InputStream is = null; 
try { 
Runtime runtime = Runtime.getRuntime(); 
Process proc = runtime.exec(cmd); 
is = proc.getInputStream(); 
// 换成BufferedReader 
BufferedReader buf = new BufferedReader(new InputStreamReader(is)); 
do { 
line = buf.readLine(); 
// 读取到相应pkgName跳出循环(或者未找到) 
if (null == line || line.endsWith(pkgName)) { 
break; 

} while (true); 
if (is != null) { 
buf.close(); 
is.close(); 

} catch (IOException e) { 
e.printStackTrace(); 

return line; 

时间: 2024-08-22 15:04:24

Android执行shell命令详解_Android的相关文章

Android执行shell命令详解

一.方法 复制代码 代码如下: /**  * 执行一个shell命令,并返回字符串值  *  * @param cmd  * 命令名称&参数组成的数组(例如:{"/system/bin/cat", "/proc/version"})  * @param workdirectory  * 命令执行路径(例如:"system/bin/")  * @return 执行结果组成的字符串  * @throws IOException  */  pu

Android adb shell 命令详解

http://www.open-open.com/lib/view/1327557366686

android压力测试命令monkey详解_Android

一.Monkey 是什么?Monkey 就是SDK中附带的一个工具. 二.Monkey 测试的目的?:该工具用于进行压力测试. 然后开发人员结合monkey 打印的日志 和系统打印的日志,结局测试中出现的问题. 三.Monkey 测试的特点?Monkey 测试,所有的事件都是随机产生的,不带任何人的主观性. 四.Monkey 命令详解 1).标准的monkey 命令[adb shell] monkey [options] <eventcount> , 例如:adb shell monkey -

Android 手势操作编程详解_Android

      手势操作在我们使用智能设备的过程中奉献了不一样的体验.Android开发中必然会进行手势操作方面的编程.那么它的原理是怎样的呢?我们如何进行手势操作编程呢?        手势操作原理        首先,在Android系统中,每一次手势交互都会依照以下顺序执行.        1. 接触接触屏一刹那,触发一个MotionEvent事件.        2. 该事件被OnTouchListener监听,在其onTouch()方法里获得该MotionEvent对象.        3

Android实现动画效果详解_Android

目前Android平台提供了两类动画一类是Tween动画,第二类就是 Frame动画,具体内容介绍请看下文: 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转.平移.放缩和渐变). 第二类就是 Frame动画,即顺序的播放事先做好的图像,与gif图片原理类似. 实现动画有两种方式:一种使用XML文件(文件放在res/anim),一种直接代码搞定  1.透明度控制动画效果alpha <!-- 透明度控制动画效果alpha 浮点型值: fromAlpha 动画起始时透明

Android Matrix源码详解_Android

Matrix的数学原理 在Android中,如果你用Matrix进行过图像处理,那么一定知道Matrix这个类.Android中的Matrix是一个3 x 3的矩阵,其内容如下:  Matrix的对图像的处理可分为四类基本变换: Translate           平移变换 Rotate                旋转变换 Scale                  缩放变换 Skew                  错切变换 从字面上理解,矩阵中的MSCALE用于处理缩放变换,MS

Android ListView的OnItemClickListener详解_Android

我们在使用ListView的时候,一般都会为ListView添加一个响应事件android.widget.AdapterView.OnItemClickListener.本文主要在于对OnItemClickListener的position和id参数做详细的解释,我相信有些人在这上面走了些弯路. 先来看一下官方的文档 position The position of the view in the adapter. id The row id of the item that was click

Android DownloadProvider 源码详解_Android

Android DownloadProvider 源码分析: Download的源码编译分为两个部分,一个是DownloadProvider.apk, 一个是DownloadProviderUi.apk. 这两个apk的源码分别位于 packages/providers/DownloadProvider/ui/src packages/providers/DownloadProvider/src 其中,DownloadProvider的部分是下载逻辑的实现,而DownloadProviderUi

Android入门之画图详解_Android

前文常用的控件介绍了不少,现在就来讨论一下手机开发中常用到的画图.要掌握Android的画图,首先就要了解一下,基本用到的如下一些图形接口: 1.Bitmap,可以来自资源/文件,也可以在程序中创建,实际上的功能相当于图片的存储空间: 2.Canvas,紧密与Bitmap联系,把Bitmap比喻内容的话,那么Canvas就是提供了众多方法操作Bitamp的平台: 3.Paint,与Canvas紧密联系,是"画板"上的笔刷工具,也用于设置View控件上的样式: 4.Drawable,如果