10

一部のAndroidデバイスでは、ADBシェルで実行できるのは、、、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

私の知る限り、シェルコマンドを実行する唯一の方法は次のとおりです。

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 に答える
-1

busybox をインストールしてから、次の形式でコマンドを入力します。

busybox [linux コマンド]

Android には、標準の Linux オペレーティング システムで利用できるすべてのバイナリがないため、busybox なしですべての Linux コマンドを使用することはできません。

参考までに、バイナリはコンパイルされたコードを含む単なるファイルです。デフォルトのバイナリの多くは /system/bin/sh ディレクトリに保存されています。'cp' 'ls' 'get' などのこれらのコマンドはすべて、実際にはバイナリです。それらは次の方法で表示できます。

ls -a /システム/ビン/sh

お役に立てれば。

于 2017-06-08T09:53:01.643 に答える