判断手机是否有root权限

第一种:
Android可以直接运行一个底层命令,来判断是否root,但是这会带来一个问题,每次判断是否root都会弹出一个root请求框。这是十分不友好的一种交互方式,而且,用户如果选择取消,有部分手机是判断为非root的。这种方式的特点是交互不友好,而且有误判。
第二种:。
一般root手机都会有一些的特殊文件夹,比如/system/bin/su,/system/xbin/su,里面存放有相关的权限控制文件。因此只要手机中有一个文件夹存在就判断这个手机root了。然后经过测试,这种方法在大部分手机都可行。这种方式的特点是交互友好,但是有误判。
第三种:
第三种判断方式是基于第二种的,部分国产,比如小米系列,有第二种方式所说的文件夹,但是系统是未root的,判断成了已root。经过分析,这是由于小米有自身的权限控制系统而导致。只需要在第二种方法的基础上,再另外判断文件拥有者对这个文件是否具有可执行权限(第4个字符的状态),就基本可以确定手机是否root了。这种方法基本可以判断所有的手机,而且不弹出root请求框。
/** * 判断当前手机是否有ROOT权限 * @return */ public boolean isRoot(){ boolean bool = false; try{ if ((!new File("/system/bin/su").exists()) && (!new File("/system/xbin/su").exists())){ bool = false; } else { bool = true; } Log.d(TAG, "bool = " + bool); } catch (Exception e) { } return bool; }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

    • 0
      点赞
    • 3
      收藏
      觉得还不错? 一键收藏
    • 0
      评论
    ### 回答1: ProcessBuilder没有root权限,但是可以使用ProcessBuilder来启动一个具有root权限的进程。在Linux系统中,可以使用sudo命令来获取root权限,ProcessBuilder可以通过以下方式使用sudo命令来启动一个具有root权限的进程: ```java ProcessBuilder builder = new ProcessBuilder("sudo", "command"); ``` 这将使用sudo命令来运行指定的命令,并以root权限运行该命令。需要注意的是,运行sudo命令需要用户具有sudo权限,否则会提示需要输入密码或者无法获取root权限。 ### 回答2: 要判断ProcessBuilder是否具有root权限,可以通过以下步骤进行判断: 1. 首先,需要创建一个ProcessBuilder对象。这个对象用于启动一个新的进程。 2. 调用ProcessBuilder对象的command方法,并传入一个命令作为参数。例如,可以使用"whoami"命令,该命令用于获取当前用户的用户名。 3. 调用ProcessBuilder对象的start方法,启动一个新的进程,并获取该进程的输出流。 4. 使用Java的IO流读取该进程的输出流,并获取输出结果。 5. 如果输出结果是"root",则表示ProcessBuilder具有root权限;否则,表示ProcessBuilder没有root权限。 以下是一个示例代码: ``` import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class RootChecker { public static void main(String[] args) { boolean hasRootPermission = checkRootPermission(); System.out.println("ProcessBuilder has root permission: " + hasRootPermission); } public static boolean checkRootPermission() { ProcessBuilder processBuilder = new ProcessBuilder(); processBuilder.command("whoami"); try { Process process = processBuilder.start(); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String output = reader.readLine(); if (output.equals("root")) { return true; } } catch (IOException e) { e.printStackTrace(); } return false; } } ``` 上述代码会执行"whoami"命令,并获取该命令的输出结果。如果输出结果是"root",则返回true,表示ProcessBuilder具有root权限;否则,返回false,表示ProcessBuilder没有root权限。 ### 回答3: 要判断ProcessBuilder是否具有root权限,可以采取以下方法: 1. 使用ProcessBuilder创建一个进程并执行一个需要root权限的命令,例如尝试执行一个需要root权限的系统命令如"sudo"。如果进程能够成功执行,说明ProcessBuilder具有root权限。可以通过捕获进程输出并检查其返回值来判断执行结果。 2. 使用ProcessBuilder的environment()方法获取当前进程的环境变量,并检查是否包含具有root权限的环境变量。通常,当进程以root权限运行时,其环境变量会包含一些特定的标记,比如"USER=root"或"SUDO_USER=root"。可以通过遍历进程的环境变量,查找是否有这样的标记来判断ProcessBuilder是否具有root权限。 3. 使用ProcessBuilder的command()方法获取要执行的命令,然后检查该命令是否需要root权限。可以通过判断命令的开头是否为"sudo"或"su"来确定是否需要root权限。如果需要root权限,可以认为ProcessBuilder具有root权限。 需要注意的是,这些方法只是对ProcessBuilder是否具有root权限的一种推测。要真正确定ProcessBuilder是否具有root权限,可能需要更加深入的系统调用和权限检查。

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值