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

时间:2012-04-23 09:13:10

标签: android shell adb

在某些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()时,它也会停止。为什么呢?

6 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:10)

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

这不适用于应用程序中的高效使用,但可以帮助您使用设备。

答案 2 :(得分:1)

如果您拥有系统的二进制文件,则可以在系统上运行任何内容。

说你必须明白你必须找到tar的二进制文件。

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

可能还有其他地方..

答案 3 :(得分:0)

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

busybox [linux命令]

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

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

ls -a / system / bin / sh

希望这有帮助。

答案 4 :(得分:0)

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

答案 5 :(得分:-2)

在回复Igor Ganapolsky时,你必须设置一个数据库进行定位。

可能'找到'就足以满足您的需求。

exmample:

find -name * .apk