这是在Android上测试root的可靠方法吗?

时间:2017-05-03 23:52:06

标签: android

我制作的应用需要检查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,而是要求我的方法是准确的,还是有明显的缺陷。

2 个答案:

答案 0 :(得分:2)

您可以考虑使用RootBeer。它使用各种检查来指示设备是否已植根。

就像

一样简单
RootBeer rootBeer = new RootBeer(context);
if(rootBeer.isRooted()){

}

答案 1 :(得分:0)

所以我实际上发现这不是一个可靠的方法,因为z-index永远不会为空。改变

101

stackTrace

让它发挥作用。