2 mr yuki lee Mr_Yuki_Lee 于 2014.01.07 11:38 提问

求指教如何用代码判断手机是否ROOT过

自己的手机是LG的NEXUS4,用过了网上各种代码判断的方法。 运行后都显示是ROOT过。但手机本身实际上并没有ROOT过。 但是使用其他一款软件的时候可以正确判断出我的手机有没ROOT过。 不知道问题到底出在哪里。 希望有高人可以指点下。。非常感谢。。

1个回答

a2855090
a2855090   2014.01.13 19:18

public static boolean isRoot() {
boolean isRoot = false;
String sys = System.getenv("PATH");
ArrayList commands = new ArrayList();
String[] path = sys.split(":");
for (int i = 0; i < path.length; i++) {
String commod = "ls -l " + path[i] + "/su";
commands.add(commod);
System.out.println("commod : "+commod);
}
ArrayList res = run("/system/bin/sh", commands);
String response = "";
for (int i = 0; i < res.size(); i++) {
response += res.get(i);
}
String root = "-rwsr-sr-x root root";
if (response.contains(root)) {
isRoot = true;
}
return isRoot;
}
public static ArrayList run(String shell, ArrayList commands){
ArrayList output = new ArrayList();
Process process =null;
try {
process = Runtime.getRuntime().exec(shell);

        BufferedOutputStream shellInput = new BufferedOutputStream(
                process.getOutputStream());
        BufferedReader shellOutput = new BufferedReader(
                new InputStreamReader(process.getInputStream()));

        for (String command : commands) {
            shellInput.write((command + " 2>&1\n").getBytes());
        }

        shellInput.write("exit\n".getBytes());
        shellInput.flush();

        String line;
        while ((line = shellOutput.readLine()) != null) {
            output.add(line);
        }

        process.waitFor();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }finally{
        process.destroy();
    }

    return output;
}

这代码看你用过没

Mr_Yuki_Lee
Mr_Yuki_Lee root过的手机可以判断 但是没root的手机运行后就像死机一样要等很久很久。。
4 年多之前 回复
zmywly
zmywly 需要用到shell命令才行的。
4 年多之前 回复
Mr_Yuki_Lee
Mr_Yuki_Lee 非常感谢。我这边试试先。
4 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
android判断手机是否root
关于判断手机是否已经root的方法。如果app有一些特殊功能需要root权限,则需要判断是否root。比如一些市场下载完app后自动安装。 /** * @author Kevin Kowalewski * */ public class Root { private static String LOG_TAG = Root.class.getName(); publi
Android 判断手机是否有root权限
root权限是安卓最高的操作权限,俗称superuser,简称su,一般来说root过的手机,系统目录会有su目录和系统app目录中有Superuser.apk,或者kingroot、360Root、Root精灵、等apk。当然了,在安卓8系列中会使用magisk,文件名就不一样了。下面是RootUtil文件,实现三种检测方法来判断是否有rootpublic class RootUtil { ...
判断手机是否ROOT 代码实现+ Android 操作系统 获取Root权限 原理解析
判断手机是否具有ROOT限                                                    许多机友新购来的Android机器没有破解过Root权限,无法使用一些需要高权限的软件,以及进行一些高权限的操作,其实破解手机Root权限是比较简单及安全的,破解Root权限的原理就是在手机的/system/bin/或/system/xbin/目录下放置一个可
androidL版本判定手机是否root?
废话不多说,首先是判定手机的adb root权限,手机的prop配置文件中有一个属性:ro.adb.secure,如果该配置数值为1,手机adb root权限没有打开,为0即是打开权限。 boolean adbRooted = SystemProperties.get("ro.adb.secure").equals("1"); if (adbRooted) {             Log
判断安卓手机是否root有三种方式
本例子是在一个论坛看到的,直接拿来copy,等着自己以后复习用 第一种: Android可以直接运行一个底层命令,来判断是否root,但是这会带来一个问题,每次判断是否root都会弹出一个root请求框。这是十分不友好的一种交互方式,而且,用户如果选择取消,有部分手机是判断为非root的。这种方式的特点是交互不友好,而且有误判。 第二种:。 一般root手机都会有一些的特殊文件
android 4.0接收开机广播
首先确定你的手机是否root过,安装成功后打开一次, 重启手机会打开你指定的app, (求大神指教menu屏蔽长按事件)
检测安卓手机是否已经Root
检测安卓手机是否已经Root/** * 反编译支付宝SDK得到的判断root的方法,并增加了对‘/su/bin/’目录的判断 * Created by cyb on 2016/12/15 0015. */public class SystemInfo { public static boolean isRooted(){ // nexus 5x "/su/bin/"
android中如何通过代码检测是否有root权限?
封装了一个类,代码如下: public class ShellCommand { private Boolean can_su;     public SH sh; public SH su; public ShellCommand() { sh = new SH("sh"); su = new SH("su"); } public boolean canSU() { retur
如何用VBA判断文件夹是否存在
如何用VBA判断文件夹是否存在.doc如何用VBA判断文件夹是否存在.doc
Android检查手机是否被root
目前来说Android平台并没有提供能够root检查的工具。但是我们可以通过两种方式来判断 - 手机里面是否有su文件 - 这个su文件是不是能够执行但是这两种检查方式都存在缺点。 第一种存在误测和漏测的情况,比如su没有放到常规路径下,就容易漏掉,但是这种情况是有办法尽量规避(或者说减小误差)的,比喻运行which检查,或者遍历shell中所有的环境变量的PATH;还有一种情况是手机没有ro