Android執行shell命令封裝

來源:互聯網
上載者:User

Android執行shell命令封裝

 

 

 

    public static void execCommand(String[] commands, boolean isRoot,            ShellCommandListener listener) throws IOException,            InterruptedException, TimeoutException {        int exitCode = -1;        CommandResult result = null;        if (commands == null || commands.length == 0) {            result = new CommandResult(exitCode, null, null);            listener.onCommandFinished(result);        }        Process process = null;        BufferedReader successReader = null;        BufferedReader errorReader = null;        StringBuilder successMsg = null;        StringBuilder errorMsg = null;        DataOutputStream os = null;        process = Runtime.getRuntime().exec(isRoot ? "su" : "sh");        os = new DataOutputStream(process.getOutputStream());        for (String command : commands) {            if (command == null) {                continue;            }            // donnot use os.writeBytes(commmand), avoid chinese charset            // error            os.write(command.getBytes());            os.writeBytes("\n");            os.flush();        }        os.writeBytes("exit\n");        os.flush();        exitCode = process.waitFor();        successMsg = new StringBuilder();        errorMsg = new StringBuilder();        successReader = new BufferedReader(new InputStreamReader(                process.getInputStream()));        errorReader = new BufferedReader(new InputStreamReader(                process.getErrorStream()));        String s = null;        while ((s = successReader.readLine()) != null) {            successMsg.append(s + "\n");        }        while ((s = errorReader.readLine()) != null) {            errorMsg.append(s + "\n");        }        if (exitCode == -257) {            throw new TimeoutException();        }        try {            if (os != null) {                os.close();            }            if (successReader != null) {                successReader.close();            }            if (errorReader != null) {                errorReader.close();            }        } catch (IOException e) {            e.printStackTrace();        }        if (process != null) {            process.destroy();        }        result = new CommandResult(exitCode, successMsg == null ? null                : successMsg.toString(), errorMsg == null ? null                : errorMsg.toString());        listener.onCommandFinished(result);    }    /**     * result of command,     *      * @author Trinea 2013-5-16     */    public static class CommandResult {        /** result of command **/        public int exitCode;        /** success message of command result **/        public String successMsg;        /** error message of command result **/        public String errorMsg;        public CommandResult(int result) {            this.exitCode = result;        }        public CommandResult(int result, String successMsg, String errorMsg) {            this.exitCode = result;            this.successMsg = successMsg;            this.errorMsg = errorMsg;        }        @Override        public String toString() {            return "exitCode=" + exitCode + "; successMsg=" + successMsg                    + "; errorMsg=" + errorMsg;        }    }    public interface ShellCommandListener {        public void onCommandFinished(CommandResult result);    }


 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.