Проверка корневого доступа к устройству android

Я хочу проверить, есть ли у моего устройства root-права. Когда я пробую этот код ниже на реальном устройстве, все в порядке. Но некорневой эмулятор ломается в этой строке

if (new File(path).exists())
    return true;

Путь "/ system / xbin / su" существует.

private static boolean isRooted() {
    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;
}

Эмулятор Genymotion или Android studio всегда ломает блок кода.

Все ли эмуляторы Android рутированы?

Используйте этот подход: stackoverflow.com/a/35628977/5629011

alizeyn 31.10.2018 13:24

isEmulator (context) не работает в commonutils. Устройства Android studio и эмулятор genymotion всегда возвращают false.

6155031 31.10.2018 13:46
2
2
2 755
1

Ответы 1

Вы можете проверить, есть ли у устройства root-права, следующим способом:

public static boolean isRootedDevice(Context context) {

    boolean rootedDevice = false;
    String buildTags = android.os.Build.TAGS;
    if (buildTags != null && buildTags.contains("test-keys")) {
        Log.e("Root Detected", "1");
        rootedDevice = true;
    }

    // check if /system/app/Superuser.apk is present
    try {
        File file = new File("/system/app/Superuser.apk");
        if (file.exists()) {
            Log.e("Root Detected", "2");
            rootedDevice = true;
        }
    } catch (Throwable e1) {
        //Ignore
    }

    //check if SU command is executable or not
    try {
        Runtime.getRuntime().exec("su");
        Log.e("Root Detected", "3");
        rootedDevice = true;
    } catch (IOException localIOException) {
        //Ignore
    }

    //check weather busy box application is installed
    String packageName = "stericson.busybox"; //Package for busy box app
    PackageManager pm = context.getPackageManager();
    try {
        Log.e("Root Detected", "4");
        pm.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
        rootedDevice = true;
    } catch (PackageManager.NameNotFoundException e) {
        //App not installed
    }

    return rootedDevice;
}  

Он вернет true, если устройство внедрено, иначе false.

Другие вопросы по теме