如何在Android设备上运行Linux命令?

10

在一些Android设备上,我只能在ADB shell中运行echocdls命令。当我运行如下命令时:

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()时,它也停止了。为什么?


3
你知道吗,安卓系统的shell比标准的Linux操作系统受到的限制要多得多。 - JoxTraex
7个回答

12

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

Process proc = Runtime.getRuntime().exec("your command");

11

你可以在Android上运行Linux命令。但通常只有很少的预安装命令。

如果你想添加更多的命令,可能需要root你的设备,并在其上安装busybox

这并不适用于应用程序内的生产使用,但可以帮助你处理你的设备。


谢谢,我知道问题出在哪里。但是我的问题还没有解决。 - Wendy Chen
那么我该如何在Android上运行locate命令以搜索文件呢?似乎这不是BusyBox中的一个小程序。 - IgorGanapolsky

2

0
你可以在安卓设备上安装Termux应用,并通过该应用运行Linux命令。

0

你可以尝试使用终端模拟器应用程序来完成这个任务。正如你之前所写的,我不知道DOS命令会有多好的效果。但是,终端模拟器可以在没有root权限的情况下工作。


你应该在回答中提供更多的上下文。如果你没有提供足够的上下文,那么可以在评论区给提问者一些建议。 - Md. Yamin Mollah

-1

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

busybox [linux命令]

没有busybox,您无法使用所有Linux命令,因为Android没有标准Linux操作系统中可用的所有二进制文件。

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

ls -a /system/bin/sh

希望这有所帮助。


-2
回复 Igor Ganapolsky,你需要设置一个数据库来定位。
可能 find 对你的需求足够了。
例如:
find -name *.apk

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