我试图以编程方式读取/写入root电话上的/ data目录中的文件.
我首先shell执行su以确保我的程序获得超级用户访问权限,这很好.
我能够在我的程序中读取/写入/ data thru shell execs命令中的文件,但是当使用Android文件或其他API时,我得到“Permission denied”java.io.IOException.
如何使用API读取/写入root电话上的数据?这显然是可能的,因为像Root Explorer这样的程序可以做到这一点.
谢谢,
解决方法:
简而言之,不,这不是严格可能通过API,因为您需要确保您的修改命令以root身份运行,否则操作系统将拒绝这些操作.
您需要将修改命令传递给su命令,以便它以root身份执行.在他的github上,Chainfire提供了一个sample implementation的Shell类,您可以使用它来以root身份执行rm命令或任何其他命令.
以编程方式执行此操作的一种方法是将您要编辑的文件复制到临时目录,例如/sdcard/tmp.txt,然后编辑该文件,然后将其复制回原始位置并覆盖那里的那个.
另一种方法是chmod目标文件(即chmod 777 /data/xxx.txt),以便您可以以编程方式读取/写入其内容.这就是为什么您收到Permission denied错误的原因,因为您的程序没有访问其他文件的权限.这里的关键是你需要确保chmod命令本身被传送到su命令,以便不会拒绝THAT命令.我建议您阅读下面链接中的指南,因为它非常全面地说明了如何处理以root身份运行的情况.
资料来源:How-To SU