Android检查手机是否被root

目前来说Android平台并没有提供能够root检查的工具。但是可以通过两种方式来判断

  • 系统是否包含su文件
  • su文件是否能够执行

但是这两种检查方式都存在缺点:

(1)第一种存在误测和漏测的情况,比如su没有放到常规路径下,就容易漏掉,但是这种情况是有办法尽量规避(或者说减小误差)的,比喻运行which检查,或者遍历shell中所有的环境变量的PATH;还有一种情况是手机没有root但是存在su文件,这种情况一般出现在手机曾经被root过,但是又进行了系统还原操作。
(2)而第二种,有可能检查不准确,或者会有弹窗提示用户是否要授予root权限。

public class RootUtil {
    public static boolean isDeviceRooted() {
        return checkRootBuildTags() || checkRootFile() || checkSuFile();
    }

    private static boolean checkRootBuildTags() {
        String buildTags = android.os.Build.TAGS;
        return buildTags != null && buildTags.contains("test-keys");
    }

    private static boolean checkRootFile() {
        String[] paths = { "/system/app/Superuser.apk", "/sbin/su", "/system/bin/su", "/system/xbin/su", "/data/local/xbin/su", "/data/local/bin/su", "/system/sd/xbin/su",
                "/system/bin/failsafe/su", "/data/local/su", "/su/bin/su"};
        for (String path : paths) {
            if (new File(path).exists()) return true;
        }
        return false;
    }

    private static boolean checkSuFile() {
        Process process = null;
        try {
            //  /system/xbin/which 或者 /system/bin/which
            process = Runtime.getRuntime().exec(new String[]{"which", "su"});
            BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
            if (in.readLine() != null) return true;
            return false;
        } catch (Throwable t) {
            return false;
        } finally {
            if (process != null) process.destroy();
        }
    }

}

参考:Android检查手机是否被root
参考:determine-if-running-on-a-rooted-device

版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/03/18/android-checks-if-phone-is-rooted/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
海报
Android检查手机是否被root
目前来说Android平台并没有提供能够root检查的工具。但是可以通过两种方式来判断 系统是否包含su文件 su文件是否能够执行 但是这两种检查方式都存在缺点: ……
<<上一篇
下一篇>>
文章目录
关闭
目 录