如何用java编写adb shell命令

3pvhb19x  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(578)

我想从android设备中提取一些.db文件进行自动化测试
打开命令提示符2。输入adb shell命令,下面是我想用java编程在命令提示符中编写的命令,

adb shell
run-as com.sk.shaft
cd files
cp file.db /sdcard/download/sample.db3
exit                               
exit                              
adb pull /sdcard/download/sample.db3 C:/users/libin/desktop/sample.db

到目前为止,我可以打开命令提示符,但我不能在命令提示符中输入上述命令。

public class DBExtract {

    public static void main(String[] args) throws IOException {

Process process= Runtime.getRuntime().exec("cmd /c start cmd.exe /k ");
}
}

有人能建议一下吗?

kfgdxczn

kfgdxczn1#

运行多个命令。当打开 cmd 你失去了控制。您可以创建一个批处理脚本,在新的 cmd 窗口并重定向输入。
您可以在 /k 的参数 cmd.exe . 在批处理文件中,可以使用来自批处理的重定向。
实际上,您正在运行两个命令。 adb shell 是一个命令和 adb pull 是另一个。要在来自adb的shell中执行“子命令”,请使用 process.getOutputStream() ,创建 OutputStreamWriter 在上面写命令。
因此,为adb shell创建一个进程,将文本重定向到程序的输入,然后使用 adb pull 在另一个过程中。
如果要查看命令的输出,请使用 Process#getInputStream .
程序可以如下所示:

public class DBExtract {

    public static void main(String[] args) throws IOException {
        Process process= Runtime.getRuntime().exec("adb shell");
        try(PrintWriter pw=new PrintWriter(new BufferedWriter(new OutputStreamWriter(process,getOutputStream(),StandardCharsets.UTF_8)))){
            pw.println("run-as com.sk.shaft");
            pw.println("cd files");
            pw.println("cp file.db /sdcard/download/sample.db3");
            pw.println("exit");
            pw.println("exit");
        }
        process=Runtime.getRuntime().exec("adb pull /sdcard/download/sample.db3 C:/users/libin/desktop/sample.db");
    }
}

相关问题