是否有可能以编程方式确定Android设备是否已植根?
我想检查一个android设备是否是根源的。 如果设备是根植的,我不希望我的应用程序向用户显示适当的消息,并且应用程序不应该在根设备上工作。
我已经通过各种链接和博客,其中有代码snipplets来检查设备是否是根源。 但我也发现多位开发人员说,无法以编程方式检查设备是否已植根或无法确定。 代码片段可能无法在所有设备上提供100%准确的结果,结果也可能取决于用于生成android设备的工具。
请让我知道是否有任何方法确认设备是否已植根或不是以编程方式。
谢谢,萨加尔
我没有足够的声望点评论,所以我必须添加另一个答案。
CodeMonkey的帖子中的代码适用于大多数设备,但至少在Nexus 5上使用Marshmallow并不适用,因为即使在非root用户的设备上,哪个命令也能正常工作。 但是因为su不起作用,它会返回一个非零的退出值。 这段代码虽然期望有一个例外,所以它必须像这样修改:
private static boolean canExecuteCommand(String command) {
try {
int exitValue = Runtime.getRuntime().exec(command).waitFor();
return exitValue == 0;
} catch (Exception e) {
return false;
}
}
可能重复的Stackoverflow。
这一个有一个答案
在第二个链接上回答。 这家伙在大约10台设备上进行了测试,并为他工作。
/**
* Checks if the device is rooted.
*
* @return <code>true</code> if the device is rooted, <code>false</code> otherwise.
*/
public static boolean isRooted() {
// get from build info
String buildTags = android.os.Build.TAGS;
if (buildTags != null && buildTags.contains("test-keys")) {
return true;
}
// check if /system/app/Superuser.apk is present
try {
File file = new File("/system/app/Superuser.apk");
if (file.exists()) {
return true;
}
} catch (Exception e1) {
// ignore
}
// try executing commands
return canExecuteCommand("/system/xbin/which su")
|| canExecuteCommand("/system/bin/which su") || canExecuteCommand("which su");
}
// executes a command on the system
private static boolean canExecuteCommand(String command) {
boolean executedSuccesfully;
try {
Runtime.getRuntime().exec(command);
executedSuccesfully = true;
} catch (Exception e) {
executedSuccesfully = false;
}
return executedSuccesfully;
}
链接地址: http://www.djcxy.com/p/24611.html
上一篇: Is it possible to programmatically say for sure if an android device is rooted?
下一篇: Prevent application from Root Cloak to hide root access