2013.12.23 (2)——— android 代码调用shell
1、调用shell
使用
2、安装apk
使用:
执行adb install 没有效果,但是执行pm install得需要root权限
1、调用shell
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();
}
使用
try {
System.out.println(run(new String[]{"su", "ls -al"}, "/sdcard/apk"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
2、安装apk
private static void InstallAPK(String filename){
File file = new File(filename);
if(file.exists()){
try {
String command;
// command = "adb install -r -s " + filename;
command = "pm install -r -s " + filename;
Process proc = Runtime.getRuntime().exec(new String[] { "su", "-c", command });
proc.waitFor();
} catch (Exception e) {
e.printStackTrace();
}
}
}
使用:
InstallAPK("sdcard/apk/a.apk");
执行adb install 没有效果,但是执行pm install得需要root权限