object RootUtils {
fun isDeviceRootedAndroid() = checkRootMethod1() || checkRootMethod2() || checkRootMethod3()
private fun checkRootMethod1(): Boolean {
val buildTags = android.os.Build.TAGS
return buildTags != null && buildTags.contains("test-keys")
}
private fun checkRootMethod2(): Boolean {
val paths = mutableListOf(
"/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 (path in paths) {
if (File(path).exists()) {
return true
}
}
return false
}
private fun checkRootMethod3(): Boolean {
var process: Process? = null
try {
process = Runtime.getRuntime().exec(arrayOf("/system/xbin/which", "su"))
val reader = BufferedReader(InputStreamReader(process.inputStream))
if (reader.readLine() != null) {
return true
}
return false
} catch (t: Throwable) {
return false
} finally {
process?.let {
it.destroy()
}
}
}
}