通过java.io.file在安卓上获取Root权限

9

我想创建一个根文件浏览器,但是我在访问根目录时遇到了一些问题。当我尝试访问/data目录时,该文件夹为空。

当我执行以下操作时:

File file = new File("/data/");

然后请求该目录中的项目,结果为空(没有root权限)。我知道如何使用Process执行简单的root命令,但是这样在没有root权限的手机上将无法工作。因此,我需要一些适用于所有手机的东西。
我考虑使用File来处理未root设备,使用ls命令来处理已root设备,但不确定它是否是最佳解决方案。我也可以只是使用ls,带或不带root,但我想使用File
有没有一种方法可以创建一个root文件浏览器,同时保持对非root手机的支持?
谢谢

你应该查看https://github.com/Stericson/RootTools和https://github.com/Stericson/RootShell。 - Guillaume
我尝试使用File.listRoots()方法并成功列出了文件。当我使用file.getParent()方法时,有时它会显示系统文件夹。 - ELITE
@Guillaume 这不是只适用于已经root的设备吗?我希望它能在所有设备上运行。另外,我不想使用外部库。 - Thomas Vos
@ELITE 但它会显示根目录中的文件吗?如果是已经root过的设备,它能否编辑这些文件? - Thomas Vos
在我的情况下,它显示了系统目录中的文件。如果设备已经取得了 root 权限,我不确定它是否允许您编辑文件。 - ELITE
1
@ELITE /system 在非 root 设备上是可查看的,但您无法编辑文件。 - Thomas Vos
1个回答

4
您的建议是正确的。在已经获取了Root权限的设备上,您无法真正使用File来访问没有Root权限的文件夹,因此在这种情况下,您肯定需要依赖于ls。基本上,您可以选择在所有地方都使用ls或者使用一个将隐藏细节的抽象层。在后一种情况下,您将拥有类似于File的接口,它将在底层使用Filels
我记得当我设计自己的文件浏览器时,也曾面临同样的问题,而我选择了第二种解决方案。使用File更快,因此此解决方案具有一些性能优势。我还不得不编写自己的ls,因为我不想依赖系统提供的ls,因为无法保证其提供的输出。
我还建议阅读How-To SU,它包含了如何正确调用命令的许多有用细节。

是的,我考虑过使用这两种方法。我只是不知道最好的实现方式是什么。你是如何实现的? - Thomas Vos
它可以更高效地完成任务,你能解释一下吗? - Thomas Vos
在使用“ls”之前,您应该查看此网址http://unix.stackexchange.com/questions/128985/why-not-parse-ls - Guillaume
@Guillaume 这就是为什么我自己写了一个 ls,正如我在答案中提到的那样,我对它有完全的控制。 - Malcolm
Malcolm,感谢您的帮助。我有一个想法,知道如何实现它。但是,从@Guillaume分享的链接中,我读到解析ls是一种不好的做法,因为有换行符和特殊字符。所以我还卡在那个点上。您是否知道一种方法可以列出目录中所有文件的“真实”名称?我只想要一个包含所有目录中文件的原始名称的数组,以便稍后编辑这些文件。 - Thomas Vos
显示剩余9条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接