我想要一个Java程序执行以下shell命令:
apktool.jar d /path/to/my/app.apk
直接在命令行上执行此命令时,此命令可以完美运行。
Java代码:
public static void main(String[] args) {
String command = "apktool d /path/to/my/app.apk";
try {
Runtime.getRuntime().exec(command);
} catch (IOException e1) {
e1.printStackTrace();
}
}
没有错误,也不例外。没有任何反应,给人的印象是我已经在整个互联网上搜索了解决方案。有人知道我在做什么错吗?一个简单的命令,例如
mkdir /路径/到/一个/新/文件夹
没有问题的作品。
我使用ProcessBuilder尝试了相同的操作:
try {
Process process = new ProcessBuilder(command).start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
这次我只得到“无法运行程序” apktool d /path/to/my/app.apk,没有这样的文件或目录。”我什至无法运行mkdir命令。
您需要使用java.exe调用jar,但您并没有这样做。另外,您还需要捕获流程中的输入和错误流,这是您运行此方法所无法做到的。改用ProcessBuilder,获取流,然后运行该过程。
例如(我只能做一个Windows示例),
import java.io.IOException;
import java.io.InputStream;
import java.util.Scanner;
public class ProcessEg {
private static Process p;
public static void main(String[] args) {
String[] commands = {"cmd", "/c", "dir"};
ProcessBuilder pBuilder = new ProcessBuilder(commands);
pBuilder.redirectErrorStream();
try {
p = pBuilder.start();
InputStream in = p.getInputStream();
final Scanner scanner = new Scanner(in);
new Thread(new Runnable() {
public void run() {
while (scanner.hasNextLine()) {
System.out.println(scanner.nextLine());
}
scanner.close();
}
}).start();
} catch (IOException e) {
e.printStackTrace();
}
try {
int result = p.waitFor();
p.destroy();
System.out.println("exit result: " + result);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句