package com.haha.xixi;import java.io.BufferedReader;import java.io.File;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.util.ArrayList;import android.content.Context;import android.content.pm.PackageInfo;import android.content.pm.PackageManager;import android.os.Build;import android.text.TextUtils;import android.util.AndroidRuntimeException;/** *  */public class Cmd {    public static final String RESULT_UNKNOW = "unknown";    public static ArrayList sSuPkgNames = new ArrayList();    static {        // //        sSuPkgNames.add("com.miui.uac");    }    private static final String DEFAULT_CHARSET = "utf-8";    public static String findSuShellBin() {        String pathStr = System.getenv("PATH");        if (pathStr != null && pathStr.length() > 0) {            String[] paths = pathStr.split(":");            for (String path : paths) {                File file = new File(path, "su");                if (file.exists()) {                    return file.getPath();                }            }        }        return null;    }    public static String findShShellBin() {        String pathStr = System.getenv("PATH");        if (pathStr != null && pathStr.length() > 0) {            String[] paths = pathStr.split(":");            for (String path : paths) {                File file = new File(path, "sh");                if (file.exists()) {                    return file.getPath();                }            }        }        return null;    }    public static final String SU_SOCKET = "/dev/ddd/server";    private static String readStrFromInputStream(InputStream in, String charset)            throws IOException {        final BufferedReader br = new BufferedReader(new InputStreamReader(in,                charset));        final char[] buf = new char[1024];        int readed = 0;        final StringBuilder builder = new StringBuilder();        while ((readed = br.read(buf)) != -1) {            builder.append(buf, 0, readed);        }        return (builder.length() > 0) ? builder.toString() : null;    }    public static String execForString(String cmd) {        try {            Process process = Runtime.getRuntime().exec(cmd);            BufferedReader reader = new BufferedReader(new InputStreamReader(                    process.getInputStream()));            int read;            char[] buffer = new char[4096];            StringBuffer output = new StringBuffer();            while ((read = reader.read(buffer)) > 0) {                output.append(buffer, 0, read);            }            reader.close();            process.waitFor();            return output.toString();        } catch (IOException e) {        } catch (InterruptedException e) {        }        return RESULT_UNKNOW;    }    public static String exec(File directory, String... cmd) {        Process process = null;        try {            ProcessBuilder builder = new ProcessBuilder().command(cmd)                    .redirectErrorStream(true).directory(directory);            try {                builder.environment().putAll(System.getenv());            } catch (Exception e) {            }            process = builder.start();            InputStream stdOut = process.getInputStream();            String str = readStrFromInputStream(stdOut, DEFAULT_CHARSET);            stdOut.close();            if (str != null) {                return str;            } else {                InputStream stdError = process.getErrorStream();                return readStrFromInputStream(stdError, DEFAULT_CHARSET);            }        } catch (Exception e) {            if (AppEnv.DEBUG) {                e.printStackTrace();            }            // throw new RuntimeException(e);        } finally {            if (process != null) {                process.destroy();            }        }        return RESULT_UNKNOW;    }    public static void exec(String cmd) throws IOException {        Process p = Runtime.getRuntime().exec(cmd);        BufferedReader stdInput = new BufferedReader(new InputStreamReader(                p.getInputStream()));        String s;        while ((s = stdInput.readLine()) != null) {        }        try {            p.waitFor();        } catch (InterruptedException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }    public static String execOnRoot(File directory, String... cmds)            throws Exception {        Process process = null;        String su = findSuShellBin();        if (su == null)        {            throw new Exception("The devices(" + Build.MODEL + ") has not rooted");        }        try        {            ProcessBuilder builder = new ProcessBuilder().command(su).redirectErrorStream(true).directory(directory);            try            {                builder.environment().putAll(System.getenv());            } catch (Exception e)            {                if (AppEnv.DEBUG)                {                    e.printStackTrace();                }            }            process = builder.start();            OutputStream stdIn = process.getOutputStream();            InputStream stdOut = process.getInputStream();            InputStream stdError = process.getErrorStream();            for (String cmd : cmds)            {                if (AppEnv.DEBUG)                {                                   AssistLog.d("fu","cmd--" + cmd);                }                if (!cmd.endsWith("\n"))                {                    cmd += "\n";                }                stdIn.write(cmd.getBytes());                stdIn.flush();            }            stdIn.write("exit\n".getBytes());            stdIn.flush();            stdIn.close();            if (AppEnv.DEBUG)            {                               AssistLog.d("fu","readStrFromInputStream start");            }            String str = readStrFromInputStream(stdError, DEFAULT_CHARSET);            if (AppEnv.DEBUG)            {                               AssistLog.d("fu","readStrFromInputStream end " + str);            }            if (TextUtils.isEmpty(str))            {                if (AppEnv.DEBUG)                {                                   AssistLog.d("fu","readStrFromInputStream empty start " + str);                }                str = readStrFromInputStream(stdOut, DEFAULT_CHARSET);                if (AppEnv.DEBUG)                {                                   AssistLog.d("fu","readStrFromInputStream empty end " + str);                }            }            process.waitFor();            stdOut.close();            stdError.close();            if (AppEnv.DEBUG)            {                               AssistLog.d("fu","exit--" + str);            }            return str;        } catch (Exception e)        {            if (AppEnv.DEBUG)                e.printStackTrace();            throw new AndroidRuntimeException(e);        } finally        {            if (process != null)            {                try                {                    process.destroy();                } catch (Exception e)                {                    if (AppEnv.DEBUG)                        e.printStackTrace();                }            }        }    }    public static boolean hasSuCmd() {        try {            return findSuShellBin() != null;        } catch (Exception e) {            return false;        }    }    public static boolean hasSuApk(Context c) {        try {            PackageManager p = c.getPackageManager();            for (String pkg : sSuPkgNames) {                try {                    PackageInfo info = p.getPackageInfo(pkg, 0);                    if (info != null) {                        return true;                    }                } catch (Exception e) {                    continue;                }            }            return false;        } catch (Exception e) {            return false;        }    }    public static boolean isRoot() {        try {            String rootShell = findSuShellBin();            if (rootShell == null) {                return false;            }            String rtn = exec(new File("/"), rootShell, "-c", "id");            if (TextUtils.isEmpty(rtn)) {                return false;            }            return (-1 != rtn.indexOf("root"));        } catch (Exception e) {            return false;        }    }    public static boolean tryReBoot() {        try {            Runtime.getRuntime()                    .exec(new String[] { "su", "-c", "reboot now" });            return true;        } catch (Exception e) {            AssistLog.d("Cmd", " Cmd tryReBoot() Exception=" + e.toString());            if (AppEnv.DEBUG) {                e.printStackTrace();            }        }        return false;    }   }

更多相关文章

  1. 代码中设置drawableleft
  2. android 3.0 隐藏 系统标题栏
  3. Android开发中activity切换动画的实现
  4. Android(安卓)学习 笔记_05. 文件下载
  5. Android中直播视频技术探究之—摄像头Camera视频源数据采集解析
  6. 技术博客汇总
  7. android 2.3 wifi (一)
  8. AndRoid Notification的清空和修改
  9. Android中的Chronometer

随机推荐

  1. android 亮屏及屏幕解锁代码
  2. 自学android——AutoCompleteTextView的
  3. android studio 3.0 报错 Unable to find
  4. Android 再按一次退出应用
  5. android剪切圆角图片的方法
  6. Android登录页面制作并且记住账号密码
  7. android实现余额宝收益播报中数字显示动
  8. 关于Android(安卓)drawable和drawable-v2
  9. 升级android sdk到5.0,创建项目错误解决方
  10. Android 状态栏透明和图标反色