Проверка устройства Android на рут
Я хочу проверить, рутировано ли мое устройство или нет. Когда я пытаюсь этот код ниже в реальном устройстве не рутируется, это нормально. Но не рутированный эмулятор ломается в этой строке
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-студии всегда ломается в блоке кода.
Все ли эмуляторы андроида рутированы?
1 ответ
Вы можете проверить, является ли устройство рутованным или нет по нижеуказанному методу:
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
,