android shell 工具类 设置全局代理

```

String[] strings = {"settings put global http_proxy " + ip + ":" + port};

                    ShellUtils.CommandResult commandResult2 = ShellUtils.execCmd(strings, false, true);

````






`代码内容`

所需权限 

<pre>

<uses-permission android:name="android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY" />

    <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />

</pre>

android shell 工具类

 <pre>

import android.text.TextUtils;

import android.util.Log;

import java.io.BufferedReader;

import java.io.Closeable;

import java.io.DataOutputStream;

import java.io.IOException;

import java.io.InputStreamReader;

import java.util.List;

/**

* <pre>

*    author: carden

* </pre>

*/

public final class ShellUtils {

    private ShellUtils() {

        throw new UnsupportedOperationException("u can't instantiate me...");

    }

    /**

    * 是否是在root下执行命令

    *

    * @param command 命令

    * @param isRoot  是否需要root权限执行

    * @return CommandResult

    */

    public static CommandResult execCmd(String command, boolean isRoot) {

        return execCmd(new String[]{command}, isRoot, true);

    }

    /**

    * 是否是在root下执行命令

    *

    * @param commands 多条命令链表

    * @param isRoot  是否需要root权限执行

    * @return CommandResult

    */

    public static CommandResult execCmd(List<String> commands, boolean isRoot) {

        return execCmd(commands == null ? null : commands.toArray(new String[]{}), isRoot, true);

    }

    /**

    * 是否是在root下执行命令

    *

    * @param commands 多条命令数组

    * @param isRoot  是否需要root权限执行

    * @return CommandResult

    */

    public static CommandResult execCmd(String[] commands, boolean isRoot) {

        return execCmd(commands, isRoot, true);

    }

    /**

    * 是否是在root下执行命令

    *

    * @param command        命令

    * @param isRoot          是否需要root权限执行

    * @param isNeedResultMsg 是否需要结果消息

    * @return CommandResult

    */

    public static CommandResult execCmd(String command, boolean isRoot, boolean isNeedResultMsg) {

        return execCmd(new String[]{command}, isRoot, isNeedResultMsg);

    }

    /**

    * 是否是在root下执行命令

    *

    * @param commands        命令链表

    * @param isRoot          是否需要root权限执行

    * @param isNeedResultMsg 是否需要结果消息

    * @return CommandResult

    */

    public static CommandResult execCmd(List<String> commands, boolean isRoot, boolean isNeedResultMsg) {

        return execCmd(commands == null ? null : commands.toArray(new String[]{}), isRoot, isNeedResultMsg);

    }

    /**

    * 是否是在root下执行命令

    *

    * @param commands        命令数组

    * @param isRoot          是否需要root权限执行

    * @param isNeedResultMsg 是否需要结果消息

    * @return CommandResult

    */

    public static CommandResult execCmd(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 ? "su" : "sh");

            os = new DataOutputStream(process.getOutputStream());

            for (String command : commands) {

                if (command == null) continue;

                os.write(command.getBytes());

                os.writeBytes("\n");

                os.flush();

            }

            os.writeBytes("exit\n");

            os.flush();

            result = process.waitFor();

            if (isNeedResultMsg) {

                successMsg = new StringBuilder();

                errorMsg = new StringBuilder();

                successResult = new BufferedReader(new InputStreamReader(process.getInputStream(), "UTF-8"));

                errorResult = new BufferedReader(new InputStreamReader(process.getErrorStream(), "UTF-8"));

                String s;

                while ((s = successResult.readLine()) != null) {

                    successMsg.append(s);

                }

                while ((s = errorResult.readLine()) != null) {

                    errorMsg.append(s);

                }

            }

        } catch (Exception e) {

            e.printStackTrace();

            Log.e("***",e.getMessage());

        } finally {

          closeIO(os, successResult, errorResult);

            if (process != null) {

                process.destroy();

            }

        }

        return new CommandResult(

                result,

                successMsg == null ? null : successMsg.toString(),

                errorMsg == null ? null : errorMsg.toString()

        );

    }

    public static void closeIO(Closeable... closeables) {

        if (closeables == null) return;

        for (Closeable closeable : closeables) {

            if (closeable != null) {

                try {

                    closeable.close();

                } catch (IOException e) {

                    e.printStackTrace();

                }

            }

        }

    }

    /**

    * 返回的命令结果

    */

    public static class CommandResult {

        /**

        * 结果码

        **/

        public int    result;

        /**

        * 成功信息

        **/

        public String successMsg;

        /**

        * 错误信息

        **/

        public String errorMsg;

        public CommandResult(int result, String successMsg, String errorMsg) {

            this.result = result;

            this.successMsg = successMsg;

            this.errorMsg = errorMsg;

        }

        @Override

        public String toString() {

            return "CommandResult{" +

                    "result=" + result +

                    ", successMsg='" + successMsg + '\'' +

                    ", errorMsg='" + errorMsg + '\'' +

                    '}';

        }

    }

    public static String[] getHideShell(String shells) {

        String[] c_shells = null;

        if (!TextUtils.isEmpty(shells)) {

            return null;

        }

        if (!shells.contains("#")) {

            c_shells = new String[1];

            for (int i = 0; i < c_shells.length; i++) {

                c_shells[i] = shells;

            }

            return c_shells;

        } else {

            String strs[] = shells.split("#");

            c_shells = new String[strs.length];

            for (int i = 0; i < strs.length; i++) {

                c_shells[i] =strs[i];

            }

            return c_shells;

        }

    }

}

</pre>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,755评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,369评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,799评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,910评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,096评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,159评论 3 411
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,917评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,360评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,673评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,814评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,509评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,156评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,123评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,641评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,728评论 2 351

推荐阅读更多精彩内容