【问题标题】:Superuser and moving files超级用户和移动文件
【发布时间】:2025-11-24 00:45:01
【问题描述】:

我正在尝试将 XML 文件从我的应用程序私有目录移动到另一个应用程序私有目录。它正确地要求我提供超级用户,我授予他权限,但他没有移动文件。

final Runtime runtime = Runtime.getRuntime();
            try {
                runtime.exec("su");
                runtime.exec("mv " + Environment.getDataDirectory().toString() + filename + " " + path);
            } catch (Exception e) {
                e.printStackTrace();
            }

为什么?顺便说一下,文件名是“FlappyBird.xml”,路径是“/data/data/com.dotgears.flappybird/shared_prefs”

另外,我是这样尝试的:

runtime.exec("mv /data/data/de.aciid.nullgc/files/FlappyBird2.xml /data/data/com.dotgears.flappybird/shared_prefs/");

也不行。

【问题讨论】:

    标签: java android eclipse root


    【解决方案1】:

    您正在执行两个独立的命令:

    • su 启动 root shell(您随后忽略)
    • mv像你一样跑,视为失败

    你需要的是一个类似的命令

    sudo mv src dst
    

    以 root 身份工作时要小心。

    【讨论】:

    • 我认为您的意思是sudo mv src dst,正如您所拥有的那样,mv src dst 将被视为su 命令的参数。
    • runtime.exec("su mv /data/data/de.aciid.nullgc/files/FlappyBird2.xml /data/data/com.dotgears.flappybird/shared_prefs/");没用。我刚刚删除了单个 su 请求并将其全部放在这一行中。不动。 /编辑:啊,好吧。我现在在一个 cmd 中请求了 su(不知道我是否必须这样做),然后在接下来的 sudo mv src dest 中请求了。可悲的是,它不动。
    • @KrauseDroid:一定是sudo 而不是su,但我想你知道。让您不错过异常(如果有),检查返回码(必须为 0 表示操作成功),并读取进程输出(通过getErrorStream)。除非给出错误的参数,否则它实际上必须有效。