Android 代码执行shell指令

这篇具有很好参考价值的文章主要介绍了Android 代码执行shell指令。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Android 执行shell指令

方式一:此方式如果执行的代码带echo开头,会没有作用。可能是echo这个指令会被优先执行。

    public static void executeCommand(String command) {

        Runtime mRuntime = Runtime.getRuntime();

        try {

            //Process中封装了返回的结果和执行错误的结果

            Process mProcess = mRuntime.exec(command);

            BufferedReader mReader = new BufferedReader(new InputStreamReader(mProcess.getInputStream()));

            StringBuffer mRespBuff = new StringBuffer();

            char[] buff = new char[1024];

            int ch = 0;

            while ((ch = mReader.read(buff)) != -1) {

                mRespBuff.append(buff, 0, ch);

            }

            mReader.close();

            System.out.print(mRespBuff.toString());

        } catch (IOException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

    }

方式二:可以执行echo开头或者ping 开头的shell指令代码

Runtime mRuntime = Runtime.getRuntime();

mRuntime.exec(new String[] {"/bin/sh", "-c", "echo 1 > /sys/class/sensor_class/accel_calibration"});

 

一个工具类:

public class ShellUtils {
    private static final String TAG = "ShellUtils";

    public static final String COMMAND_SU = "su";
    public static final String COMMAND_SH = "sh";
    public static final String COMMAND_EXIT = "exit\n";
    public static final String COMMAND_LINE_END = "\n";

    private ShellUtils() {
        throw new AssertionError();
    }

    /**
     * 查看是否有了root权限
     *
     * @return
     */
    public static boolean checkRootPermission() {
        return execCommand("echo root", true, false).result == 0;
    }

    /**
     * 执行shell命令,默认返回结果
     *
     * @param command
     *            command
     * @param isRoot
     *              need root permission
     * @return
     * @see ShellUtils#execCommand(String[], boolean, boolean)
     */
    public static CommandResult execCommand(String command, boolean isRoot) {
        return execCommand(new String[] { command }, isRoot, true);
    }

    /**
     * 执行shell命令,默认返回结果
     *
     * @param commands
     *            command list
     * @param isRoot
     *              need root permission
     * @return
     * @see ShellUtils#execCommand(String[], boolean, boolean)
     */
    public static CommandResult execCommand(List<String> commands,
                                            boolean isRoot) {
        return execCommand(
                commands == null ? null : commands.toArray(new String[] {}),
                isRoot, true);
    }

    /**
     * 执行shell命令,默认返回结果
     *
     * @param commands
     *            command array
     * @param isRoot
     *              need root permission
     * @return
     * @see ShellUtils#execCommand(String[], boolean, boolean)
     */
    public static CommandResult execCommand(String[] commands, boolean isRoot) {
        return execCommand(commands, isRoot, true);
    }

    /**
     * execute shell command
     *
     * @param command
     *            command
     * @param isRoot
     *              need root permission
     * @param isNeedResultMsg
     *            whether need result msg
     * @return
     * @see ShellUtils#execCommand(String[], boolean, boolean)
     */
    public static CommandResult execCommand(String command, boolean isRoot,
                                            boolean isNeedResultMsg) {
        return execCommand(new String[] { command }, isRoot, isNeedResultMsg);
    }

    /**
     * execute shell commands
     *
     * @param commands
     *            command list
     * @param isRoot
     *              need root permission
     * @param isNeedResultMsg
     *              result
     * @return
     * @see ShellUtils#execCommand(String[], boolean, boolean)
     */
    public static CommandResult execCommand(List<String> commands,
                                            boolean isRoot, boolean isNeedResultMsg) {
        return execCommand(
                commands == null ? null : commands.toArray(new String[] {}),
                isRoot, isNeedResultMsg);
    }

    /**
     * execute shell commands
     *
     * @param commands
     *              command array
     * @param isRoot
     *              need root permission
     * @param isNeedResultMsg
     *              result
     * @return <ul>
     *         <li>if isNeedResultMsg is false, {@link CommandResult#successMsg}
     *         is null and {@link CommandResult#errorMsg} is null.</li>
     *         <li>if {@link CommandResult#result} is -1, there maybe some
     *         excepiton.</li>
     *         </ul>
     */
    public static CommandResult execCommand(String[] commands, boolean isRoot,
                                            boolean isNeedResultMsg) {
        int result = -1;
        if (commands == null || commands.length == 0) {
            return new CommandResult(result, null, null);
        }

        Process process = null;
        BufferedReader successResult = null;
        BufferedReader errorResult = null;
        StringBuilder successMsg = null;
        StringBuilder errorMsg = null;

        DataOutputStream os = null;
        try {
            process = Runtime.getRuntime().exec(isRoot ? COMMAND_SU : COMMAND_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(COMMAND_LINE_END);
                os.flush();
            }
            os.writeBytes(COMMAND_EXIT);
            os.flush();
            result = process.waitFor();
            // get command result
            if (isNeedResultMsg) {
                successMsg = new StringBuilder();
                errorMsg = new StringBuilder();
                successResult = new BufferedReader(new InputStreamReader(
                        process.getInputStream()));
                errorResult = new BufferedReader(new InputStreamReader(
                        process.getErrorStream()));
                String s;
                while ((s = successResult.readLine()) != null) {
                    successMsg.append(s);
                }
                while ((s = errorResult.readLine()) != null) {
                    errorMsg.append(s);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (os != null) {
                    os.close();
                }
                if (successResult != null) {
                    successResult.close();
                }
                if (errorResult != null) {
                    errorResult.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            if (process != null) {
                process.destroy();
            }
        }
        return new CommandResult(result, successMsg == null ? null
                : successMsg.toString(), errorMsg == null ? null
                : errorMsg.toString());
    }

    /**
     * 运行结果
     * <ul>
     * <li>{@link CommandResult#result} means result of command, 0 means normal,
     * else means error, same to excute in linux shell</li>
     * <li>{@link CommandResult#successMsg} means success message of command
     * result</li>
     * <li>{@link CommandResult#errorMsg} means error message of command result</li>
     * </ul>
     *
     * @author <a href="http://www.trinea.cn" target="_blank">Trinea</a>
     *         2013-5-16
     */
    public static class CommandResult {
        /** 运行结果 **/
        public int result;
        /** 运行成功结果 **/
        public String successMsg;
        /** 运行失败结果 **/
        public String errorMsg;

        public CommandResult(int result) {
            this.result = result;
        }

        public CommandResult(int result, String successMsg, String errorMsg) {
            this.result = result;
            this.successMsg = successMsg;
            this.errorMsg = errorMsg;
        }
    }
}
 文章来源地址https://www.toymoban.com/news/detail-616018.html

到了这里,关于Android 代码执行shell指令的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • android 通过adb shell命令旋转Android屏幕朝向

    注意: 默认0有的为横向,有的为纵向 纵向返回结果: cur 的值 宽 短 x 高 长 init=1080x1920 420dpi cur=1080x1920 app=1080x1794 rng=1080x1017-1794x1731 横向返回结果: cur 的值 宽 长 x 高 短 init=1080x1920 420dpi cur=1920x1080 app=1794x1080 rng=1080x1017-1794x1731

    2024年02月11日
    浏览(103)
  • android 运行shell 脚本文件或shell命令

    android 运行shell 脚本文件或shell命令 一.运行shell脚本文件 1.test.sh文件内容 #!/bin/bash echo \\\"I am a script\\\" ps 2.将shell文件拷贝到Android设备目录 3.执行脚本文件 Runtime.getRuntime().exec(\\\"sh /sdcard/lilei/test.sh\\\"); 注: 应用需要有存储访问权限,如果shell文件中有文件访问请用绝对路径,否则访问

    2024年03月12日
    浏览(60)
  • android 通过adb shell命令旋转Android屏幕朝向方向

    注意: 默认0有的为横向,有的为纵向 纵向返回结果: cur 的值 宽 短 x 高 长 init=1080x1920 420dpi cur=1080x1920 app=1080x1794 rng=1080x1017-1794x1731 横向返回结果: cur 的值 宽 长 x 高 短 init=1080x1920 420dpi cur=1920x1080 app=1794x1080 rng=1080x1017-1794x1731

    2024年02月06日
    浏览(61)
  • Android adb shell命令捕获systemtrace

    Android adb shell命令捕获systemtrace   (1)抓取trace文件: -t    时长,20s,20秒的trace文件。 -o   保存文件路径。     (2)把trace文件从手机中pull拉取到电脑桌面:       (3)在谷歌官网: Perfetto UI 打开trace文件:       Android ADB(Andorid Debug Bridge)调试真机设备_adb在线执行器_zhang

    2024年02月09日
    浏览(54)
  • adb shell date 命令修改Android系统时间

    1.关掉自动时间同步 settings put global auto_time 0 2.关掉自动时区同步 settings put global auto_time_zone 0 3.挂载 adb remount 4.adb shell date “时间格式”    日期格式为 yyyymmdd.hhmmss 或者是 yyyy-mm-dd hh:mm:ss adb shell date \\\"2023-12-05 10:00:00\\\" 5.查看时间是否设置成功 adb shell date 6.设置时区。先将自动

    2024年02月01日
    浏览(47)
  • iOS快捷指令:执行Python脚本(利用iSH Shell)

    iOS快捷指令所能做的操作极为有限。假如快捷指令能运行Python程序,那么可操作空间就瞬间变大了。iSH是一款免费的iOS软件,它模拟了一个类似Linux的命令行解释器。我们将在iSH中运行Python程序,然后在快捷指令中获取Python程序的输出。 我们用一个“获取当前日期”的Python程

    2024年01月20日
    浏览(48)
  • 【常用bsub指令介绍】使用bsub命令提交作业、开启交互式窗口,在集群服务器上用pdb进行代码调试

    在一个服务器集群中,有很多的人要使用,却只有很少的GPU。LSF作业调度系统则是对每个用户提交的作业和需要使用的GPU进行调度。一般使用bsub命令来将待运行的作业提交到集群上。 用bsub run.sh提交了作业,一般是作业已经可以成功跑起来,提交了作业后直接等作业运行结束

    2024年01月22日
    浏览(68)
  • 手机(Android)刷NetHunter安装指南,无需ssh执行kali命令, NetHunter支持的无线网卡列表!

    前提: 确保手机已经root,已装上magisk 。如果没有root,可用尝试magisk root 后执行此文 1、下载Nethunter:Get Kali | Kali Linux  然后push 到sdcard 里, 2、打开magisk,选择刚刚下好的 Nethunter  ZIP包  刷入 3、刷完重启手机,打开 桌面的NetHunter app,打开菜单,选择“Kali Chroot Manager”,

    2024年01月25日
    浏览(52)
  • Python:执行命令行指令

    在python中,调用外部命令行(linux中的shell、或者windows中的cmd)来执行指令,常用的有三种方式: os.system(‘pwd’); os.popen() subprocess.Popen() 是os模块中最基础的部分,其他的方法一般是在该方法的基础上衍生来的。 每一条 os.system 指令在执行时,都会创建一个子进程在系统上来

    2024年02月07日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包