一部の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カードにコピーすることです。 sを取得し、次のコードを取得しました。
_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()
に変更すると停止しました。どうして?
私の知る限り、シェルコマンドを実行する唯一の方法は次のとおりです。
Process proc = Runtime.getRuntime().exec("your command");
システムのバイナリがある場合は、システム上で何でも実行できます。
tar
のバイナリを見つける必要があることを理解する必要があると言います。
ここを見てください http://forum.xda-developers.com/showthread.php?t=872438
そしておそらく他の場所..
Busyboxをインストールし、次の形式でコマンドを入力します。
busybox [Linuxコマンド]
Androidには、標準のLinuxオペレーティングシステムで使用できるすべてのバイナリがないため、busyboxなしですべてのLinuxコマンドを使用することはできません。
参考までに、バイナリはコンパイルされたコードを含む単なるファイルです。デフォルトのバイナリの多くは/ system/bin/shディレクトリに保存されています。 'cp''ls''get'などのこれらのコマンドはすべて、実際にはバイナリです。あなたはそれらを通して見ることができます:
ls -a/system/bin/sh
お役に立てれば。