2013.12.23 (2)——— android 代码调用shell
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权限