Android SU权限:如何使用它们?

6
这里有一个情况,我正在开发一款使用Java的Android应用程序。我对这些都非常熟悉,但现在是我第一次需要使用SU权限。我只需要替换(实际上是重命名)system/app目录中的文件,但看起来我无法以通常的方式执行它(File类中的renameTo方法),它只会返回FALSE,这意味着操作中出现了一些错误。
那么,有谁能告诉我如何使用SU呢?我的测试手机已完全root并安装了SU 3.0.3.2,任何需要SU的应用程序都可以正常运行。
我应该使用相同的方法但在清单中添加一些内容吗?我应该以某种方式使用busybox吗?
我已经搜索过了,但找不到任何有用的信息。而且,在官方Android Superuser网站上也没有文档。
提前致谢!

1
重复的问题:https://dev59.com/M2w05IYBdhLWcg3wVwg4 - TryTryAgain
没问题。在 StackOverflow 上进行快速搜索几乎总能找到结果;-) - TryTryAgain
1个回答

9

由于/system是只读的,您可能还需要将文件系统重新挂载为可读写。因此,您可能需要使用类似下面这个命令调用SU:

mount -o r,remount -t yaffs2 /dev/block/mtdblock3 /system

要执行该命令,您可以尝试两种方法(我注意到在Android中有时一种方法可行,另一种则不行)。

Process p = Runtime.getRuntime().exec(new String[]{"su", "-c", "mount -o r,remount -t yaffs2 /dev/block/mtdblock3 /system"});

或者你可以这样做。
Process p =  Runtime.getRuntime().exec("su");
p.getOutputStream().write("mount -o r,remount -t yaffs2 /dev/block/mtdblock3 /system".getBytes());
p.getOutputStream().write(<my next command>);

是的,我确实需要这样做。抱歉问一个愚蠢的问题,但还是想问一下:如何做到呢?我的意思是,如何使用某个命令调用SU? - Adiost
1
我稍微编辑了一下,使它更加完整。 - user931366
谁很棒?你很棒! :) 我欠你的。 - Adiost
@user931366 我认为对于多个命令,你需要在每个命令的末尾加上"\n"。并且将"exit \n"作为最后一个命令,并刷新流。 - android developer

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