Android 常用工具类之RuntimeUtil

public class RuntimeUtil {

    /** 通过查询su文件的方式判断手机是否root */
    public static boolean hasRootedSilent() {
        return new File("/system/bin/su").exists()
                || new File("/system/xbin/su").exists()
                || new File("/system/sbin/su").exists()
                || new File("/sbin/su").exists()
                || new File("/vendor/bin/su").exists();
    }

    /** 通过执行命令的方式判断手机是否root, 会有申请root权限的对话框出现 */
    public static boolean hasRooted() {
        return execSilent("echo test");
    }

    /** 执行命令获取结果集 */
    public static List<String> exec(String cmd) {
        List<String> dataList = null;
        BufferedWriter writer = null;
        BufferedReader reader = null;
        Process process = null;
        try {
            process = Runtime.getRuntime().exec("su");
            writer = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
            reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            runCmd(writer, cmd);
            process.waitFor();
            dataList = new ArrayList<>();
            String content;
            while (null != (content = reader.readLine())) {
                dataList.add(content);
            }
        } catch (Exception e) {
            //e.printStackTrace();
        } finally {
            closeCloseable(reader, writer);
            if (process != null) process.destroy();
        }
        return dataList;
    }

    /** 执行一组命令 */
    public static void execSilent(String... cmd) {
        BufferedWriter writer = null;
        Process process = null;
        try {
            process = Runtime.getRuntime().exec("su");
            writer = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
            runCmd(writer, cmd);
            process.waitFor();
        } catch (Exception e) {
            // e.printStackTrace();
        } finally {
            closeCloseable(writer);
            if (process != null) process.destroy();
        }
    }

    /** 判断进程是否正在运行 */
    public static boolean isProcessRunning(String processName) {
        List<String> processList = exec("ps");
        for (int i = 1; i < processList.size(); i++) {
            if (processList.get(i).endsWith(processName)) {
                return true;
            }
        }
        return false;
    }

    /** 判断是否成功执行 */
    public static boolean execSilent(String cmd) {
        boolean result = false;
        BufferedWriter writer = null;
        Process process = null;
        try {
            process = Runtime.getRuntime().exec("su");
            writer = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
            runCmd(writer, cmd);
            process.waitFor();
            Log.d("runtime", "onCreate: process.exitValue()  " + process.exitValue());
            result = process.exitValue() == 0;
        } catch (Exception e) {
            // e.printStackTrace();
        } finally {
            closeCloseable(writer);
            if (process != null) process.destroy();
        }
        return result;
    }

    // 关闭流文件
    private static void closeCloseable(Closeable... closeable) {
        for (int i = 0; i < closeable.length; i++) {
            if (null != closeable) {
                try {
                    closeable[i].close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    // 执行命令
    private static void runCmd(BufferedWriter writer, String... cmd) throws IOException {
        for (int i = 0; i < cmd.length; i++) {
            writer.write(cmd[i] + "\n");
            writer.flush();
        }
        writer.write("exit \n");
        writer.flush();
    }
}
时间: 2024-11-14 12:15:02

Android 常用工具类之RuntimeUtil的相关文章

Android常用工具类(收藏)

Android常用工具类 主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java. 目前包括(HttpUtils.DownloadManagerPro.ShellUtils.PackageUtils.PreferencesUtils.JSONUtils.FileUtils.ResourceUtils.StringUtils.ParcelUtils.RandomUtils.ArrayUtils.ImageUtils.ListUtils.MapUtils.ObjectUtils.S

Android 常用工具类之SPUtil,可以修改默认sp文件的路径

参考: 1. 利用Java反射机制改变SharedPreferences存储路径    Singleton1900 2. Android快速开发系列 10个常用工具类 Hongyang import android.app.Activity; import android.content.Context; import android.content.ContextWrapper; import android.content.SharedPreferences; import java.io.

Android常用工具类

主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java.目前包括HttpUtils.DownloadManagerPro.ShellUtils.PackageUtils.PreferencesUtils.JSONUtils.FileUtils.ResourceUtils.StringUtils.ParcelUtils.RandomUtils.ArrayUtils.ImageUtils.ListUtils.MapUtils.ObjectUtils.SerializeUtils.S

Android常用工具类 (转)

主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java.目前包括HttpUtils.DownloadManagerPro.ShellUtils.PackageUtils.PreferencesUtils.JSONUtils.FileUtils.ResourceUtils.StringUtils.ParcelUtils.RandomUtils.ArrayUtils.ImageUtils.ListUtils.MapUtils.ObjectUtils.SerializeUtils.S

53. Android常用工具类

主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java.目前包括HttpUtils.DownloadManagerPro.ShellUtils.PackageUtils.PreferencesUtils.JSONUtils.FileUtils.ResourceUtils.StringUtils.ParcelUtils.RandomUtils.ArrayUtils.ImageUtils.ListUtils.MapUtils.ObjectUtils.SerializeUtils.S

Android 常用工具类

1.DensityUtils /** * 常用单位转换的辅助类 */ public class DensityUtils { private DensityUtils() { /* cannot be instantiated */ throw new UnsupportedOperationException("cannot be instantiated"); } /** * dp转px * * @param context * @param dpVal * @return */

Android(十二)android常用工具类。

1.SharedPreferences保存密码的文件 package com.itheima62.mobileguard.utils; import android.content.Context; import android.content.SharedPreferences; public class SpTools { public static void putString(Context context,String key,String value){ SharedPreferen

Android常用工具类封装---SharedPreferencesUtil

SharedPreferences常用于保存一些简单的数据,如记录用户操作的配置等,使用简单. public class SharedPreferencesUtil { //存储的sharedpreferences文件名 private static final String FILE_NAME = "save_file_name"; /** * 保存数据到文件 * @param context * @param key * @param data */ public static v

Android 常用工具类之LogUtil,可以定位到代码行,双击跳转

package cn.utils; import android.util.Log; public class LogUtils { public static boolean isDebug = true; private final static String APP_TAG = "myApp"; /** * 获取相关数据:类名,方法名,行号等.用来定位行<br> * at cn.utils.MainActivity.onCreate(MainActivity.java