10

在某些 Android 设备上,在 ADB shell 中,我只能运行echo, cd, ls. 当我运行时:

tar -cvf //mnt/sdcard/BackUp1669/apk/test.tar /mnt/sdcard/test.apk

或命令cp,它返回:

sh: tar: not found

为什么我不能运行这些命令?一些设备支持这些命令。我的最终目标是将文件从/data/data文件夹复制到 SD 卡。我得到了su并得到了以下代码:

int timeout = 1000;
String command = "tar -cvf /" + Environment.getExternalStorageDirectory() + "/cp/"
        + packageName + ".tar" + " " + path;
DataOutputStream os = new DataOutputStream(process.getOutputStream());
BufferedReader is = new BufferedReader(new InputStreamReader(new DataInputStream(
        process.getInputStream())), 64);

String inLine;
try {
    StringBuilder sbCommand = new StringBuilder();
    sbCommand.append(command).append(" ");
    sbCommand.append("\n");
    os.writeBytes(command.toString());
    if (is != null) {
        for (int i = 0; i < timeout; i++) {
            if (is.ready())
                break;
            try {
                Thread.sleep(5);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        if (is.ready()) {
            inLine = is.readLine();
        } else {
        }
    }

} catch (IOException e) {
    e.printStackTrace();
}

它总是停在is.ready(),当我把它改成它时,process.waitfor()它也停了。为什么?

4

7 回答 7

12

据我所知,运行 shell 命令的唯一方法是:

Process proc = Runtime.getRuntime().exec("your command");
于 2012-04-23T09:21:43.100 回答
11

您可以在 Android 上运行 Linux 命令。但通常只有很少的预装。如果您想添加更多命令,您可能需要您的设备并在其上安装busybox

这不适用于应用程序中的生产性用途,但可以帮助您使用设备。

于 2012-04-23T09:22:36.990 回答
2

如果你有系统的二进制文件,你可以在你的系统上运行任何东西。

说你必须明白你必须找到tar.

看这里http://forum.xda-developers.com/showthread.php?t=872438

可能还有其他地方..

于 2012-04-23T09:22:57.003 回答
0

您可能可以通过使用终端仿真器应用程序来完成此操作。正如您在上面所写的,我不知道 DOS 命令的效果如何。但是,终端仿真器无需 root 即可工作。

于 2020-05-05T21:02:17.990 回答
0

您可以在您的 android 设备上安装 Termux 应用程序并使用该应用程序运行 Linux 命令

于 2021-12-06T00:09:46.273 回答
-1

安装busybox,然后按以下格式输入命令:

busybox [linux 命令]

没有busybox就不能使用所有的linux命令,因为Android没有标准linux操作系统中可用的所有二进制文件。

仅供参考,二进制文件只是一个包含已编译代码的文件。许多默认二进制文件存储在 /system/bin/sh 目录中。所有这些命令,如 'cp' 'ls' 'get' 等,实际上都是二进制文件。您可以通过以下方式查看它们:

ls -a /system/bin/sh

希望这可以帮助。

于 2017-06-08T09:53:01.643 回答
-2

作为对 Igor Ganapolsky的回复,您必须为定位设置一个数据库。

可能find足以满足您的需求。

例子:

find -name *.apk
于 2017-04-15T17:13:37.387 回答