47 lines
1.3 KiB
Kotlin
47 lines
1.3 KiB
Kotlin
package com.example.shiftalarm
|
|
|
|
import java.io.File
|
|
|
|
object RootUtil {
|
|
fun isDeviceRooted(): Boolean {
|
|
return 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 = arrayOf(
|
|
"/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
|
|
return try {
|
|
process = Runtime.getRuntime().exec(arrayOf("/system/xbin/which", "su"))
|
|
val reader = process.inputStream.bufferedReader()
|
|
reader.readLine() != null
|
|
} catch (t: Throwable) {
|
|
false
|
|
} finally {
|
|
process?.destroy()
|
|
}
|
|
}
|
|
}
|