我制作的应用需要检查root访问权限。我在StackOverflow上找到了一些解决方案,但它们涉及检查已知根二进制文件的硬路径,这并不是那么普遍,所以我想避免使用它。
首先,我创建了一个新的Process来执行su
,然后检查其InputStream中的字符串,如" not found"或者"许可被拒绝。"我认为这很有效,直到我在Android 4.1模拟器上尝试它,其中InputStream与异常中返回的StackTrace完全不同。
过了一会儿,我想出了这个功能:
private boolean testSudo() {
StackTraceElement[] stackTrace = new StackTraceElement[] { null };
try{
Runtime.getRuntime().exec("su");
} catch (Exception e) {
stackTrace = e.getStackTrace();
}
return stackTrace == null;
}
我想知道的是,这实际上是一种可靠的方法吗?理论上,当StackTrace保持为null时返回true,但如果已添加某些内容则返回false。对我来说,它看起来很普遍,但我的旧方法也是如此。
编辑:this没有回答我的问题。我不是要求 如何检查root,而是要求我的方法是准确的,还是有明显的缺陷。
答案 0 :(得分:2)
您可以考虑使用RootBeer。它使用各种检查来指示设备是否已植根。
就像
一样简单RootBeer rootBeer = new RootBeer(context);
if(rootBeer.isRooted()){
}
答案 1 :(得分:0)
所以我实际上发现这不是一个可靠的方法,因为z-index
永远不会为空。改变
101
到
stackTrace
让它发挥作用。